我向 4 台主机的集群提交了作业,我可以看到它正确分布在 4 个节点中,每个节点 1 个映射任务。
后来,其中一个节点出现故障。
我在故障节点上停止了 tasktracker,将该节点的 ID 添加到排除文件中,并使用 hadoop mradmin -refreshNodes 更新了节点列表。故障节点从 hadoop 管理页面上的可用节点列表中消失。
然后我再次启动tasktracker,用mradmin更新节点,观察到该节点再次出现在job tracker列表中。
在节点宕机期间,hadoop重新调度map任务在另一个节点上执行,于是开始运行2个map任务。我的集群不平衡:
- 2 个节点各运行 1 个任务,
- 1 个节点正在运行 2 个任务
- 1 个节点(我重新启动的节点)没有运行任何任务。
我用 hadoop job -kill-task attempt_201308010141_0001_m_000000_1 终止了作业,看起来它再也没有启动过 - 所以我可以看到 3 个节点各运行 1 个任务,1 个节点根本没有任务,1 个列表中的待处理任务。
我错过了什么吗?将任务从一个节点“移动”到另一个节点的正确方法是什么?
最佳答案
Jobs 保留一份列入黑名单的 tasktracker 列表(有一个全局黑名单和一个每个作业黑名单)。 我认为这就是为什么您的新尝试不会在重新启动的任务跟踪器结束时重新开始的原因。
您可以尝试以下命令:
hadoop job -unblacklist <jobid> <hostname>
hadoop job -unblacklist-tracker <hostname>
来自 http://doc.mapr.com/display/MapR/TaskTracker+Blacklisting
关于Hadoop - 强制任务尝试在不同节点上启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17985324/