Hadoop的流命令失败与Python错误(Hadoop Streaming Command Fai

2019-07-21 05:53发布

我是一个新人到Ubuntu,Hadoop和DFS,但我已经成功地张贴在这里Michael-Noll.com中的说明我的本地Ubuntu的机器上安装一个单节点的Hadoop实例:

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我的下载目录的事实使得太多的差别,但是我已经把他们atempted到tweek周围的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位于/应用/ Hadoop的/ tmp目录它,我相信,也一样对我的Hadoop实例我/用户/ hduser目录。

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

Answer 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()”中的功能(与在文件的“全球性”的水平),然后包裹与:

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:在你的错误信息//链接),然后导航我的方式看到“标准错误”的消息。(从实际的核心逻辑)


我敢肯定还有其他更简洁的方式来做到这一切,但这是语义都为我的眼前需要明确和充分的

祝好运..



Answer 2:

具有以下路径来看看日志(基于上面提供的信息):

$HADOOP_HOME$/logs/userlogs/job_201303081155_0032/task_201303081155_0032_m_000003

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

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



Answer 3:

回复晚了非常抱歉。

您应该确保您的文件(映射器和减速机)是由Hadoop的用户可执行文件,其中包含家当在第一线。

这将解决您的问题。



文章来源: Hadoop Streaming Command Failure with Python Error