如何在Hadoop中正确删除节点?

时间:2013-05-27 13:34:48

标签: hadoop

我在拥有10台以上计算机的群集上运行Hadoop 1.1.2。对于HDFS和MapReduce,我想很好地向上和向下扩展。 “很好”,我的意思是我要求数据不会丢失(允许HDFS节点解除),并且在关闭之前运行任务的节点完成。

我注意到,一旦退役, datanode 进程就会死掉,这很好。这是我删除节点的方法:

  • 将节点添加到mapred.exclude
  • 将节点添加到hdfs.exclude
  • $ hadoop mradmin -refreshNodes
  • $ hadoop dfsadmin -refreshNodes
  • $ hadoop-daemon.sh stop tasktracker

要重新添加节点(假设它已被删除,如上所述),这就是我正在做的事情。

  • 从mapred.exclude中删除
  • 从hdfs.exclude
  • 中删除
  • $ hadoop mradmin -refreshNodes
  • $ hadoop dfsadmin -refreshNodes
  • $ hadoop-daemon.sh start tasktracker
  • $ hadoop-daemon.sh start datanode

这是“正确”向上和向下扩展的正确方法吗?按比例缩小时,我注意到某些不幸工作的工作持续时间急剧上升(因为他们在已删除节点上运行的任务需要重新安排)。

3 个答案:

答案 0 :(得分:29)

如果您之前未设置dfs排除文件,请按照1-3进行操作。其他从4开始。

  1. 关闭NameNode。
  2. 将dfs.hosts.exclude设置为指向空的排除文件。
  3. 重新启动NameNode。
  4. 在dfs排除文件中,使用完整主机名或IP或IP:端口格式指定节点。
  5. 在mapred.exclude中执行相同的操作
  6. 执行bin/hadoop dfsadmin -refreshNodes。这会强制NameNode重新读取排除文件并启动退役过程。
  7. 执行bin/hadoop mradmin -refreshNodes
  8. 监控NameNode和JobTracker Web UI并确认停用过程正在进行中。更新可能需要几秒钟。类似"Decommission complete for node XXXX.XXXX.X.XX:XXXXX"的消息将在完成退役后出现在NameNode日志文件中,此时您可以从群集中删除节点。
  9. 当进程完成后,namenode UI会将datanode列为已停用。 Jobtracker页面将显示更新的活动节点数。运行bin/hadoop dfsadmin -report进行验证。停止排除节点上的datanode和tasktracker进程。
  10. 如果您不打算将计算机重新引入群集,请将其从群集中删除 包含和排除文件。
  11. 要将节点添加为datanode和tasktracker,请参阅Hadoop FAQ page

    编辑:当要从群集中删除活动节点时,作业会发生什么?

    要退出的节点上运行的作业会受到影响,因为在该节点上安排的作业的任务将标记为KILLED_UNCLEAN(用于映射和减少任务)或KILLED(用于作业设置和清除)任务)。有关详细信息,请参阅JobTracker.java中的第4633行。将通知该工作失败该任务。大多数情况下,Job跟踪器将重新安排执行。但是,经过多次重复故障后,它可能会决定让整个工作失败或成功。请参阅JobInProgress.java中的第2957行。

答案 1 :(得分:3)

您应该知道,由于Hadoop表现良好,它确实希望以多个副本提供数据。通过删除节点,您可以消除数据最佳可用性,并且您可以对群集施加额外的压力以确保可用性。

即。通过取下节点,您可以确保在其他地方创建所有数据的额外副本。因此,除非您使用与默认配置不同的数据管理范例(=在群集中保留3个副本),否则您不应仅仅为了好玩而这样做。

要使Hadoop集群运行良好,您需要实际存储集群中的数据。否则,您无法将计算结果移动到数据中,因为数据也不存在。很多关于Hadoop的事情是关于拥有智能驱动器"可以在通过网络发送数据之前执行计算。

因此,为了使这一点合理,您可能需要以某种方式拆分群集。让一组节点保留原始数据的3个主副本,并有一些"附加组件"仅用于存储中间数据并在该部分上执行计算的节点。永远不要更改主节点,因此他们不需要重新分配您的数据。仅在加载节点为空时才关闭它们?但这可能尚未实施。

答案 2 :(得分:0)

在退役过程中,临时或临时文件会自动清除。现在缺少这些文件,hadoop无法识别它是如何丢失的。因此,即使对所有其他文件进行了实际的解除授权,退役过程也会一直等待,直到解决为止。

在Hadoop GUI中 - 如果您注意到参数" Under-Replicated Blocks的数量"不是随着时间减少或几乎不变,那么这就是可能的原因。

所以使用以下命令列出文件

hadoop fsck / -files -blocks -racks

如果您看到这些文件是临时的而不是必需的,请删除这些文件或文件夹

示例:hadoop fs -rmr /var/local/hadoop/hadoop/.staging/*(在此处给出正确的路径)

这样可以立即解决问题。取消调试的节点将在5分钟内移动到死节点。