2013-03-12 43 views
5

我试图按照此页面上的说明: http://www.michael-noll.com/tutorials/writing-an-hadoop-mapreduce-program-in-python/运行Python代码Hadoop的失败

$bin/hadoop jar contrib/streaming/hadoop-streaming-1.0.4.jar -input /user/root/wordcountpythontxt -output /user/root/wordcountpythontxt-output -mapper /user/root/wordcountpython/mapper.py -reducer /user/root/wordcountpython/reducer.py -file /user/root/mapper.py -file /user/root/reducer.py 

它说

File: /user/root/mapper.py does not exist, or is not readable. 
Streaming Command Fail 

当我通过URL浏览:jobdetails.jsp/

我发现很多异常

java.lang.RuntimeException: Error in configuring object 
    at org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:93) 
    at org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:64) 
    at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:117) 
    at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:432) 
    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:396) 
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1121) 
    at org.apache.hadoop.mapred.Child.main(Child.java:249) 
Caused by: java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:88) 
    ... 9 more 
Caused by: java.lang.RuntimeException: Error in configuring object 
    at org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:93) 
    at org.apache.hadoop.util.ReflectionUtils.setConf(ReflectionUtils.java:64) 
    at org.apache.hadoop.util.ReflectionUtils.newInstance(ReflectionUtils.java:117) 
    at org.apache.hadoop.mapred.MapRunner.configure(MapRunner.java:34) 
    ... 14 more 
Caused by: java.lang.reflect.InvocationTargetException 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.apache.hadoop.util.ReflectionUtils.setJobConf(ReflectionUtils.java:88) 
    ... 17 more 
Caused by: java.lang.RuntimeException: configuration exception 
    at org.apache.hadoop.streaming.PipeMapRed.configure(PipeMapRed.java:230) 
    at org.apache.hadoop.streaming.PipeMapper.configure(PipeMapper.java:66) 
    ... 22 more 
Caused by: java.io.IOException: Cannot run program "/user/root/wordcountpython/mapper.py": error=2, No such file or directory 
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:460) 
    at org.apache.hadoop.streaming.PipeMapRed.configure(PipeMapRed.java:214) 
    ... 23 more 
Caused by: java.io.IOException: error=2, No such file or directory 
    at java.lang.UNIXProcess.forkAndExec(Native Method) 
    at java.lang.UNIXProcess.<init>(UNIXProcess.java:53) 
    at java.lang.ProcessImpl.start(ProcessImpl.java:91) 
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:453) 
    ... 24 more 

我不能修复它请帮我运行python pgm。

回答

3

如果你仔细检查了link的指示,

[email protected]:/usr/local/hadoop$ bin/hadoop jar contrib/streaming/hadoop-*streaming*.jar -file /home/hduser/mapper.py -mapper /home/hduser/mapper.py -file /home/hduser/reducer.py -reducer /home/hduser/reducer.py -input /user/hduser/gutenberg/* -output /user/hduser/gutenberg-output 

有它清楚地表明没有必要复制mapper.py和reducer.py到HDFS,你可以将文件从两个链接本地文件系统:as/path/to/mapper。我相信你可以避免上述错误。

+1

是的,我连接然后从我的本地fs – 2013-03-21 03:52:34

+0

不被接受?有没有理由恢复? – 2013-04-04 06:12:33

+0

@studhadoop如果解决方案解决了您的问题,您可以接受答案。谢谢 – 2013-09-08 13:44:50

1

看来问题是符合的。

Caused by: java.io.IOException: Cannot run program "/user/root/wordcountpython/mapper.py": error=2, No such file or directory 

请您检查文件/user/root/wordcountpython/mapper.py是否存在。如果它存在,那么该文件的权限是什么。

您正在运行的用户hadoop有权限执行和读取此文件?

+0

是我从我的本地文件sys.but链接它再次无法正常工作。 – 2013-04-04 04:09:42

3

您可能想要检查您的#后没有dos样式的新行!在mapper.py中行。如果你这样做,hadoop可能无法找到你的python解释器,因为它会看到一个额外的CR。例如。/usr/local/bin/python^M而不是/ usr/local/bin/python其中^ M是CR。在你的mapper和reducer上尝试dos2unix命令。

+0

我该怎么做mapper和reducer – 2013-03-21 04:00:11

+0

dos2unix mapper.py – 2013-03-22 11:31:07

+0

......对不起......只要运行'dos2unix mapper.py',假设你已经安装了dos2unix。然后对于reducer.py也是如此。你可以grep的DOS新行确认它在那里之前,并在之后:[http://stackoverflow.com/questions/73833/how-do-you-search-for-files-containing-dos-line-endings- CRLF与 - grep的-下-1]。另外,如果这是您的问题,那么您可以考虑更改编辑器保存文件的方式。例如。如果您使用Eclipse,则默认值为dos样式的新行 – 2013-03-22 11:38:46