MapReduce is not sorting



当我通过命令行使用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上进行拆分。

我希望它将是有用的

最新更新