如何修复"任务尝试_201104251139_0295_r_000006_0无法报告状态600秒".

use*_*138 24 hadoop mapreduce

我写了一个mapreduce作业来从数据集中提取一些信息.数据集是用户对电影的评分.用户数约为250K,电影数约为300k.地图的输出是<user, <movie, rating>*> and <movie,<user,rating>*>.在reducer中,我将处理这些对.

但是当我运行这个工作时,映射器按预期完成,但是reducer总是抱怨

Task attempt_* failed to report status for 600 seconds.
Run Code Online (Sandbox Code Playgroud)

我知道这是由于无法更新状态,所以我context.progress()在我的代码中添加了一个调用,如下所示:

int count = 0;
while (values.hasNext()) {
  if (count++ % 100 == 0) {
    context.progress();
  }
  /*other code here*/
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,这没有帮助.仍有许多减少任务失败.

这是日志:

Task attempt_201104251139_0295_r_000014_1 failed to report status for 600 seconds. Killing!
11/05/03 10:09:09 INFO mapred.JobClient: Task Id : attempt_201104251139_0295_r_000012_1, Status : FAILED
Task attempt_201104251139_0295_r_000012_1 failed to report status for 600 seconds. Killing!
11/05/03 10:09:09 INFO mapred.JobClient: Task Id : attempt_201104251139_0295_r_000006_1, Status : FAILED
Task attempt_201104251139_0295_r_000006_1 failed to report status for 600 seconds. Killing!
Run Code Online (Sandbox Code Playgroud)

BTW,错误发生在reduce to copy阶段,日志说:

reduce > copy (28 of 31 at 26.69 MB/s) > :Lost task tracker: tracker_hadoop-56:localhost/127.0.0.1:34385
Run Code Online (Sandbox Code Playgroud)

谢谢您的帮助.

wlk*_*wlk 26

最简单的方法是设置此配置参数:

<property>
  <name>mapred.task.timeout</name>
  <value>1800000</value> <!-- 30 minutes -->
</property>
Run Code Online (Sandbox Code Playgroud)

在 mapred-site.xml

  • 这实际上不是一个修复.如果扩展任务,这是一种解决方法,会遇到同样的问题. (2认同)

小智 15

最简单的另一种方法是在程序内部设置作业配置

 Configuration conf=new Configuration();
 long milliSeconds = 1000*60*60; <default is 600000, likewise can give any value)
 conf.setLong("mapred.task.timeout", milliSeconds);
Run Code Online (Sandbox Code Playgroud)

**在设置之前,请检查jobtracker GUI中的Job文件(job.xml)文件,了解正确的属性名称,无论是mapred.task.timeout还是mapreduce.task.timeout...在运行作业时,再次检查作业文件中是否根据设置的值更改了该属性.


kee*_*lar 11

在较新的版本中,参数的名称已更改mapreduce.task.timeout为此链接(搜索task.timeout)中所述.此外,您还可以按照上面的链接中所述禁用此超时:

如果任务既不读取输入,也不写入输出,也不更新其状态字符串,则终止任务前的毫秒数.值为0将禁用超时.

以下是以下示例设置mapred-site.xml:

<property>
  <name>mapreduce.task.timeout</name>
  <value>0</value> <!-- A value of 0 disables the timeout -->
</property>
Run Code Online (Sandbox Code Playgroud)