hadoop如何解除datanode的委托并用另一台机器替换它?

koaltpgm  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(310)

我将vms用于我的5节点hadoop集群(1vm有name node,1vm有jobtracker/secondarynamenode/hmaster,三个vm有datanodes/tasktrackers/hregionservers/zookeers),这是cloudera发行版,我手动安装,而不是通过cloudera manager安装。
编辑-每个包含datanode的vm的磁盘空间大约已满50-60%。如果我能在明天早上之前完成这件事,那就太好了,但我可以在24小时内逃脱惩罚。
我必须返回一个vm(特别是一个特定的datanode)并用另一个vm替换它(不要问为什么)。我有第二个虚拟机采购,可以开始安装时,我想。
以下是我目前的策略:
rsync datanode的数据目录到新节点,以及zookeeper的数据目录。
rsync所有配置文件(core site.xml、hdfs site.xml、mapred-site.xml、hbase-site.xml、zoo.cfg)
询问有关堆栈溢出的问题
为什么是第三个?namenode保存hdfs上存储的所有文件的所有块的位置的元数据。hbase元表指向具有其数据的hfiles的区域服务器。zookeeper服务器在datanode上的数据也很重要。
如何指示namenode和hbase/zookeeper指向新购买的vm上的数据?我还没有考虑什么?
现在这实际上是一个开发环境,我可以使用pig导出hdfs数据和hbase数据,清除所有datanode和zookeeper的数据目录,然后使用pig将数据导入。除了跛脚,我相信这对我来说是一个很好的锻炼。

deikduxw

deikduxw1#

如果您只是在一个大小合理的集群中替换一台机器,那么您通常只需关闭要停用的机器的regionserver,等待重新分配区域,然后关闭datanode,等待hadoop namenode ui中的“未复制的块数”降到零。然后,当您向集群添加新机器时,可以运行hadoop平衡器工具来重新平衡数据块。然后使用hbase shell运行hbase balancer 命令。这将重新平衡hbase区域。
如果要停用多个节点,则可能需要阅读有关排空节点的内容。也可以使用中的节点排除将节点标记为已停用 hdfs-site.xml ( dfs.hosts.exclude )以及 mapred-site.xml ( mapreduce.jobtracker.hosts.exclude.filename ).
我发现hbase中的区域再平衡相对较快,并不令人担忧。重新平衡hdfs块要花费更多的时间,因此根据集群的大小和集群的满度,重新平衡hdfs块可能是值得的,也可能是不值得的。
值得一提的是,我实际上并没有尝试手动将数据从一个节点复制到另一个节点,但我知道在停用节点后重新插入该节点可以正常工作(例如,如果机器需要一些离线硬件维护。)鉴于此,如果您使用具有相同dns和/或ip地址的新主机替换已停用的机器,我希望您的工作方式是正确的。它也可能只是按照您尝试过的方式工作,但是它似乎需要做更多的工作,并且只有在您尝试最小化集群资源调配不足的时间段时才有用。

相关问题