2017-05-17 76 views
5

我已经在AWS datapipeline中设置了emr步骤。 step命令是这样的:使用Mxnet在AWS中失败的Hadoop流作业Emr

/usr/lib/hadoop-mapreduce/hadoop-streaming.jar,-input,s3n://input-bucket/input-file,-output,s3://output/output-dir,-mapper,/bin/cat,-reducer,reducer.py,-file,/scripts/reducer.py,-file,/params/parameters.bin 

我收到以下错误

Error: java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 1 
    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.PipeReducer.close(PipeReducer.java:134) 
    at org.apache.hadoop.io.IOUtils.cleanup(IOUtils.java:244) 
    at org.apache.hadoop.mapred.ReduceTask.runOldReducer(ReduceTask.java:467) 
    at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:393) 
    at org.apache.hadoop.mapred.YarnChild$2.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) 
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158) 

Container killed by the ApplicationMaster. 
Container killed on request. Exit code is 143 
Container exited with a non-zero exit code 143 

Error: java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 1 
    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.PipeReducer.close(PipeReducer.java:134) 
    at org.apache.hadoop.io.IOUtils.cleanup(IOUtils.java:244) 
    at org.apache.hadoop.mapred.ReduceTask.runOldReducer(ReduceTask.java:467) 
    at org.apache.hadoop.mapred.ReduceTask.run(ReduceTask.java:393) 
    at org.apache.hadoop.mapred.YarnChild$2.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) 
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158) 

Container killed by the ApplicationMaster. 
Container killed on request. Exit code is 143 
Container exited with a non-zero exit code 143 

我已经尽了桌面 (在单节点的Hadoop设置),其工作在独立运行减速的一步。我已经将#!/usr/bin/env python包含在reducer脚本中。 我怀疑我没有正确编写EMR步骤。

EMR version: 5.5.0 

编辑: 经过进一步调查,我发现的代码的确切行,其中减速代码在EMR失败。 我正在使用reducer中的mxnet库进行机器学习预测。当我加载模型参数时,减速器失败。参照API文档是here

module.load_params('parameters.bin') 

我已经检查[使用os.listdir(os.getcwd())]的EMR节点的当前工作目录和它包含的文件parameters.bin(I甚至已打印该文件的内容已成功)。 我想再次指出,流式作业在单节点本地设置上正常工作。

EDIT2:我设置的减速任务数为2。我封闭我减速的代码在一个try-except块,我看到下面的错误中的任务之一(另外一个运行良好)

[10:27:25] src/ndarray/ndarray.cc:299: Check failed: from.shape() == to->shape() operands shape mismatchfrom.shape = (119,) to.shape=(111,) 

Stack trace returned 10 entries:  
[bt] (0) /usr/local/lib/python2.7/site-packages/mxnet/libmxnet.so(+0xc72fc) [0x7f81443842fc]  
[bt] (1) /usr/local/lib/python2.7/site-packages/mxnet/libmxnet.so(+0xc166f4) [0x7f8144ed36f4] 
[bt] (2) /usr/local/lib/python2.7/site-packages/mxnet/libmxnet.so(+0xc74c24) [0x7f8144f31c24] 
[bt] (3) /usr/local/lib/python2.7/site-packages/mxnet/libmxnet.so(MXImperativeInvoke+0x2cd) [0x7f8144db935d]  
[bt] (4) /usr/lib64/libffi.so.6(ffi_call_unix64+0x4c) [0x7f8150b8acec] 
[bt] (5) /usr/lib64/libffi.so.6(ffi_call+0x1f5) [0x7f8150b8a615]  
[bt] (6) /usr/lib64/python2.7/lib-dynload/_ctypes.so(_ctypes_callproc+0x30b) [0x7f8150d9d97b] 
[bt] (7) /usr/lib64/python2.7/lib-dynload/_ctypes.so(+0xa915) [0x7f8150d97915] 
[bt] (8) /usr/lib64/libpython2.7.so.1.0(PyObject_Call+0x43) [0x7f815a69e183]  
[bt] (9) /usr/lib64/libpython2.7.so.1.0(PyEval_EvalFrameEx+0x337d) [0x7f815a73107d] 
+0

请更新与您的代码的问题,因为退出代码1可能是由于您的错误代码。 –

+0

@RameshMaharjan正如我已经指出的,我已经尝试在桌面上运行单个节点集群的代码,它工作正常。 – ishan3243

+0

是否可以: *提供已安装的MXNet版本; *提供'parameters.bin'文件; 看起来在某些时候,MXNet期望张量与实际得到的不同形状。 –

回答

1

我想出了这个问题。实际上,mxnet期望的形状取决于数据集(它实际上取决于数据集中的最大值)。训练发生在一个gpu盒子上,并具有整个数据集。然而,预测与单节点设置很好地协作,因为它具有训练中使用的所有数据。但是,当使用多节点集群时,数据集会被拆分,使得每个节点的最大值不同。这是造成错误。

我现在已经做出了独立于数据集的预期形状,并且此错误不再发生。我希望这能澄清事情。