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参数?).
| 归档时间: |
|
| 查看次数: |
3332 次 |
| 最近记录: |