我是Ubuntu,Hadoop和DFS的新手,但我已经设法在我的本地ubuntu机器上按照Michael-Noll.com上发布的指示安装了单节点hadoop实例:
http://www.michael-noll.com/tutorials/writing-an-hadoop-mapreduce-program-in-python/
我目前停留在Hadoop上运行基本字数计算示例。我不确定我是否已经从我的下载目录中运行Hadoop这一事实带来了太大的不同,但是我试图通过放置它们来调整mapper.py和reducer.py函数的文件位置。在Hadooop工作目录中没有成功。我已经用尽了所有的研究,仍然无法解决这个问题(即使用-file参数等)。我非常感谢提前任何帮助,我希望我能以一种可以帮助刚刚开始的其他人的方式构建这个问题使用Python + Hadoop。
我独立测试了mapper.py和reduce.py,当从bash shell提示玩具文本数据时,两者都正常工作。
我的Bash Shell输出:
hduser@chris-linux:/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位于/ app / hadoop / tmp,我相信它也与我的hadoop实例上的/ user / hduser目录相同。
输入数据位于/ user / hduser / gutenberg / *(3个UTF纯文本文件) 输出设置为在/ user / hduser / gutenberg-output
创建答案 0 :(得分:2)
对我遇到的错误相同 -
首先,在: -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 / python”
最后,
在我的mapper.py和reducer.py中,我将所有导入放在'setup_call()'函数中(相对于文件的'global'级别),然后用以下内容包装:
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 web作业日志(你的错误消息中的那些http://链接),并导航我看到'stderr'消息..(来自实际的核心逻辑)
我确信还有其他更简洁的方法可以做到这一切,但这在语义上是明确的,足以满足我的迫切需要
祝你好运..答案 1 :(得分:1)
查看以下路径中的日志(基于上面提供的信息):
$HADOOP_HOME$/logs/userlogs/job_201303081155_0032/task_201303081155_0032_m_000003
这应该为您提供有关该特定任务的一些信息。
Hadoop提供的日志非常好,只需要花一些时间来查找信息:)
答案 2 :(得分:0)