2017-03-27 26 views
1

私はmapreduceで非常に単純なタスクを実行しようとしています。hadoop、python、サブプロセスがコード127で失敗しました

mapper.py:

#!/usr/bin/env python 
import sys 
for line in sys.stdin: 
    print line 

私のtxtファイル:ジョブを実行する

qwerty 
asdfgh 
zxc 

コマンドライン:

hadoop jar /usr/lib/hadoop-0.20-mapreduce/contrib/streaming/hadoop-streaming-2.6.0-mr1-cdh5.8.0.jar \ 
-input /user/cloudera/In/test.txt \ 
-output /user/cloudera/test \ 
-mapper /home/cloudera/Documents/map.py \ 
-file /home/cloudera/Documents/map.py 

エラー:

INFO mapreduce.Job: Task Id : attempt_1490617885665_0008_m_000001_0, Status : FAILED 
Error: java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 127 
    at org.apache.hadoop.streaming.PipeMapRed.waitOutputThreads(PipeMapRed.java:325) 
    at org.apache.hadoop.streaming.PipeMapRed.mapRedFinished(PipeMapRed.java:538) 
    at org.apache.hadoop.streaming.PipeMapper.close(PipeMapper.java:130) 
    at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:61) 
    at org.apache.hadoop.streaming.PipeMapRunner.run(PipeMapRunner.java:34) 
    at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:453) 
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:343) 
    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:415) 
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1693) 
    at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:158) 

これを修正してコードを実行するには?私はcat /home/cloudera/Documents/test.txt | python /home/cloudera/Documents/map.pyを使用する場合 はそれが

正常に動作します!!!!!私*の.pyファイルを間違って

何かを更新します。私はgithub 'tom white hadoop book'からファイルをコピーして、すべてうまくいっています。

しかし、私は理由を理解できません。パーミッションと文字セット(私が間違っていない場合)ではありません。それ以外に何ができますか?

答えて

0

-mapper引数では、クラスタノードで実行するコマンドを設定する必要があります。ですから、/home/cloudera/Documents/map.pyファイルはありません。 ./map.py

一切の権限の使用が実行されているので、もし私が、権限がこのファイルに設定されているものを覚えていません:あなたは、単にこのような方法でそれを使用することができますので、あなたが-filesオプションで渡すが、作業ディレクトリに配置されていることを ファイルpython map.py

ので、完全なコマンドが

hadoop jar /usr/lib/hadoop-0.20-mapreduce/contrib/streaming/hadoop-streaming-2.6.0-mr1-cdh5.8.0.jar \ 
-input /user/cloudera/In/test.txt \ 
-output /user/cloudera/test \ 
-mapper "python map.py" \ 
-file /home/cloudera/Documents/map.py 
であるとして、それ
関連する問題