【问题标题】:Hadoop and Python: Disable SortingHadoop 和 Python:禁用排序
【发布时间】:2013-10-04 18:26:21
【问题描述】:

我已经意识到,当使用 Python 代码运行 Hadoop 时,映射器或化简器(不确定是哪个)在 reducer.py 打印输出之前对我的输出进行排序。目前它似乎是按字母数字排序的。我想知道是否有办法完全禁用它。我希望程序的输出基于 ma​​pper.py 的打印顺序。我在 Java 中找到了答案,但在 Python 中没有找到答案。我需要修改 ma​​pper.py 还是命令行参数?

【问题讨论】:

  • 如果您需要与 mapper 打印的输出方式相同的输出,那么为什么需要 reducer?

标签: python sorting hadoop mapreduce cluster-computing


【解决方案1】:

您应该阅读更多有关基本 MapReduce 概念的信息。尽管在某些情况下可能不需要排序,但“Shuffle & Sort”阶段的洗牌部分是 MapReduce 模型的固有部分。 MapReduce 框架(Hadoop)需要对映射器的输出进行分组,以便将所有键一起发送到一个单一的减速器,这样减速器就可以真正“减少”数据。使用流式传输时,键值对(默认情况下)由制表符值分隔。从您在其他 SO 问题中的示例代码中,我可以看到您没有提供生成“键、值”元组,而只是提供单个文本行。

编辑:在“如何使其按数字排序(例如,9 在 10 之前)?”的问题中添加了以下答案

备选方案 1:在您的密钥前添加零,以便它们都具有相同的大小。 “09”在“10”之前。

备选方案 2:使用KeyFieldBasedComparator,如this SO question 中所示。

【讨论】:

  • 感谢您的意见。然而,我正在编写的程序不会产生键值元组。你知道如何禁用自动排序吗?
  • 不,但我的意思是,即使您可以禁用排序,您也无法摆脱按键的改组(您的行被框架解释为键),所以输出会得到反正混在一起。也许您需要一个不同于 MapReduce 的模型。
  • 有没有办法改变排序,让 9 出现在 10 之前?
  • 备选方案 1:将零添加到您的密钥中,以便它们都具有相同的大小。 “09”在“10”之前。
  • 备选方案 2:使用KeyFieldBasedComparator,如this SO question 中所示。
【解决方案2】:

,如上所述here

如果你的reduce任务数不为0,hadoop框架会对你的结果进行排序。没有办法解决。

【讨论】:

  • 当链接失效时,“否”回答标题中的问题。 (@gsamaras,你有类似的链接吗?)
  • @MarkGerolimatos 看了一眼找不到,如果有请分享。幸好我将基本信息复制到答案中,因为这些天没有链接是不朽的 =)
猜你喜欢
  • 2012-02-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-29
  • 2011-02-02
相关资源
最近更新 更多