4

我向 4 个主机的集群提交了作业,我可以看到它正确分布在 4 个节点之间,每个节点 1 个地图任务。

后来,其中一个节点发生故障。

我在失败的节点上停止了 tasktracker,将该节点的 ID 添加到排除文件并使用hadoop mradmin -refreshNodes更新了节点列表。故障节点从 hadoop 管理页面上的可用节点列表中消失。

然后我再次启动 tasktracker,使用mradmin更新节点,并观察到该节点再次出现在作业跟踪器列表中。

在节点宕机期间,hadoop重新调度了另一个节点上的map任务执行,因此开始运行2个map作业。我的集群不平衡:

  • 2 个节点各运行 1 个任务,
  • 1 个节点正在运行 2 个任务
  • 并且 1 个节点(我重新启动的那个)没有运行任何任务。

我用hadoop job -kill-task attempt_201308010141_0001_m_000000_1杀死了这项工作,看起来它永远不会再次启动 - 所以我可以看到 3 个节点每个运行 1 个任务,1 个节点根本没有任务,列表中有 1 个待处理任务。

我错过了什么吗?将任务从一个节点“移动”到另一个节点的正确方法是什么?

4

1 回答 1

0

作业保留一份列入黑名单的任务跟踪器列表(有一个全局黑名单和一个每个作业一个)。我认为这就是为什么您的新尝试不会在重新启动的任务跟踪器上重新开始的原因。

您可以尝试以下命令:

hadoop job -unblacklist <jobid> <hostname>
hadoop job -unblacklist-tracker <hostname>

来自http://doc.mapr.com/display/MapR/TaskTracker+Blacklisting

于 2014-12-23T16:44:26.877 回答