楔子
Hadoop委任和解除节点,环境是非高可用环境。参考hadoop权威指南 和 视频
现有的集群规划
had2 | had3 | had4 | |
---|---|---|---|
HDFS | NameNode DataNode | DataNode | DataNode SecondaryNameNode |
YARN | NodeManager | NodeManager ResourceManager | NodeManager |
Hadoop集群的管理员经常需要向集群中添加节点,或从集群中移除节点。
通常情况下,节点同时运行DataNode和tasktracker,因而两者一般同时被委任或解除。
1 委任节点
1.1 理论
委任一个新节点。首先,配置hdfs-site.xml文件,指向namenode;其次,配置mapred-site.xml文件,指向jobtracker;最后,启动datanode和jobtracker守护进程。然而,预先指定一个经过审核的节点从中挑选新节点仍不失为一种好的方法。
随便允许一台机器以DataNode身份连接到namenode是不安全的,因为该机器很可能会访问未授权的数据。此外,这种机器并非正在的DataNode,不在集群的控制下,随时可能停止,从而导致潜在的数据丢失。
被允许连接到namenode的所有DataNode放在一个文件中,文件名称由dfs.hosts属性指定。该文件放在namenode的本地文件系统中,每行对应一个DataNode的网络地址(由DataNode报告——可以通过namenode的网页查看)。如果需要一个DataNode指定多个网络地址,可以将多个网络地址放在一行,由空格隔开。
类似的,可能连接到jobtracker的各个tasktracker也在同一个文件中指定(该文件的名称由mapred.hosts属性指定。通常情况下,由于集群中的节点同时运行DataNode和tasktracker守护进程,dfs.hosts和mapred.hosts会同时指向一个文件,即include文件)
** 向集群添加新节点的步骤 **
-
将新节点的网络地址添加到include文件中。
-
运行一下指令,将经过审核的一系列tasktracker信息更新至jobtracker;
hadoop dfsadmin -refreshNodes
-
运行以下指令,将经过审核的一系列的tasktracker信息更新至jobtracker
hadoop mradmin -refreshNodes## 书中是这样的但是实际操作 时行不通 ,使用的是 yarn rmadmin -refreshNodes
-
以新节点更新slaves文件。这样的话,hadoop控制脚本会将新节点包括在未来操作之中。
-
启动新的DataNode和tasktracker。
-
检查新的DataNode 和tasktracker是否都出现在网页界面中。
hdfs不会自动将块从旧的DataNode移到新的DataNode以平衡集群。用户需要自行运行均衡器。
1.2 操作
1.2.1 创建dfs.hosts
在namenode 所在机器上创建 dfs.hosts文件,存放DataNode节点(包括新服役的节点)
root@had2 hadoop]# more dfs.hosts
had2
had3
had4
had1 # 这是新服役的节点
1.2.2 配置hdfs-site.xml
在namenode 所在机器上 ,hdfs-site.xml 配置增加属性
<!-- 新加节点配置 -->
<property>
<name>dfs.hosts</name>
<value>/opt/hadoop-2.7.2/etc/hadoop/dfs.hosts</value>
</property>
1.2.3 刷新节点
刷新 namenode和 更新resourcemanager 节点
[root@had2 hadoop]# hdfs dfsadmin -refreshNodes
Refresh nodes successful
[root@had2 hadoop]# yarn rmadmin -refreshNodes
19/03/05 22:08:06 INFO client.RMProxy: Connecting to ResourceManager at had3/192.168.226.123:8033
1.2.4 slaves文件增加新主机名称
在 namenode 的 slaves 文件中增加新主机名称
不需要分发
1.2.5 启动节点
在新节点上。单独命令启动新的数据节点和节点管理
hadoop-daemon.sh start datanode
yarn-daemon.sh start nodemanager
如果数据不均衡 ,使用命令实现集群在平衡
start-balancer.sh
2 解除节点
2.1 理论
HDFS能够容忍DataNode故障,但这并不意味着运行随意终止DataNode。以三复本为例,如果同时关闭不同机架上的三个DataNode,则数据丢失的概率会很高。正确的方法是:用户将拟退出的若干DataNode告知namenode。Hadoop系统可在这些DataNode停机之前复制块到其他DataNode。
有了tasktracker的支持。Hadoop对故障的容忍度更高。如果关闭一个正在运行任务的tasktracker。jobtracker会检测故障,并在其他tasktracker上重新调度任务。
若要解除一个节点,则该节点需要出现在exclude文件。对于HDFS来说,文件名称是有dfs.hosts.exclude属性控制。对于MapReduce来说,文件名称由mapred.hosts.exclude属性控制。这些文件列出若干被运行连接到集群的节点。通常情况下,这两个属性指向同一个文件。
判断一个tasktracker是否连接到jobtracker非常简单。仅当tasktracker出现在include文件且不再出现在exclude文件中时,才能够连接到jobtracker。注意,如果未指定include文件,或include文件为空,则意味着所有节点都包含在include文件中。
HDFS的规则稍有不同。如果一个DataNode同时出现在include和exclude文件中,则节点可以连接,但是很快就被解除委任。和tasktracker类似,如果未指定include文件或include文件为空,都意味着包含所有节点。
** 从集群移除节点的步骤 **
-
将代解除节点的网络地址添加到exclude文件中,不更新include文件
-
执行以下指令,使用一组新的审核过的DataNode来更新namenode设置
hadoop dfsadmin -refreshNodes
-
使用一组新的审核过的DataNode来跟新jobtracker设置
hadoop mradmin -refreshNodes
-
转到网页界面,查看待删除DataNode的管理状态是否已经变为正在解除,因为此时相关的DataNode正在被解除的过程之中。这些DataNode会把它们的块复制到其他DataNode中。
-
当所有DataNode的状态变为解除完毕时,表明所有块都已经复制完毕,关闭已经解除的节点。
-
从include文件中移除这些节点,应运行一下命令
hadoop dfsadmin -refreshNodes hadoop mradmin -refreshNodes
-
从slaves文件移除节点
2.2 操作
2.2.1 创建 dfs.hosts.exclude
在namenode 所在机器上创建 dfs.hosts.exclude文件,存放要解除的DataNode节点
2.2.2 配置hdfs-site.xml
在 namenode 的 hdfs-site.xml 配置文件中增加 dfs.hosts.exclude 属性
<!-- 解除节点配置 -->
<property>
<name>dfs.hosts.exclude</name>
<value>/opt/hadoop-2.7.2/etc/hadoop/dfs.hosts.exclude</value>
</property>
2.2.3 刷新
刷新 namenode、刷新 resourcemanager
[root@had2 hadoop]# hdfs dfsadmin -refreshNodes
Refresh nodes successful
[root@had2 hadoop]# yarn rmadmin -refreshNodes
19/03/05 22:08:06 INFO client.RMProxy: Connecting to ResourceManager at had3/192.168.226.123:8033
2.2.4 删除节点
等待退役节点状态为 decommissioned(所有块已经复制完成),停止该节点及节点资源管理器。
停止节点
hadoop-daemon.sh stop datanode
yarn-daemon.sh stop nodemanager
2.2.5 从include文件删除退役节点
从include文件删除退役节点 dfs.hosts 中删除退役节点
刷新 namenode和 resourcemanager
hdfs dfsadmin -refreshNodes
yarn rmadmin -refreshNodes
2.2.6 从slave文件删除退役节点
从 namenode 的 slave 文件中删除退役节点
后记
增加删除节点,在修改配置文件和 dfs.hosts dfs.hosts.exclude
均可单独在 namenode所在的机器 配置,可以不分发到其他 机器。