2013-03-08 130 views
3

我是Ubuntu,Hadoop和DFS的新手,但我设法在本地ubuntu机器上安装单节点hadoop实例,遵循Michael-Noll.com上发布的指示:Hadoop Streaming Command Failure with Python错误

http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-single-node-cluster/#copy-local-example-data-to-hdfs

http://www.michael-noll.com/tutorials/writing-an-hadoop-mapreduce-program-in-python/

目前我卡上运行的基本字数Hadoop的例子。我不知道我从下载目录中运行Hadoop的事实是否有很大的不同,但我试图通过放置它们来绕过我的文件位置来寻找mapper.py和reducer.py函数在Hadooop工作目录中没有成功。我已经用尽了所有的研究,仍然无法解决这个问题(即使用文件参数等)。我真的很感谢任何帮助提前,我希望我以一种可以帮助其他刚刚开始的人的方式构建这个问题与Python + Hadoop。

我独立测试了mapper.py和reduce.py,并且在从bash shell提示玩具文本数据时都正常工作。从我的Bash shell

输出:

[email protected]:/home/chris/Downloads/hadoop$ bin/hadoop jar /home/chris/Downloads/hadoop/contrib/streaming/hadoop-streaming-1.0.4.jar -file mapper.py -file reducer.py -mapper mapper.py -reducer reducer.py -input /user/hduser/gutenberg/* -output /user/hduser/gutenberg-output3 
Warning: $HADOOP_HOME is deprecated. 

packageJobJar: [mapper.py, reducer.py, /app/hadoop/tmp/hadoop-unjar4681300115516015516/] [] /tmp/streamjob2215860242221125845.jar tmpDir=null 
13/03/08 14:43:46 INFO util.NativeCodeLoader: Loaded the native-hadoop library 
13/03/08 14:43:46 WARN snappy.LoadSnappy: Snappy native library not loaded 
13/03/08 14:43:46 INFO mapred.FileInputFormat: Total input paths to process : 3 
13/03/08 14:43:47 INFO streaming.StreamJob: getLocalDirs(): [/app/hadoop/tmp/mapred/local] 
13/03/08 14:43:47 INFO streaming.StreamJob: Running job: job_201303081155_0032 
13/03/08 14:43:47 INFO streaming.StreamJob: To kill this job, run: 
13/03/08 14:43:47 INFO streaming.StreamJob: /home/chris/Downloads/hadoop/libexec/../bin/hadoop job -Dmapred.job.tracker=localhost:54311 -kill job_201303081155_0032 
13/03/08 14:43:47 INFO streaming.StreamJob: Tracking URL: http://localhost:50030/jobdetails.jsp?jobid=job_201303081155_0032 
13/03/08 14:43:48 INFO streaming.StreamJob: map 0% reduce 0% 
13/03/08 14:44:12 INFO streaming.StreamJob: map 100% reduce 100% 
13/03/08 14:44:12 INFO streaming.StreamJob: To kill this job, run: 
13/03/08 14:44:12 INFO streaming.StreamJob: /home/chris/Downloads/hadoop/libexec/../bin/hadoop job -Dmapred.job.tracker=localhost:54311 -kill job_201303081155_0032 
13/03/08 14:44:12 INFO streaming.StreamJob: Tracking URL: http://localhost:50030/jobdetails.jsp?jobid=job_201303081155_0032 
13/03/08 14:44:12 ERROR streaming.StreamJob: Job not successful. Error: JobCleanup Task Failure, Task: task_201303081155_0032_m_000003 
13/03/08 14:44:12 INFO streaming.StreamJob: killJob... 
Streaming Command Failed! 

我HDFS位于/应用/ Hadoop的/ tmp目录它,我相信,也一样对我的Hadoop实例我/用户/ hduser目录。

输入数据位于/用户/ hduser /古滕贝格/ *(3 UTF纯文本文件) 输出被设定在/用户/ hduser /古滕贝格输出

回答

1

要创建看一看日志在以下路径中(基于上面提供的信息):

$HADOOP_HOME$/logs/userlogs/job_201303081155_0032/task_201303081155_0032_m_000003 

这应该为您提供有关该特定任务的一些信息。

用的Hadoop提供的日志都还不错,只是需要一些四处寻找信息:)

1

simliar错误,我越来越 -


一是: - file mapper.py -file reducer.py -mapper mapper.py -reducer reducer.py

您可以在'-file'上使用本地系统完全限定路径,然后在'-mapper'上使用相对路径,例如。 :-file /aFully/qualified/localSystemPathTo/yourMapper.py -mapper yourMapper.py


则:记得要包括在文件 'reducer.py' 和 'mapper.py'


顶部的 “#在/ usr/bin中/蟒蛇!”最后,

在我的mapper.py和reducer.py中,我把所有的输入放在'setup_call()'函数内(vs.在文件的“全球性”的水平),然后包裹与:

if __name__== '__main__': 

    try: 
     setup_call_andCloseOut() 
    except: 
     import sys, traceback, StringIO 

     fakeeWriteable = StringIO.StringIO() 

     traceback.print_exc(None, file=fakeeWriteable) 
     msg = "" 
     msg +="------------------------------------------------------\n" 
     msg +="----theTraceback: -----------\n" 
     msg += fakeeWriteable.getvalue() + "\n" 
     msg +="------------------------------------------------------\n" 

     sys.stderr.write(msg) 

    #end 

在这一点上,我能够使用Hadoop的网络作业日志(这些HTTP:在你的错误信息//链接),和浏览我的方式看到“标准错误”的消息。(从实际的核心逻辑)


我敢肯定还有其他更简洁的方式来做到这一切,但这两种语义明确的和足够的我的直接需求

祝你好运..

0

对不起,迟到的回应。

你应该确保你的文件(mapper和reducer)可以由hadoop用户执行并且在第一行包含Shebang

这将解决您的问题。