0

シェル スクリプトから次のコマンドを使用して Hadoop ストリーミング サーバーを実行しようとしています。

hadoop jar /usr/local/hadoop/contrib/streaming/hadoop-0.19.2-streaming.jar -input $1 -output Twitter/Net.pegasus -mapper 'mapper.py Reverse' -reducer NONE -file mapper.py
hadoop jar /usr/local/hadoop/contrib/streaming/hadoop-0.19.2-streaming.jar -input $1 -output Twitter/Net.exclude -mapper 'mapper.py Reverse' -reducer reducer.py -file mapper.py -file reducer.py -file ../twitter/exclude.txt
hadoop jar /usr/local/hadoop/contrib/streaming/hadoop-0.19.2-streaming.jar -input $1 -output Twitter/Net.complete -mapper 'mapper.py Reverse' -reducer reducer.py -file mapper.py -file reducer.py

次のエラーが表示されます

/usr/bin/env: python2.5: No such file or directory
java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 127
    at org.apache.hadoop.streaming.PipeMapRed.waitOutputThreads(PipeMapRed.java:362)
    at org.apache.hadoop.streaming.PipeMapRed.mapRedFinished(PipeMapRed.java:576)
    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:436)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:372)
    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:415)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1136)
    at org.apache.hadoop.mapred.Child.main(Child.java:249)

ただし、より高いバージョンの python が既にインストールされています

$ which python
/usr/bin/python
$ python --version
Python 2.7.3

「apt-get install python2.5」によって機能するという他の投稿を読みましたが、そのパッケージは利用できず、 #!/usr/bin/env python を python スクリプトの先頭に追加しようとしましたが、機能しませんでしたまた

Python での Hadoop ストリーミング ジョブの失敗エラー

4

1 に答える 1

0
$ which python
/usr/bin/python
$ python --version
Python 2.7.3

デフォルトよりも高いバージョンの Python がインストールされていることを示します。これがクラスター内のすべてのノードで同じケースであることを確認する必要があります。たとえば、クラスター Redhat 6.4 バージョンのクラスターで作業しており、デフォルトの Python は Python 2.6 だと思いますが、マスター ノードを少しカスタマイズしており、データ ノードとは異なります。そのため、すべてのノードに存在する python を呼び出すようにマッパーを構成する必要があります。

置く

#!/usr/bin/python

pythonスクリプトの冒頭で常に機能します。

于 2013-10-12T15:19:09.377 に答える