1

基本的な Hadoop マスター スレーブ クラスターのセットアップを確立し、クラスターで mapreduce プログラム (Python を含む) を実行できるようになりました。

現在、C バイナリにアクセスする python コードを実行しようとしているため、subprocess モジュールを使用しています。通常の Python コードに Hadoop ストリーミングを使用できますが、サブプロセス モジュールを含めてバイナリにアクセスすると、ジョブが失敗します。

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

. . packageJobJar: [ /tmp/hello/hello , /app/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 を使用して実行可能ファイルを実行する方法や、これをデバッグする方法についてのヘルプは、私を前進させてくれます。

ありがとう、

ガネーシャ

4

3 に答える 3

0

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

于 2014-08-25T16:17:01.360 に答える
0

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

于 2012-11-18T16:35:31.233 に答える
0

hello の実行権限の問題である可能性があります。stdin も使用する必要があります。

ジョブの出力からトラッカーの URL を確認すると、失敗したマッパーをクリックして stderr を確認できます。これには、ジューシーな python 例外が含まれている可能性があります。

于 2014-02-13T12:43:28.583 に答える