在实际的hadoop环境中,有时我们需要新增或者删除datanode节点,来达到扩容或缩容的目的,本文就来讲解如何新增和删除datanode。
新增节点和删除节点会涉及两个关键的配置项(hdfs-site.xml文件中):
- dfs.hosts:表示被允许连接到namenode的所有机器列表。为空,则表示所有机器都可以连接namenode,所以该配置一般不配,一般只会使用exclude,不然反而麻烦,配了后新增节点都得去修改添加该配置。
- dfs.hosts.exclude:表示不允许连接到namenode的所有机器列表。为空,则表示没有机器被禁止连接
dfs.hosts和dfs.hosts.exclude分别指向一个文件(注意是绝对路径)。下面的节点地址我们统一使用机器主机名,所以就得要机器配置了/etc/hosts的主机名和IP的映射关系。假设 dfs.hosts指向的文件是include,dfs.hosts.exclude指向的文件是exclude。
新增节点
1)将新节点的地址添加到include(假如没配置就算了,过此步),一般不配。
2)在namenode运行hadoop dfsadmin -refreshNodes,刷新节点配置,为了允许datanode连接namenode(假如没有第一步则不用运行该步骤)
3)将新节点添加到slaves文件,该步骤只是为了可以让hadoop的启动集群的脚本(比如start-dfs.sh),可以顺便启动该datanode节点(没有该配置,该节点也是可以单独命令启动的)
4)在新节点上启动datanode(各版本启动命令略有不同):sh hadoop-daemon.sh start datanode
5)在namenode运行hadoop dfsadmin -refreshNodes,可以到web ui查看新增节点
6)新节点新增后,也许就会涉及数据的再平衡问题,使用balancer去均衡数据存储。
删除节点
1)将待删除的节点地址添加到exclude文件
2)在namenode运行hadoop dfsadmin -refreshNodes,刷新节点配置。
3)转到网页查看是否待删除的节点的所有块都成了Decommissioned,是则表示所有块已经复制完毕。可以关闭已经删除的节点。
4)关闭要删除的datanode(各版本关闭命令略有不同):sh hadoop-daemon.sh stop datanode
5)如果有include文件配置,则在其中移除这节点,再执行hadoop dfsadmin –refreshNodes
6)在slaves文件中删除该节点