- 问题现象
当前有01、02、03三个节点的hadoop集群,其中01是master节点,02、03为slave节点。当动态添加04的slave节点后,hadoop的web界面中显示的节点数目未增加。进一步观察,节点列表中的slave节点内容,时而是02、04节点,时而是02、03节点,非常诡异。
- 分析原因
找到datadir目录下的current/VERSION文件,03和04服务器中的datanodeUuid数值完全一致,可推断,master节点把03和04当做同一台服务器来处理了。原因是,之前03服务器已经启动过,生成的VERSION中已经记录了datanodeUuid,克隆虚拟机的时候,所有信息都保留和03服务器一样。
- 解决方案
考虑到如果不是克隆而是直接安装的情况下,04服务器的datadir和tmpdir目录下是空白的,因此,将04服务器的DataNode、NodeManager服务停止,删除datadir和tmpdir目录下的所有文件,重新启动DataNode、NodeManager服务,再次观察,hadoop集群中的内容显示了02、03、04三个datanode,与预期一致,问题解决。
- 注意事项
通过拷贝或者克隆虚拟机的方式新增节点时,需要做如下几项操作:
1、修改主机名、IP地址,重启新增的节点,并将/etc/hosts文件拷贝到集群中的其他节点中(若使用本地DNS服务器,此步骤可省略,只需要在DNS服务器中将改节点添加到域名解析记录中即可);
2、新增的节点需要重新运行ssh-****** -t rsa生成公钥,并将公钥添加到authorized_keys文件中,并拷贝到集群中的其他节点中。
参考资料:
1、Hadoop datanode正常启动,但是Live nodes中却缺少节点的问题
https://blog.****.net/wk51920/article/details/51729460
2、hadoop2.7 动态新增节点和删除节点
https://blog.****.net/Mark_LQ/article/details/53393081