二次排序:什么时候对值进行排序?

Secondary Sorting : When does the sorting of values happen?

我已经根据我的要求实现了二次排序。但是我需要清楚地了解它的内部工作方式。

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

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

如果排序发生在map端,合并发生在reducer端。在 reduce 函数启动之前,属于许多映射文件中的键的值如何以及何时以特定顺序排列?

值默认不排序,只有键。但是,您可以以特定方式覆盖 PartitionerSortComparatorGroupingComparator,使 hadoop 框架以您喜欢的任何方式对键和值进行排序。 (此类设置的示例可以在我的 article 中找到)。请注意,因为通常值对象要大得多,所以对键和值进行排序的作业 运行 比仅对键排序要长得多。

键在映射器和缩减器中排序:

  1. mappers 为每个 reducer 输出排序 KV 对,导致每个输出文件根据 SortComparator
  2. 排序
  3. reducer 从映射器中获取大量排序文件并将它们合并在一起,为 reduce() 调用提供输入

默认情况下,值以某种未指定的顺序进入 reduce()。通常,它取决于一切:您在地图中发出 key/value 对的顺序、hadoop 决定合并文件的顺序、使用的排序算法等等。