2012-02-29 72 views
6

当我运行我碰到下面的错误我Hadoop的工作:收到异常Hadoop的错误 - 任务被杀死在自己

请求由用户 任务已经由用户KILLED_UNCLEAN杀死任务“attempt_201202230353_23186_r_000004_0”

日志看起来很干净。我运行了28个减速器,而这对所有的减速器都没有发生。它发生在选定的几个,减速器再次启动。我不明白这一点。另外我注意到的是,对于一个小数据集,我很少看到这个错误!

+0

由于这个问题,工作是否失败?您是否在启用投机执行的情况下运行? – 2012-03-01 03:44:24

+0

是,推测执行设置为true。这项工作没有失败,它最终完成了大量的kiiled /失败的减速器,这总体上增加了工作完成时间! – RFT 2012-03-01 14:38:52

+0

@Pradeep Gollakota另外,我观察到,那些被杀死或失败的减速器一旦继续以8-9倍的速度死亡,直到他们成功并且即使一次没有死亡的减速器在整个工作中都是干净的! – RFT 2012-03-01 17:27:28

回答

1

你可以尝试在减少逻辑中使用计数器(hadoop计数器)吗?它看起来像hadoop无法确定您的减少计划是否运行或挂起。它会等待几分钟并杀死它,即使您的逻辑可能仍在执行。

4

有三件事情尝试:

设置一个计数器
如果Hadoop的看到了工作进展,那么它不会杀死它的计数器(见Arockiaraj Durairaj的答案),这似乎是最优雅,因为它可以让你更深入了解长时间运行的工作,并可能是挂断。

更长任务超时
默认情况下10分钟后Hadoop作业超时。改变超时是有点蛮力的,但可以工作。想象一下分析一般为5MB文件(歌曲)的音频文件,但是你有几个50MB文件(整个专辑)。 Hadoop为每个块存储单个文件。因此,如果您的HDFS块大小为64MB,那么5MB文件和50 MB文件都需要1个块(64MB)(请参见http://blog.cloudera.com/blog/2009/02/the-small-files-problem/,这里是Small files and HDFS blocks)。但是,5MB作业运行速度比50MB作业快。任务超时可以在代码(mapred.task.timeout)每答案的工作提高到这个类似的问题:How to fix "Task attempt_201104251139_0295_r_000006_0 failed to report status for 600 seconds."

增加任务尝试
配置的Hadoop进行比4次默认尝试更多的(见普拉迪普Gollakota的答案)。这是三者中最强悍的方法。 Hadoop会多次尝试这项工作,但你可能会掩盖一个潜在的问题(小型服务器,大型数据块等)。