我已根据需要实现了二级排序。但是我需要对它们的内部工作进行一些澄清。

鉴于排序发生在 map 端。我假设溢出文件中的所有(k,V)对都是按键排序的。在我们的例子中,是复合键。

我想知道许多映射文件中属于同一键的值如何以特定顺序(如SortComparator中指定的)出现,以减少每次的功能。

如果排序发生在 map 侧,并且合并在简化器侧进行。在reduce函数启动之前,如何以及何时将许多映射文件中属于key的值按特定顺序排列?

最佳答案

默认情况下,值不排序,仅对键排序。但是,您可以以特定的方式覆盖PartitionerSortComparatorGroupingComparator,从而使hadoop框架可以按自己喜欢的方式对键和值进行排序。 (此类设置示例可以在我的article中找到)。请注意,由于通常值对象大得多,因此对键和值进行排序的作业将比仅按键排序运行的时间更长。

键在映射器和简化器中都被排序:

  • 映射器对每个reducer输出的KV对进行排序,从而导致每个输出文件根据SortComparator
  • 进行排序
  • reducer从映射器中获取大量已排序的文件,并将它们合并在一起,从而为reduce()调用提供输入

  • 默认情况下,值以某些未指定的顺序变为reduce()。通常,它取决于一切:在map中发出键/值对的顺序,hadoop决定合并文件的顺序,使用的排序算法等。

    10-06 14:04
    查看更多