2012-03-07 93 views
0

私は基本的なhadoopマスタースレーブクラスターのセットアップを確立し、クラスター上にmapreduceプログラム(Pythonを含む)を実行することができました。PythonでHadoopストリーミングとPythonのサブプロセス

今私はCバイナリにアクセスするPythonコードを実行しようとしていますので、サブプロセスモジュールを使用しています。私は通常のPythonコードのためにハントストリームを使用することができますが、バイナリにアクセスするためにサブプロセスモジュールを含めると、そのジョブは失敗に終わります。

以下のログからわかるように、hello実行可能ファイルはパッケージ化に使用されていると認識されますが、コードを実行することはできません。

。 。 packageJobJar:[を/ tmp /ハロー/ハロー、/アプリ/ Hadoopのを/ tmp/Hadoopの-unjar5030080067721998885 /] [] /tmp/streamjob7446402517274720868.jar TMPDIR = nullを

JarBuilder.addNamedStream hello 
. 
. 
12/03/07 22:31:32 INFO mapred.FileInputFormat: Total input paths to process : 1 
12/03/07 22:31:32 INFO streaming.StreamJob: getLocalDirs(): [/app/hadoop/tmp/mapred/local] 
12/03/07 22:31:32 INFO streaming.StreamJob: Running job: job_201203062329_0057 
12/03/07 22:31:32 INFO streaming.StreamJob: To kill this job, run: 
12/03/07 22:31:32 INFO streaming.StreamJob: /usr/local/hadoop/bin/../bin/hadoop job -Dmapred.job.tracker=master:54311 -kill job_201203062329_0057 
12/03/07 22:31:32 INFO streaming.StreamJob: Tracking URL: http://master:50030/jobdetails.jsp?jobid=job_201203062329_0057 
12/03/07 22:31:33 INFO streaming.StreamJob: map 0% reduce 0% 
12/03/07 22:32:05 INFO streaming.StreamJob: map 100% reduce 100% 
12/03/07 22:32:05 INFO streaming.StreamJob: To kill this job, run: 
12/03/07 22:32:05 INFO streaming.StreamJob: /usr/local/hadoop/bin/../bin/hadoop job -Dmapred.job.tracker=master:54311 -kill job_201203062329_0057 

12/03/07 22:32:05 INFO streaming.StreamJob: Tracking URL: http://master:50030/jobdetails.jsp?jobid=job_201203062329_0057 
12/03/07 22:32:05 ERROR streaming.StreamJob: Job not Successful! 

12/03/07 22:32:05 INFO streaming.StreamJob: killJob... 
Streaming Job Failed! 

私はコマンド試行は:

hadoop jar contrib/streaming/hadoop-*streaming*.jar -mapper /home/hduser/MARS.py -reducer /home/hduser/MARS_red.py -input /user/hduser/mars_inputt -output /user/hduser/mars-output -file /tmp/hello/hello -verbose 

ここで、helloはCの実行可能ファイルです。基本的な機能を確認するために使っているシンプルなhelloworldプログラムです。

私のPythonコードです:

#!/usr/bin/env python 
import subprocess 
subprocess.call(["./hello"]) 

HadoopのストリーミングにはPythonでの実行ファイルを取得したり、これはこの中で、前方に私を取得しますデバッグを支援するためにどのようにしてすべてのヘルプ。

おかげで、

答えて

0

ガネーシュは、マッパーは、インスタンスにコピーされていますか? --aliveフラグを指定した対話型セッションを試してみてください。ブートストラップアクションを使用してファイルをインスタンスにコピーし、次にそれらを実行可能にするためにchmodを使用することができます。

0

これはhelloでの実行権限の問題です。あなたはまた、標準入力を消費する必要があります。

ジョブ出力のトラッカーURLを見ると、失敗したマッパーをクリックして、ジューシーなPythonの例外を含むかもしれない標準エラーが表示されます。

0

-file /home/hduser/MARS.pyをコマンドに追加し、c実行可能ファイルをhdfsにコピーします。

関連する問題