Hadoop 单机环境搭建:配置文件、启动命令、验证方法,照着做就能跑
Hadoop 的配置,关键不在改参数,在于搞清楚”每个文件是管什么的、改了什么会影响什么”。
四个核心配置文件,各管一摊:
| 文件 |
管什么 |
core-site.xml |
Hadoop 核心配置——HDFS 地址、临时目录 |
hdfs-site.xml |
HDFS 配置——副本数、元数据目录、数据目录、Web UI 端口 |
mapred-site.xml |
MapReduce 配置——用 YARN 跑、任务内存 |
yarn-site.xml |
YARN 配置——资源调度、节点管理 |
配置文件:四个文件,照着改就行
配置文件都在 $HADOOP_HOME/etc/hadoop/ 目录下。
1. core-site.xml——Hadoop 的”总入口”
告诉 Hadoop “HDFS 在哪”、”临时文件放哪”。
1 2 3 4 5 6 7 8 9 10 11 12
| <configuration> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/opt/data/hadoop/tmp</value> </property> </configuration>
|
关键点: fs.defaultFS 写对了,Hadoop 才能找到 NameNode。单机用 localhost,集群用主机名。
2. hdfs-site.xml——HDFS 自己怎么跑
副本数、元数据存哪、数据存哪。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>/opt/data/hadoop/namenode</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/opt/data/hadoop/datanode</value> </property> <property> <name>dfs.namenode.http-address</name> <value>localhost:50070</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>localhost:50090</value> </property> <property> <name>dfs.permissions.enabled</name> <value>false</value> </property> </configuration>
|
关键点: dfs.replication 在单机必须设 1,不然 DataNode 只有一个节点,存不了 3 份,NameNode 会一直卡在安全模式。
3. mapred-site.xml——MapReduce 跑在什么框架上
从模板复制一份再改:
1
| cp mapred-site.xml.template mapred-site.xml
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| <configuration> <property> <name>mapred.job.tracker</name> <value>localhost:9001</value> </property> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>localhost:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>localhost:19888</value> </property> <property> <name>mapreduce.map.memory.mb</name> <value>1024</value> </property> <property> <name>mapreduce.reduce.memory.mb</name> <value>1024</value> </property> </configuration>
|
关键点: mapreduce.framework.name 不设成 yarn,MapReduce 会跑在本地模式,不会用 YARN 调度。
4. yarn-site.xml——YARN 资源调度配置
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| <configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.resourcemanager.hostname</name> <value>localhost</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>localhost:8088</value> </property> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>2048</value> </property> <property> <name>yarn.scheduler.minimum-allocation-mb</name> <value>512</value> </property> <property> <name>yarn.scheduler.maximum-allocation-mb</name> <value>2048</value> </property> </configuration>
|
关键点: yarn.nodemanager.aux-services 不配,MapReduce 的 Shuffle 跑不起来,Reduce 拿不到 Map 的输出数据。
创建目录 + 初始化 NameNode
配置文件里写的目录(/opt/data/hadoop/ 下的)要手动创建,并给 Hadoop 用户写权限:
1 2
| mkdir -p /opt/data/hadoop/{tmp,namenode,datanode} chown -R hadoop:hadoop /opt/data/hadoop
|
初始化 NameNode(只有第一次启动需要):
看到 successfully formatted 就成功了。注意: 格式化会清空 NameNode 元数据目录,已有的数据会丢失。生产环境执行这个操作要极度谨慎。
启动 Hadoop
单机环境分步启动(2.x 推荐,避免依赖问题):
1 2 3 4 5
| # 启动 HDFS ./start-dfs.sh
# 启动 YARN ./start-yarn.sh
|
启动后,用 jps 确认进程:
1 2 3 4 5 6 7
| jps # 应该看到: # NameNode # DataNode # SecondaryNameNode # ResourceManager # NodeManager
|
少了任何一个,说明对应的服务没起来。
验证 Web UI
- HDFS:
http://localhost:50070(3.x 是 9870)
- YARN:
http://localhost:8088
能打开说明服务正常。HDFS 页面能看到 “Live Nodes” 数量,应该 ≥ 1。
HDFS 基本操作
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| # 创建目录 hdfs dfs -mkdir /test
# 上传文件 hdfs dfs -put localfile.txt /test/
# 查看文件列表 hdfs dfs -ls /test/
# 查看文件内容 hdfs dfs -cat /test/localfile.txt
# 下载文件 hdfs dfs -get /test/localfile.txt ./
|
常见问题
问题1:启动后 DataNode 进程缺失
hadoop.tmp.dir 权限不对,或者格式化 NameNode 后 DataNode 的数据目录残留了旧的 namespaceID。
解决:
1 2 3
| rm -rf /opt/data/hadoop/datanode/* hdfs namenode -format ./start-dfs.sh
|
问题2:50070 端口打不开
NameNode 没起来。先 jps 确认有没有 NameNode 进程,再看日志:
1
| tail -100 $HADOOP_HOME/logs/hadoop-*-namenode-*.log
|
问题3:任务提交后卡住
检查 YARN 资源是否够。yarn-site.xml 里 yarn.nodemanager.resource.memory-mb 设太小,Container 申请不到内存,任务一直等。
问题4:HDFS 一直处于安全模式
DataNode 数量不足或副本数不够。单机环境 dfs.replication 设成 1 了吗?
关闭 Hadoop
1 2
| ./stop-yarn.sh ./stop-dfs.sh
|