繁体   English   中英

Hadoop流在map / reduce操作中崩溃

[英]Hadoop streaming crashes in the middle of map/reduce operation

我在单个节点上使用hadoop 1.0.1,我正在尝试使用python 2.7流式传输制表符分隔文件。 我可以使用hadoop / python来运行Michael Noll的字数脚本,但是不能让这个非常简单的mapper和reducer工作,只是重复文件。 这是映射器:

import sys

for line in sys.stdin:
    line = line.strip()
    print '%s' % line

这是减速器:

import sys

for line in sys.stdin:
    line = line.strip()
    print line

这是输入文件的一部分:

1   857774.000000
2   859164.000000
3   859350.000000
...

mapper和reducer在linux中运行良好:

cat input.txt | python mapper.py | sort | python reducer.py > a.out

但是在我chmod mapper和reducer之后,将输入文件移动到hdfs并检查它是否存在并运行:

bin/hadoop jar contrib/streaming/hadoop-*streaming*.jar -file mapperSimple.py -mapper mapperSimple.py -file reducerSimple.py -reducer reducerSimple.py -input inputDir/* -output outputDir

我收到以下错误:

12/06/03 10:19:11 INFO streaming.StreamJob:  map 0%  reduce 0%
12/06/03 10:20:15 ERROR streaming.StreamJob: Job not successful. Error: # of failed Map Tasks exceeded allowed limit. FailedCount: 1. LastFailedTask: task_201206030550_0003_m_000001
12/06/03 10:20:15 INFO streaming.StreamJob: killJob...
Streaming Job Failed!

有任何想法吗? 谢谢。

你的python文件有shebang / hashbang标头吗? 我想你的问题是当Java来执行mapper python文件时,它要求os执行该文件,并且没有shebang / hashbang表示法,它不知道如何执行该文件。 我还要确保您的文件标有可执行权限( chmod a+x mapperSimple.py ):

#!/usr/bin/python
import sys

for line in sys.stdin:
    line = line.strip()
    print '%s' % line

从命令行尝试这一点,以确保shell知道使用python解释器执行文件:

cat input.txt | ./mapper.py | sort | ./reducer.py > a.out

除了克里斯怀特答案,shebang标题应该是:

#!/usr/bin/env python

默认情况下将使用python2.7。 如果你想使用python3,你可以使用:

#!/usr/bin/env python3

并且不要使用:

#!/usr/bin/python

因为它会在大多数计算机上失败..包括我的****叹气****

请查看此答案以获取更多信息

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM