gpt4 book ai didi

python - Hadoop Streaming Job 在 python 中失败

转载 作者:可可西里 更新时间:2023-11-01 14:18:10 25 4
gpt4 key购买 nike

我有一个用 Python 编写的 mapreduce 作业。该程序在 linux env 中测试成功,但在 Hadoop 下运行时失败。

这是作业命令:

hadoop  jar $HADOOP_HOME/contrib/streaming/hadoop-0.20.1+169.127-streaming.jar \
-input /data/omni/20110115/exp6-10122 -output /home/yan/visitorpy.out \
-mapper SessionMap.py -reducer SessionRed.py -file SessionMap.py \
-file SessionRed.py

Session*.py的mode为755,#!/usr/bin/env python是*.py文件中的第一行。 Mapper.py 是:

#!/usr/bin/env python
import sys
for line in sys.stdin:
val=line.split("\t")
(visidH,visidL,sessionID)=(val[4],val[5],val[108])
print "%s%s\t%s" % (visidH,visidL,sessionID)

日志错误:

java.io.IOException: Broken pipe
at java.io.FileOutputStream.writeBytes(Native Method)
at java.io.FileOutputStream.write(FileOutputStream.java:260)
at java.io.BufferedOutputStream.write(BufferedOutputStream.java:105)
at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:65)
at java.io.BufferedOutputStream.write(BufferedOutputStream.java:109)
at java.io.DataOutputStream.write(DataOutputStream.java:90)
at org.apache.hadoop.streaming.io.TextInputWriter.writeUTF8(TextInputWriter.java:72)
at org.apache.hadoop.streaming.io.TextInputWriter.writeValue(TextInputWriter.java:51)
at org.apache.hadoop.streaming.PipeMapper.map(PipeMapper.java:110)
at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:50)
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)
at org.apache.hadoop.streaming.PipeMapper.map(PipeMapper.java:126)
at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:50)
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)

最佳答案

我遇到了同样的问题并且想知道,因为当我在测试数据上测试我的映射器和缩减器时,它运行了。但是,当我通过 hadoop map-reduce 运行相同的测试集时,我曾经遇到过同样的问题。

如何在本地测试您的代码:

cat <test file> | python mapper.py | sort | python reducer.py

经过更多调查,我发现我的 mapper.py 脚本中没有包含“shebang line”。

#!/usr/bin/python

请将以上行添加为您的 python 脚本的第一行,并在此之后留一个空行。

如果您需要了解更多关于“shebang line”的信息,请阅读Why do people write #!/usr/bin/env python on the first line of a Python script?

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com