Amazon Elastic MapReduce - SIGTERM

sla*_*avi 6 python amazon-emr elastic-map-reduce hadoop-streaming

我有一个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)
Run Code Online (Sandbox Code Playgroud)

如果我正确读取此内容,则子进程因代码143而失败,因为有人向流式作业发送了SIGTERM信号.

我的理解是否正确?如果是这样:EMR基础设施何时发送SIGTERM?

sla*_*avi 10

我弄清楚发生了什么,所以如果其他人遇到类似的问题,这里有一些信息.

我的关键是查看"jobtracker"日志.它们位于S3的任务日志/文件夹中,位于:

<logs folder>/daemons/<id of node running jobtracker>/hadoop-hadoop-jobtracker-XXX.log.
Run Code Online (Sandbox Code Playgroud)

有以下几种线:

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!
Run Code Online (Sandbox Code Playgroud)

所以我的代码超时了,它被杀了(它超过了10分钟的任务超时).10分钟我没有做任何I/O,这当然不是预期的(我通常每20秒做一次I/O).

然后我发现了这篇文章:

http://devblog.factual.com/practical-hadoop-streaming-dealing-with-brittle-code

"在我们的一个科学项目中,我们有一些Hadoop Streaming作业在ruby上运行并依赖libxml来解析文档.这创造了一个完美的风暴 - 网络充满了非常糟糕的HTML和libxml偶尔会进入无限循环或者直截了当.在某些文件中,它总是会出现段错误."

它钉了它.我必须经历其中一个"libxml进入无限循环"的情况(我使用的是libxml - 只使用Python,而不是Ruby).

对我来说,最后一步是触发跳过模式(这里的说明:用boto设置hadoop参数?).