我已经意识到,当使用 Python 代码运行 Hadoop 时,mapper 或 reducer(不确定是哪个)在reducer.py打印输出之前对我的输出进行排序。目前它似乎是按字母数字排序的。我想知道是否有办法完全禁用它。我希望程序的输出基于从mapper.py打印的顺序。我在 Java 中找到了答案,但在 Python 中没有找到答案。我需要修改mapper.py还是命令行参数?
问问题
1497 次
2 回答
1
您应该阅读更多有关基本 MapReduce 概念的信息。尽管在某些情况下可能不需要排序,但“Shuffle & Sort”阶段的洗牌部分是 MapReduce 模型的固有部分。MapReduce 框架 (Hadoop) 需要对映射器的输出进行分组,以便将所有键一起发送到单个 reducer,这样 reducer 才能真正“减少”数据。使用流式传输时,键值对(默认情况下)由制表符值分隔。从您在其他 SO 问题中的示例代码中,我可以看到您没有提供生成“键、值”元组,而只是提供单个文本行。
编辑:在“如何使其按数字排序(例如,10 之前的 9)?”的问题中添加了以下答案。
备选方案 1:在您的密钥前面加上零,以便它们都具有相同的大小。“09”出现在“10”之前。
备选方案 2:使用KeyFieldBasedComparator
,如此 SO question中所示。
于 2013-10-04T18:48:04.903 回答
1
不,如此处所述:
如果你的reduce任务数不为0,hadoop框架会对你的结果进行排序。没有其他办法了。
于 2016-02-07T01:57:32.030 回答