我意识到,当使用 Python 代码运行 Hadoop 时,映射器或化简器(不确定是哪一个)会在 reducer.py 打印输出之前对我的输出进行排序。目前它似乎是按字母数字排序的。我想知道是否有办法完全禁用此功能。我希望程序的输出基于从 mapper.py 打印的顺序。我在 Java 中找到了答案,但没有在 Python 中找到答案。我需要修改 mapper.py 或者命令行参数吗?
最佳答案
您应该阅读更多有关基本 MapReduce 概念的内容。尽管在某些情况下排序可能是不必要的,但“Shuffle & Sort”阶段的洗牌部分是 MapReduce 模型的固有部分。 MapReduce框架(Hadoop)需要对映射器的输出进行分组,以便将所有键一起发送到一个reducer,以便reducer能够真正“减少”数据。使用流式传输时,默认情况下,键值对由制表符值分隔。从其他 SO 问题中的示例代码中,我可以看到您没有提供生成“键,值”元组,而只是提供单个文本行。
编辑:添加了以下问题的答案“如何使其按数字排序(例如,9 在 10 之前)?”
替代方案 1:在键前面添加零,以便它们都具有相同的大小。 “09”位于“10”之前。
替代方案 2:使用 KeyFieldBasedComparator
,如 this SO question 中所示.
关于python - Hadoop 和 Python : Disable Sorting,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19188263/