2012-03-07 141 views
0

我已經建立了一個基本的hadoop主從式集羣設置並能夠在集羣上運行mapreduce程序(包括python)。使用Python和Python子流程進行Hadoop流式傳輸

現在我想運行一個訪問C二進制文件的Python代碼,所以我使用了子進程模塊。我能夠使用hadoop streaming來獲得正常的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 

其中你好是C可執行文件。這是一個簡單的helloworld程序,我正在使用它來檢查基本功能。

我的Python代碼是:

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

着如何與Python獲得可執行的運行Hadoop中的流或與調試,這將讓我前進幫助,在此任何幫助。

感謝,

Ganesh神

回答

0

是映射器被複制到實例?嘗試與--alive標誌進行交互式會話以測試此操作。您可以使用引導操作將文件複製到實例,然後使用chmod使它們變爲可執行的。

0

這可能是一個執行權限問題,你好。你還需要使用stdin。

如果您從作業輸出中查看跟蹤鏈接,您可以單擊失敗的映射器並查看可能包含一些多汁python異常的stderr。

0

將-file /home/hduser/MARS.py添加到您的命令中,並將c可執行文件複製到hdfs。