我有一个EMR流作业(Python),通常可以正常运行(例如10台计算机处理200个输入)。但是,当我对大型数据集(12台机器处理总共6000个输入,每个输入大约20秒)运行它时,在处理2.5小时后,出现以下错误:
java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 143
at org.apache.hadoop.streaming.PipeMapRed.waitOutputThreads(PipeMapRed.java:372)
at org.apache.hadoop.streaming.PipeMapRed.mapRedFinished(PipeMapRed.java:586)
at org.apache.hadoop.streaming.PipeMapper.close(PipeMapper.java:135)
at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:57)
at org.apache.hadoop.streaming.PipeMapRunner.run(PipeMapRunner.java:36)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:441)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:377)
at org.apache.hadoop.mapred.Child$4.run(Child.java:255)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:396)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1132)
at org.apache.hadoop.mapred.Child.main(Child.java:249)
如果我正确地阅读了此内容,则子进程将失败并显示代码143,因为有人向流作业发送了SIGTERM信号。
我的理解正确吗?如果是这样:EMR基础结构何时会发送SIGTERM?
最佳答案
我知道发生了什么,所以如果有人遇到类似的问题,这里是一些信息。
对我来说,关键是查看“jobtracker”日志。这些位于S3上任务的日志/文件夹中,位于:
<logs folder>/daemons/<id of node running jobtracker>/hadoop-hadoop-jobtracker-XXX.log.
有以下几种类型的行:
2012-08-21 08:07:13,830 INFO org.apache.hadoop.mapred.TaskInProgress
(IPC Server handler 29 on 9001): Error from attempt_201208210612_0001_m_000015_0:
Task attempt_201208210612_0001_m_000015_0 failed to report status
for 601 seconds. Killing!
因此我的代码超时,并且被杀死(超出了10分钟的任务超时)。 10分钟我没有执行任何I/O,这肯定是意料之外的(我通常每20秒执行一次I/O)。
然后,我发现了这篇文章:
http://devblog.factual.com/practical-hadoop-streaming-dealing-with-brittle-code
“在我们的一个科学项目中,我们有一些运行在ruby上的Hadoop Streaming作业,它们依赖libxml来解析文档。这造成了一场糟糕的 Storm –网络中充满了非常糟糕的html,而libxml有时会陷入无限循环或完全段错误。在某些文档中,它始终是段错误。”
它钉了它。我一定遇到了其中一种“libxml进入无限循环”的情况(我大量使用libxml -仅使用Python,而不使用Ruby)。
对我来说,最后一步是触发跳过模式(此处的说明:Setting hadoop parameters with boto?)。
关于python - 亚马逊弹性MapReduce-SIGTERM,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11970646/