2012-03-07 139 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。