HDFS与Linux系统其他服务的集成方法
在集成HDFS与Linux系统中的其他服务(如YARN、MapReduce、Hive等)前,需完成以下通用配置:
JAVA_HOME环境变量(如export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk)。authorized_keys文件(cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys),确保NameNode与DataNode、ResourceManager与NodeManager等节点间通信无阻碍。/usr/local/hadoop),并通过/etc/profile文件设置HADOOP_HOME及PATH环境变量(export HADOOP_HOME=/usr/local/hadoop; export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin)。core-site.xml设置默认文件系统URI(如hdfs://namenode-host:9000),hdfs-site.xml配置数据存储目录(dfs.datanode.data.dir)及副本数(dfs.replication,生产环境建议≥3)。YARN是Hadoop的资源调度核心,负责为HDFS上的计算任务分配资源。集成步骤如下:
yarn-site.xml,设置ResourceManager主机名(yarn.resourcemanager.hostname,如localhost)及NodeManager辅助服务(yarn.nodemanager.aux-services=mapreduce_shuffle,支持MapReduce shuffle操作)。mapred-site.xml,指定MapReduce任务运行在YARN上(mapreduce.framework.name=yarn)。start-dfs.sh(启动HDFS)和start-yarn.sh(启动YARN),通过jps命令验证进程(需看到NameNode、DataNode、ResourceManager、NodeManager)。hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar wordcount /input /output),检查HDFS输出目录(/output)是否生成结果文件。MapReduce是Hadoop的传统批处理引擎,需依赖HDFS存储输入/输出数据:
hdfs dfs -put /local/input /hdfs/input)。hadoop jar命令提交到YARN(如上述WordCount示例)。InputFormat接口),Reduce任务将处理结果写回HDFS(OutputFormat接口)。Hive是构建在HDFS之上的数据仓库工具,提供SQL-like查询能力,数据存储依赖HDFS:
hive-site.xml,设置元数据存储路径(如Derby数据库的javax.jdo.option.ConnectionURL)及HDFS数据仓库目录(hive.metastore.warehouse.dir,如hdfs://namenode-host:9000/user/hive/warehouse)。CREATE TABLE logs (id INT, content STRING); LOAD DATA INPATH '/input/logs.txt' INTO TABLE logs;),Hive会将表数据存储至HDFS指定目录(/user/hive/warehouse/logs)。Pig是Hadoop的数据流处理工具,通过Pig Latin脚本处理HDFS数据:
PATH(export PATH=$PATH:/usr/local/pig/bin),编辑pig.properties设置HDFS默认URI(fs.defaultFS=hdfs://namenode-host:9000)。logs = LOAD '/input/logs.txt' USING PigStorage(); filtered = FILTER logs BY $1 MATCHES 'error'; STORE filtered INTO '/output/errors';),执行脚本(pig script.pig),Pig会自动从HDFS读取数据、处理并将结果写回HDFS。HBase是构建在HDFS之上的分布式NoSQL数据库,依赖HDFS存储数据文件:
hbase-site.xml,设置HDFS数据目录(hbase.rootdir=hdfs://namenode-host:9000/hbase)及ZooKeeper地址(hbase.zookeeper.quorum)。/hbase/data/default/<table_name>),RegionServer从HDFS读取数据并提供实时访问。fsimage和edits文件记录HBase元数据变更。Sqoop是Hadoop与关系型数据库之间的数据迁移工具,可将数据在HDFS与MySQL、Oracle等数据库间导入导出:
sqoop import命令将数据库表数据导入HDFS(如sqoop import --connect jdbc:mysql://localhost:3306/mydb --table employees --target-dir /input/employees --username root --password 123456)。sqoop export命令将HDFS数据导出至数据库表(如sqoop export --connect jdbc:mysql://localhost:3306/mydb --table employees_export --export-dir /input/employees --username root --password 123456)。--as-textfile、--as-avrodatafile等参数指定。Flume是分布式日志采集工具,可将日志数据实时传输至HDFS:
flume.conf,设置Source(如exec类型读取日志文件)、Channel(如memory或file类型缓存数据)、Sink(如hdfs类型写入HDFS),例如:agent.sources.logSrc.type = exec
agent.sources.logSrc.command = tail -F /var/log/app.log
agent.channels.memChan.type = memory
agent.sinks.hdfsSink.type = hdfs
agent.sinks.hdfsSink.hdfs.path = hdfs://namenode-host:9000/flume/logs/%Y-%m-%d
agent.sinks.hdfsSink.channel = memChan
flume-ng agent --conf-file flume.conf --name agent,Flume会将日志数据实时写入HDFS指定目录(按日期分区)。Spark是内存计算框架,可与HDFS无缝集成,利用HDFS存储数据:
val data = spark.read.csv("hdfs://namenode-host:9000/input/data.csv"))。data.filter($"age" > 18))。data.write.parquet("hdfs://namenode-host:9000/output/result"))。spark-submit --master yarn --deploy-mode cluster),利用YARN分配资源。集成过程中需注意安全控制:
krb5.conf及keytab文件,通过kinit命令获取票据(kinit username@REALM)。hdfs dfs -chmod(修改权限)、hdfs dfs -chown(修改所有者)命令设置文件/目录权限(如hdfs dfs -chmod 700 /user/admin/data),防止未授权访问。