python - python中的Hadoop Streaming Job失败错误

标签 python hadoop mapreduce

来自 this guide ,我已成功运行示例练习。但是在运行我的 mapreduce 作业时,我收到以下错误
ERROR streaming.StreamJob: Job not Successful!<br/> 10/12/16 17:13:38 INFO streaming.StreamJob: killJob...<br/> Streaming Job Failed!
来自日志文件的错误

java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 2
at org.apache.hadoop.streaming.PipeMapRed.waitOutputThreads(PipeMapRed.java:311)
at org.apache.hadoop.streaming.PipeMapRed.mapRedFinished(PipeMapRed.java:545)
at org.apache.hadoop.streaming.PipeMapper.close(PipeMapper.java:132)
at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:57)
at org.apache.hadoop.streaming.PipeMapRunner.run(PipeMapRunner.java:36)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:358)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:307)
at org.apache.hadoop.mapred.Child.main(Child.java:170)

映射器.py

import sys

i=0

for line in sys.stdin:
    i+=1
    count={}
    for word in line.strip().split():
        count[word]=count.get(word,0)+1
    for word,weight in count.items():
        print '%s\t%s:%s' % (word,str(i),str(weight))

reducer.py

import sys

keymap={}
o_tweet="2323"
id_list=[]
for line in sys.stdin:
    tweet,tw=line.strip().split()
    #print tweet,o_tweet,tweet_id,id_list
    tweet_id,w=tw.split(':')
    w=int(w)
    if tweet.__eq__(o_tweet):
        for i,wt in id_list:
            print '%s:%s\t%s' % (tweet_id,i,str(w+wt))
        id_list.append((tweet_id,w))
    else:
        id_list=[(tweet_id,w)]
        o_tweet=tweet

[edit] 运行作业的命令:

hadoop@ubuntu:/usr/local/hadoop$ bin/hadoop jar contrib/streaming/hadoop-0.20.0-streaming.jar -file /home/hadoop/mapper.py -mapper /home/hadoop/mapper.py -file /home/hadoop/reducer.py -reducer /home/hadoop/reducer.py -input my-input/* -output my-output

输入是任意随机序列的句子。

谢谢,

最佳答案

您的 -mapper 和 -reducer 应该只是脚本名称。

hadoop@ubuntu:/usr/local/hadoop$ bin/hadoop jar contrib/streaming/hadoop-0.20.0-streaming.jar -file /home/hadoop/mapper.py -mapper mapper.py -file /home/hadoop/reducer.py -reducer reducer.py -input my-input/* -output my-output

当您的脚本位于 hdfs 内另一个文件夹中的作业中时,该作业与执行为“。”的尝试任务相关。 (仅供引用,如果您想要添加另一个文件,例如查找表,您可以在 Python 中打开它,就好像它与您的脚本在同一目录中一样,而您的脚本在 M/R 作业中)

还要确保你有 chmod a+x mapper.py 和 chmod a+x reducer.py

关于python - python中的Hadoop Streaming Job失败错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4460522/

相关文章:

python - 使用 Emacs 保存 Python 文件更改了缩进

sql - 如何在 where 子句中过滤 select 语句中包含 count/distinct/case/when 的列

hadoop - hadoop 必须在 reduce 之前完成映射吗?

algorithm - 在语料库中进行高效搜索

python - 为什么我无法检测到元组为空?

python - 使用 json 中的嵌套数据创建表并将其附加到 databricks

hadoop - Hive 分区不适用于动态变量

hadoop - 在 Oozie 中可以实现这种类型的工作流程吗?

python - 什么决定了 python 的 help() 列出的方法?

hadoop - 比较 Hive 中的文本