python - Hadoop 流在 map/reduce 操作中崩溃

标签 python hadoop hadoop-streaming

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

import sys

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

这是 reducer :

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 之后,将输入文件移动到 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 开始执行映射器 python 文件时,它要求操作系统执行文件,并且没有 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

关于python - Hadoop 流在 map/reduce 操作中崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10871120/

相关文章:

python - 当使用 Gimp 手动预处理图像时,使用 Tesseract-OCR 的图像到文本识别比我的 Python 代码更好

hadoop - hadoop输入数据问题

hadoop - 在运行Hadoop示例时不是有效的jar

python嵌套for循环迭代

python - 所有对象都是按值返回而不是按引用返回吗?

python - python中的高精度系统时间

hadoop-streaming - 在hadoop流中将多个路径传递给cmdenv

hadoop大数据集

java - 为什么作业链在 MapReduce 中不起作用?

hadoop - hbase 找不到现有表