我向 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 个待处理任务。
我错过了什么吗?将任务从一个节点“移动”到另一个节点的正确方法是什么?