Hadoop - 强制任务尝试在不同节点上启动

标签 hadoop

我向 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/

相关文章:

regex - Pig Hadoop 匹配默认值?

scala - 如何在图中找到每个顶点的度-RDD转换?

python - 基于 key 分发 Hadoop 流输出文件

hadoop - 使用 --master yarn-cluster : issue with spark-assembly 运行 spark-submit

hadoop - 分布式缓存中的访问路径变量

java - Hadoop、Mahout实时处理替代方案

python - spark 从 oracle 导入数据 - java.lang.ClassNotFoundException : oracle. jdbc.driver.OracleDriver

java - Hadoop:使用自定义输入格式拆分大图像文件

java - 在 Hadoop 2 中使用 camel-hdfs 组件

hadoop - org.apache.hadoop.hbase.client.NoServerForRegionException