2017-05-17 75 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盒子上,並具有整個數據集。然而,預測與單節點設置很好地協作,因爲它具有訓練中使用的所有數據。但是,當使用多節點集羣時,數據集會被拆分,使得每個節點的最大值不同。這是造成錯誤。

我現在已經做出了獨立於數據集的預期形狀,並且此錯誤不再發生。我希望這能澄清事情。