文章目录
- [1. 背景](#1. 背景)
- [2. HDFS 相关角色配置(HDFS 主从)](#2. HDFS 相关角色配置(HDFS 主从))
-
- [2.1 core-site.xml,决定 NameNode 在哪台机器](#2.1 core-site.xml,决定 NameNode 在哪台机器)
- [2.2 hdfs-site.xml,决定 SecondaryNameNode 在哪台机器](#2.2 hdfs-site.xml,决定 SecondaryNameNode 在哪台机器)
- [2.3 workers 文件,控制 DataNode](#2.3 workers 文件,控制 DataNode)
- [3. YARN 相关角色配置(YARN 主从)](#3. YARN 相关角色配置(YARN 主从))
-
- [3.1 yarn-site.xml,决定 ResourceManager 在哪台机器](#3.1 yarn-site.xml,决定 ResourceManager 在哪台机器)
- [3.2 workers 文件,同时控制 NodeManager](#3.2 workers 文件,同时控制 NodeManager)
- [4. mapred-site.xml](#4. mapred-site.xml)
- [5. hadoop-env.sh](#5. hadoop-env.sh)
- [6. 角色与配置汇总表](#6. 角色与配置汇总表)
- [7. 启动脚本执行逻辑](#7. 启动脚本执行逻辑)
-
- [7.1 start-dfs.sh](#7.1 start-dfs.sh)
- [7.2 start-yarn.sh](#7.2 start-yarn.sh)
- [8. 常见误区](#8. 常见误区)
- [9. 角色验证标准](#9. 角色验证标准)
- [10. 本篇小结](#10. 本篇小结)
1. 背景
看了上一篇的实操,大家想必有一个疑问,集群某个节点作为什么角色运行,到底是怎么设定的。
我们用一个实例,来解释下,如下规划:
shell
node1:NameNode
node2:SecondaryNameNode(2NN)
node3:ResourceManager(RM)
node4:DataNode + NodeManager(DN+NM)
首先我们要知道,Hadoop 分为两大组件:HDFS(存储) + YARN(资源调度)
- HDFS 角色:NameNode、SecondaryNameNode、DataNode
- YARN 角色:ResourceManager、NodeManager
核心一句话:
NameNode、ResourceManager 是「主角色」,在 xml 配置里指定运行主机;DataNode、NodeManager 是「从角色」,由 workers 文件决定在哪些机器自动启动。
2. HDFS 相关角色配置(HDFS 主从)
2.1 core-site.xml,决定 NameNode 在哪台机器
配置属性:fs.defaultFS
<property>
<name>fs.defaultFS</name>
<value>hdfs://node1:9000</value>
</property>
重点说明:
该配置声明整个 HDFS 集群 NameNode 地址为 node1:9000,所有节点读取这个配置,就能找到 NameNode,因此 node1 作为 NameNode 节点。
2.2 hdfs-site.xml,决定 SecondaryNameNode 在哪台机器
配置属性:dfs.namenode.secondary.http-address
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node2:50090</value>
</property>
重点说明:
代表 SecondaryNameNode 运行在 node2 主机,node2 承担 2NN 角色。
同文件中的 dfs.replication 用来设置文件副本数量,仅控制存储策略,不控制节点角色。
2.3 workers 文件,控制 DataNode
文件路径:$HADOOP_HOME/etc/hadoop/workers
文件内容:
node4
重点说明:
写入 workers 中的主机,执行集群启动脚本时,会自动启动 DataNode。本例只填写 node4,仅 node4 会自动启动 DataNode;node1、node2、node3 不会自动拉起 DataNode。
HDFS 角色分配总结:
NameNode:core-site.xml 的 fs.defaultFS
SecondaryNameNode:hdfs-site.xml 的 dfs.namenode.secondary.http-address
DataNode:workers 文件内填写的主机列表
3. YARN 相关角色配置(YARN 主从)
3.1 yarn-site.xml,决定 ResourceManager 在哪台机器
配置属性:yarn.resourcemanager.hostname
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node3</value>
</property>
重点说明:
声明 YARN 主节点 ResourceManager 部署在 node3,node3 作为 RM 节点。
3.2 workers 文件,同时控制 NodeManager
重点说明:
workers 文件里填写的主机,执行 start-yarn.sh 时,会自动在这些主机启动 NodeManager。这里 workers 写入 node4,node4 会自动启动 NodeManager。
YARN 角色分配总结:
ResourceManager:yarn-site.xml 的 yarn.resourcemanager.hostname
NodeManager:workers 文件内填写的主机列表
4. mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
重点说明:
该文件不控制节点角色,只告诉 MapReduce 任务,调度运行依托 YARN,和在哪台机器启动进程无关。
5. hadoop-env.sh
重点说明:
该文件不分配节点角色,仅用于环境配置。
用来配置 JAVA_HOME,root 用户启动集群时,可以声明各个守护进程的启动用户,不会决定节点运行什么角色。
💡 补充建议:这里可以加一句「JAVA_HOME 必须指向所有节点上实际安装的 JDK 路径,否则对应节点上的守护进程会启动失败」,帮助读者理解该配置的实际影响。
6. 角色与配置汇总表
表格
| 角色 | 部署节点 | 由哪个配置文件 + 属性控制 |
|---|---|---|
| NameNode | node1 | core-site.xml → fs.defaultFS |
| SecondaryNameNode | node2 | hdfs-site.xml → dfs.namenode.secondary.http-address |
| DataNode | node4 | workers 文件(填写 node4) |
| ResourceManager | node3 | yarn-site.xml → yarn.resourcemanager.hostname |
| NodeManager | node4 | workers 文件(填写 node4) |
7. 启动脚本执行逻辑
7.1 start-dfs.sh
- 读取 core-site.xml,ssh 远程到 node1,启动 NameNode
- 读取 hdfs-site.xml,ssh 远程到 node2,启动 SecondaryNameNode
- 读取 workers 文件,ssh 远程到 node4,启动 DataNode
7.2 start-yarn.sh
- 读取 yarn-site.xml,ssh 远程到 node3,启动 ResourceManager
- 读取 workers 文件,ssh 远程到 node4,启动 NodeManager
重点说明:
脚本执行前提:node1 可以免密 ssh 登录 node1/node2/node3/node4,脚本才能够远程登录其他节点拉起进程。
8. 常见误区
- ❌ 不是在 node2 本地单独修改配置,让 node2 变成 2NN;集群所有节点配置文件保持完全一致,全局统一指定角色主机。
- ❌ workers 文件同时控制 DataNode 和 NodeManager,文件中登记的机器,脚本启动时会同时启动 DN+NM。
- ❌ 没有写在 workers 中的机器,脚本不会自动启动 DN、NM。node1 不在 workers 列表,则不会自动生成 DataNode 进程。
9. 角色验证标准
集群启动完成后,登录各个节点执行 jps 命令查看进程:
node1:NameNode
node2:SecondaryNameNode
node3:ResourceManager
node4:DataNode、NodeManager
10. 本篇小结
本篇通过 4 节点集群案例,理清 Hadoop 一键启动脚本如何读取配置,自动分配各个节点角色。主角色 NameNode、RM 的部署主机写在 XML 配置中;从角色 DN、NM 由 workers 主机清单控制。理解这套逻辑,就可以自主规划多节点 Hadoop 集群的角色部署。