我在 EMR 集群主节点上的 python 作业 I 运行 失败,我该如何排除故障?

My python job I run on the master of EMR cluster fails, how do I troubleshoot?

我通过 ssh 连接到主机,运行 我在控制台上的 hadoop 作业用于开发目的。我的工作以一种神秘的方式失败了,许多 java 堆栈跟踪对我来说毫无意义,见下文:

java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 143
at org.apache.hadoop.streaming.PipeMapRed.waitOutputThreads(PipeMapRed.java:322)
at org.apache.hadoop.streaming.PipeMapRed.mapRedFinished(PipeMapRed.java:535)
at org.apache.hadoop.streaming.PipeMapper.map(PipeMapper.java:120)
at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:54)
at org.apache.hadoop.streaming.PipeMapRunner.run(PipeMapRunner.java:34)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:455)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:344)
at org.apache.hadoop.mapred.YarnChild.run(YarnChild.java:164)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1698)

查看日志以查找 python 代码中的错误。对于 EMR/yarn,您可以从 WEB UI 或集群主机 shell 上找到您的日志,如下所示(您的应用程序 ID 将与作业开始时打印的不同)。有很多输出,将其重定向到我显示的文件中并搜索 python 堆栈跟踪以查看您的应用程序出了什么问题。所有这些堆栈跟踪通常表明至少一个 reduce 进程失败,但进程的 stderr 未显示在 CLI/shell 输出中。

$ yarn logs -applicationId application_1503951120983_0031 > /tmp/log