一、添加新节点(扩容)
添加新节点通常称为"节点上线"。
1. 准备工作
-
硬件与系统:确保新节点的硬件、操作系统、Java 版本等与现有集群一致。
-
网络:配置好主机名、hosts 文件、SSH 无密码登录等。
-
Hadoop 配置 :将现有的
hdfs-site.xml,core-site.xml,yarn-site.xml,mapred-site.xml等配置文件复制到新节点的 Hadoop 配置目录下。 -
启动 DataNode 和 NodeManager :在新节点上,使用
hadoop-daemon.sh或hdfs命令启动服务。bash# 使用 hdfs 命令(推荐) $HADOOP_HOME/bin/hdfs --daemon start datanode $HADOOP_HOME/bin/hdfs --daemon start nodemanager # 或者使用老版本的 hadoop-daemon.sh $HADOOP_HOME/sbin/hadoop-daemon.sh start datanode $HADOOP_HOME/sbin/yarn-daemon.sh start nodemanager
2. 如何"刷新"集群状态(让集群识别新节点)
对于 HDFS (DataNode):
HDFS 是自动发现的。一旦 DataNode 启动,它会主动联系配置文件中指定的 NameNode,并向其注册。NameNode 会自动将其加入到集群中。
- 验证方法 :
- 访问 NameNode 的 Web UI(通常是
http://<namenode_ip>:9870)。 - 点击 "Datanodes",你应该能看到新加入的节点及其状态。
- 使用 HDFS 命令:
hdfs dfsadmin -report,查看报告的 Live datanodes 数量和信息。
- 访问 NameNode 的 Web UI(通常是
对于 YARN (NodeManager):
YARN 也是自动发现的。NodeManager 启动后会向 ResourceManager 注册。
- 验证方法 :
- 访问 ResourceManager 的 Web UI(通常是
http://<resourcemanager_ip>:8088)。 - 点击 "Nodes",你应该能看到新加入的 NodeManager 节点。
- 使用 YARN 命令:
yarn node -list,查看所有活跃的节点。
- 访问 ResourceManager 的 Web UI(通常是
二、删除节点(缩容)
删除节点需要更谨慎一些,分为"优雅退役"和"强制退役"。我们通常采用优雅退役,以保证数据不丢失。
1. 配置退役节点(告知集群哪些节点要下线)
这是关键步骤,你需要通过修改配置文件来"刷新"集群的认知。
步骤:
-
创建排除列表文件:在 NameNode 和 ResourceManager 所在的机器上,创建两个文件:
dfs.exclude:用于 HDFS DataNode 退役。yarn.exclude:用于 YARN NodeManager 退役。
(文件路径和名称可以自定义)
-
编辑文件 :在每个文件中,逐行写入要退役的节点的主机名或 IP。
示例dfs.exclude内容:datanode-04.cluster.example.com 192.168.1.105示例
yarn.exclude内容:nodemanager-04.cluster.example.com 192.168.1.105 -
在配置文件中指向排除列表 :
修改 NameNode 的
hdfs-site.xml,添加或修改以下属性:xml<property> <name>dfs.hosts.exclude</name> <value>/path/to/your/dfs.exclude</value> <description>Path to file containing datanodes to exclude.</description> </property>修改 ResourceManager 的
yarn-site.xml,添加或修改以下属性:xml<property> <name>yarn.resourcemanager.nodes.exclude-path</name> <value>/path/to/your/yarn.exclude</value> <description>Path to file containing nodemanagers to exclude.</description> </property>
2. 如何"刷新"集群状态(让集群开始退役流程)
对于 HDFS (DataNode):
-
刷新 NameNode:修改配置后,你需要让 NameNode 重新读取配置。
bash# 使用 hdfs 命令 $HADOOP_HOME/bin/hdfs dfsadmin -refreshNodes这个命令就是 "刷新" 的魔法命令。它会让 NameNode 读取
dfs.hosts.exclude文件。 -
观察退役过程:
- 执行命令后,该 DataNode 的状态会变为 "Decommission In Progress"。
- NameNode 会开始将这个节点上的数据块复制到集群中的其他节点。
- 通过
hdfs dfsadmin -report或 Web UI 监控进度,直到该节点状态变为 "Decommissioned"。此时,该节点上已无数据块。
-
关闭节点:当状态变为 "Decommissioned" 后,你就可以安全地在该节点上停止服务了。
bash$HADOOP_HOME/bin/hdfs --daemon stop datanode
对于 YARN (NodeManager):
-
刷新 ResourceManager:同样,需要让 ResourceManager 重新读取排除列表。
bash# 使用 yarn 命令 $HADOOP_HOME/bin/yarn rmadmin -refreshNodes这个命令是 YARN 的 "刷新" 命令。
-
观察退役过程:
- 在 ResourceManager 的 Web UI 上,该 NodeManager 的状态会发生变化。
- 它会等待当前正在运行的任务完成后,变为 "DECOMMISSIONED" 状态。
-
关闭节点:状态变为退役后,停止服务。
bash$HADOOP_HOME/bin/yarn --daemon stop nodemanager