Hadoop如何解除DataNode的功能并用另一台机器替换它?

Hadoop如何解除DataNode的功能并用另一台机器替换它?,hadoop,hbase,hdfs,apache-zookeeper,sysadmin,Hadoop,Hbase,Hdfs,Apache Zookeeper,Sysadmin,我正在为我的5节点hadoop集群使用虚拟机(1个虚拟机有Name节点,1个虚拟机有JobTracker/SecondaryNameNode/HMaster,3个虚拟机有DataNodes/TaskTrackers/hregionserver/zookeers),这是Cloudera发行版,我是手动安装的,而不是通过Cloudera Manager安装的 编辑-包含DataNode的每个VM的磁盘空间大约已满50-60%。如果我能在明天早上之前完成这件事,我会很高兴,但我可以在24小时内完成 我

我正在为我的5节点hadoop集群使用虚拟机(1个虚拟机有Name节点,1个虚拟机有JobTracker/SecondaryNameNode/HMaster,3个虚拟机有DataNodes/TaskTrackers/hregionserver/zookeers),这是Cloudera发行版,我是手动安装的,而不是通过Cloudera Manager安装的

编辑-包含DataNode的每个VM的磁盘空间大约已满50-60%。如果我能在明天早上之前完成这件事,我会很高兴,但我可以在24小时内完成

我必须返回一个vm(特别是一个特定的DataNode)并用另一个vm替换它(不要问为什么)。我已经购买了第二个虚拟机,可以随时开始安装

以下是我目前的策略:

  • 将DataNode的数据目录同步到新节点,以及zookeeper的数据目录
  • rsync所有配置文件(core site.xml、hdfs site.xml、mapred-site.xml、hbase-site.xml、zoo.cfg)
  • 询问有关堆栈溢出的问题
  • 为什么是三号?NameNode保存存储在HDFS上的所有文件的所有块的位置的元数据。HBase元表指向具有其数据的HFiles的RegionServer。Zookeeper服务器在DataNode上的数据也很重要

    如何指示NameNode和HBase/Zookeeper指向新购买的VM上的数据?我还没有考虑什么


    现在这实际上是一个开发环境,我可以使用Pig导出HDFS数据和HBase数据,清除所有DataNode和Zookeeper的数据目录,然后使用Pig将数据导入回。除了跛脚之外,我相信这对我来说是一个很好的练习。

    如果您只是在一个大小合理的集群中更换一台机器,您通常可以关闭要停用的机器的regionserver,等待重新分配区域,然后关闭datanode并等待重新分配在Hadoop NameNode UI中将“未充分复制的块数”降至零。然后,当您向群集添加新计算机时,您可以运行Hadoop工具来重新平衡数据块。然后使用HBase外壳运行HBase
    balancer
    命令。这将重新平衡HBase区域

    如果要停用多个节点,可能需要阅读相关内容。还可以使用
    hdfs site.xml
    dfs.hosts.exclude
    )和
    mapred site.xml
    mapreduce.jobtracker.hosts.exclude.filename
    )中的节点排除项将节点标记为停用

    我发现在HBase中重新平衡区域的速度相对较快,并不令人担忧。重新平衡HDFS块要花费更多的时间,因此根据集群的大小和集群的满度,重新平衡HDFS块可能值得,也可能不值得


    值得一提的是,我实际上没有尝试手动将数据从一个节点复制到另一个节点,但我知道在停用节点后重新插入该节点效果很好(例如,如果机器需要一些离线硬件维护)有鉴于此,如果您使用具有相同DNS和/或IP地址的新主机替换停用的计算机,我希望您的方式能够正常工作。它也可能会像您尝试过的方式一样正常工作,但似乎要做更多的工作,并且只有当您尝试将群集资源调配不足的时间段减到最少时,它才会有用。

    嘿,b4hand.I启用并连接我的新节点(DN和RS),然后关闭旧节点上的RS。这就成功了。但是,我关闭了旧节点上的DN,大约24小时后,我仍然有相同数量的未复制块。在我的DN的数据目录上发出
    du-h/data | tail-
    ,表明它比默认值有所增加,但仍然少于数量的1/10我的其他DNs。有什么想法吗?你的块复制系数是多少?你的群集大小比你的复制系数大吗?你可以运行
    hdfs fsck/
    来告诉你关于丢失的块的更多信息。另外,你的namenode是否在namenode UI的“死节点”部分显示禁用的DN?