hadoop流命令失败,出现python错误

nafvub8i  于 2021-06-03  发布在  Hadoop
关注(0)|答案(3)|浏览(335)

我是ubuntu、hadoop和dfs的新手,但我已经按照michael-noll.com上的说明在本地ubuntu机器上安装了一个单节点hadoop示例:
http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-single-node-cluster/#copy-本地示例数据到hdfs
http://www.michael-noll.com/tutorials/writing-an-hadoop-mapreduce-program-in-python/
我目前正忙于在hadoop上运行基本的单词计数示例。我不确定我在下载目录下运行hadoop是否有太大的不同,但是我试着把mapper.py和reducer.py函数放在hadoop工作目录下,在我的文件位置来回搜索,但没有成功。我已经用尽了我所有的研究,仍然无法解决这个问题(即-使用-文件参数等)。我真的很感谢任何帮助,我希望我的框架这个问题可以帮助其他人谁是刚刚开始与python+hadoop。
我独立地测试了mapper.py和reduce.py,当用bashshell中的玩具文本数据提示时,这两个工具都可以正常工作。
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输出处创建

yzuktlbb

yzuktlbb1#

抱歉React太晚了。
您应该确保您的文件(mapper和reducer)可由hadoop用户执行,并且在第一行中包含shebang。
那会解决你的问题。

uqdfh47h

uqdfh47h2#

我犯的错误也很简单--
首先,在:-file mapper.py-file reducer.py-mapper mapper.py-reducer.py中
您可以在'-file'上使用本地系统完全限定路径,然后在'-mapper'上使用相对路径,例如:-file/afully/qualified/localsystempathto/yourmapper.py-mapper yourmapper.py
然后:记住要包括“#”/usr/bin/python“位于文件‘reducer.py’和‘mapper.py’的顶部”
最后,
在mapper.py和reducer.py中,我将所有导入都放在一个“setup\u call()”函数中(而不是在文件的“global”级别),然后用以下代码 Package :

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

那时,我可以使用hadoopwebjob日志(错误消息中的http://链接),导航到“stderr”消息从实际的核心逻辑)
我相信还有其他更简洁的方法可以做到这一切,但这在语义上是明确的,并且足以满足我的迫切需要
祝你好运。。

v6ylcynt

v6ylcynt3#

查看以下路径中的日志(基于上面提供的信息):

$HADOOP_HOME$/logs/userlogs/job_201303081155_0032/task_201303081155_0032_m_000003

这将为您提供有关该特定任务的一些信息。
hadoop提供的日志非常好,只需要四处挖掘就可以找到信息:)

相关问题