python - Hadoop Streaming 命令失败并出现 Python 错误

标签 python hadoop hadoop-streaming

我是 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 这一事实是否会造成太大的不同,但我试图通过将 mapper.py 和 reducer.py 函数放在我的文件位置周围来改变它们在 Hadoop 工作目录中没有成功。我已经用尽了我所有的研究,仍然无法解决这个问题(即 - 使用 -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 创建

最佳答案

类似于我遇到的错误 --


首先,在: -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()”函数中(相对于在文件的“全局”级别),然后将其包装为:

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://链接),并导航到查看“stderr”消息的方式..(来自实际的核心逻辑)


我确信还有其他更简洁的方法可以完成所有这些,但这在语义上很清楚并且足以满足我的即时需求

祝你好运..

关于python - Hadoop Streaming 命令失败并出现 Python 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15302262/

相关文章:

hadoop - 使用联合身份验证在完整集群中安装apache Hadoop-2.0.0 alpha版本

java - X12 解析使用 hadoop mapreduce

Hadoop - 需要基本 + 流式指导

python - 在 PySpark 中使用 rdd.map 对字符串进行 Unpickling 和编码

hadoop - Hadoop reduce task 停留在0%

scala - 在 spark scala 上使用映射函数转换元组的问题

hadoop - 无法加载hadoop fs

python - 如何在不同版本的python中使用scrapy

python - 将所有数据框列转换为 float 的最快方法 - pandas astype slow

python - 使用斯坦福 NLP for python 进行信息提取和关系提取