1.增加新的节点
添加一个新的节点虽然只用配置hdfs-site.xml文件和mapred-site.xml文件,但最好还是配置一个授权节点列表。
如果允许任何机器都可以连接到NameNode上并充当DataNode,这是存在安全隐患的,因为这样的机器可能能够获得未授权文件的访问权限。此外这样的机器并不是真正的DataNode,但它可以存储数据,却又不在集群的控制之下,并且任何时候都有可能停止运行,从而造成数据丢失。由于配置简单或存在配置错误,即使在防火墙内这样的处理也可能存在风险,因此在集群中也要对DataNode进行明确的管理。
要向集群添加新的节点,需要执行以下步骤:
1.向include文件中添加新节点的网络地址;
2.使用以下命令更新NameNode中具有连接权限的DataNode集合:hadoop dfsadmin refreshNodes
3.更新带有新节点的slaves文件,以便Hadoop控制脚本在执行后续操作时可以使用更新后的slaves文件中的所有节点;
4.启动新的数据节点;
5.重新启动MapReduce集群
6.检查网页用户界面是否有新的DataNode和TaskTracker.
需要注意的是,HDFS不会自动将旧DataNode上的数据转移到新的DataNode中,但我们可以运行平衡器命令进行集群均衡。
2.删除节点
撤销数据节点时要避免数据的丢失。在撤销前,需要先通知NameNode要撤销的节点,然后在撤销此节点前将上面的数据块转移出去。而如果关闭了正在运行的TaskTracker,那么JobTracker会意识到错误并将任务分配到其他TaskTracker中去。
撤销节点过程由exclude文件控制:对于HDFS来说,可以通过dfs.hosts.exclude属性来控制;对于MapReduce来说。可以由mapred.hosts.exclude来设置。
需要从集群中撤销节点,需要执行以下步骤:
1.将需要撤销的节点的网络地址增加到exclude文件中,注意,不要在此时更新include文件;
2.重新启动MapReduce集群来终止已撤销节点的TaskTracker;
3.用以下命令更新具有新的许可DataNode节点集的NameNode:hadoop dfsadmin -refreshNode
4.进入网络用户界面,先检查已撤销的DataNode的管理状态是否变为"DecommissionInProgress",然后把数据块复制到集群的其他DataNode中;
5.当所有DataNode报告其状态为“Decommissioned”时,所有数据块也都会被复制,此时可以关闭已撤销的节点;
6.从include中删除节点网络地址,然后再次运行命令:Hadoop dfsadmin -refreshNodes
7.从slaves文件中删除节点。