当我通过命令行使用map.py和reduce.py时,我正在使用python开发mapreduce程序:
cat passengers.dat | python map.py | sort | python reduce.py
结果是好的。但如果我尝试使用mapreduce:
hadoop jar /usr/lib/hadoop-mapreduce/hadoop-streaming-2.2.0.2.0.10.0-1.jar -input passengers.dat -output /out -file map.py -file reduce.py -mapper map.py -reducer reduce.py
结果是错误的,因为它似乎没有在减少之前进行排序。
我得出这个结论是因为通过命令行:
cat passengers.dat | python map.py | sort
结果是:
141181 2014 5 1 0 STA 267
141181 2014 5 1 1 END 1031
141181 2014 5 1 4 STA 1031
141181 2014 5 1 5 END 267
但是当我重写我的reduce来写"reduce"接收的行,以了解问题是什么:
#!/usr/bin/env python
import sys
for line in sys.stdin:
print line
结果未排序:
141181 2014 5 1 1 END 1031
141181 2014 5 1 0 STA 267
141181 2014 5 1 5 END 267
141181 2014 5 1 4 STA 1031
第五纵队乱了!!!为什么?
谢谢
我在下面发布我的解决方案!!
我解决了这个问题,问题是mapreduce使用键值,并且键太多,所以我实现的解决方案是重写mapper以返回:
return 'value1#value2#value3#value4#value5#value6 t value7'
通过这种方式,mapreduce完美地排序键,我可以在reducer上进行拆分。
我希望它将是有用的