我已经意识到,在用python代码运行hadoop时,Map器或reducer(不确定是哪个)在reducer.py打印输出之前对输出进行排序。目前似乎是按字母数字排序的。我想知道是否有一种方法可以完全禁用这个。我想输出的程序的基础上的顺序,它从mapper.py打印出来。我在java中找到了答案,但在python中没有。我是否需要修改mapper.py或命令行参数?
oxcyiej71#
您应该阅读更多关于mapreduce基本概念的内容。尽管在某些情况下排序可能是不必要的,但“shuffle&sort”阶段的洗牌部分是mapreduce模型的固有部分。mapreduce框架(hadoop)需要对Map器的输出进行分组,以便将所有键一起发送到一个reducer,这样reducer就可以实际地“减少”数据。在使用流式传输时,默认情况下,键-值对由制表符值分隔。从您在其他so问题中的示例代码中,我可以看到您并没有提供生成“key,value”元组的功能,而是提供了单个文本行。编辑:添加了以下问题的答案“如何使其按数字排序(例如,10之前的9)?”备选方案1:为密钥预先设置零,以便它们的大小都相同。”09”在“10”之前。备选方案2:使用 KeyFieldBasedComparator ,如本问题所述。
KeyFieldBasedComparator
taor4pac2#
不,正如这里所说:如果reduce任务数不是0,hadoop框架将对结果进行排序。这是没有办法的。
2条答案
按热度按时间oxcyiej71#
您应该阅读更多关于mapreduce基本概念的内容。尽管在某些情况下排序可能是不必要的,但“shuffle&sort”阶段的洗牌部分是mapreduce模型的固有部分。mapreduce框架(hadoop)需要对Map器的输出进行分组,以便将所有键一起发送到一个reducer,这样reducer就可以实际地“减少”数据。在使用流式传输时,默认情况下,键-值对由制表符值分隔。从您在其他so问题中的示例代码中,我可以看到您并没有提供生成“key,value”元组的功能,而是提供了单个文本行。
编辑:添加了以下问题的答案“如何使其按数字排序(例如,10之前的9)?”
备选方案1:为密钥预先设置零,以便它们的大小都相同。”09”在“10”之前。
备选方案2:使用
KeyFieldBasedComparator
,如本问题所述。taor4pac2#
不,正如这里所说:
如果reduce任务数不是0,hadoop框架将对结果进行排序。这是没有办法的。