二次排序:什么时候对值进行排序?
Secondary Sorting : When does the sorting of values happen?
我已经根据我的要求实现了二次排序。但是我需要清楚地了解它的内部工作方式。
鉴于排序发生在地图端。我假设溢出文件中的所有 (k,V) 对都是按键排序的。在我们的例子中,复合键。
我想知道来自许多映射文件的属于相同键的值如何以特定顺序出现(如 SortComparator 中指定的那样)以每次都减少功能。
如果排序发生在map端,合并发生在reducer端。在 reduce 函数启动之前,属于许多映射文件中的键的值如何以及何时以特定顺序排列?
值默认不排序,只有键。但是,您可以以特定方式覆盖 Partitioner
、SortComparator
和 GroupingComparator
,使 hadoop 框架以您喜欢的任何方式对键和值进行排序。 (此类设置的示例可以在我的 article 中找到)。请注意,因为通常值对象要大得多,所以对键和值进行排序的作业 运行 比仅对键排序要长得多。
键在映射器和缩减器中排序:
- mappers 为每个 reducer 输出排序 KV 对,导致每个输出文件根据 SortComparator
排序
- reducer 从映射器中获取大量排序文件并将它们合并在一起,为 reduce() 调用提供输入
默认情况下,值以某种未指定的顺序进入 reduce()。通常,它取决于一切:您在地图中发出 key/value 对的顺序、hadoop 决定合并文件的顺序、使用的排序算法等等。
我已经根据我的要求实现了二次排序。但是我需要清楚地了解它的内部工作方式。
鉴于排序发生在地图端。我假设溢出文件中的所有 (k,V) 对都是按键排序的。在我们的例子中,复合键。
我想知道来自许多映射文件的属于相同键的值如何以特定顺序出现(如 SortComparator 中指定的那样)以每次都减少功能。
如果排序发生在map端,合并发生在reducer端。在 reduce 函数启动之前,属于许多映射文件中的键的值如何以及何时以特定顺序排列?
值默认不排序,只有键。但是,您可以以特定方式覆盖 Partitioner
、SortComparator
和 GroupingComparator
,使 hadoop 框架以您喜欢的任何方式对键和值进行排序。 (此类设置的示例可以在我的 article 中找到)。请注意,因为通常值对象要大得多,所以对键和值进行排序的作业 运行 比仅对键排序要长得多。
键在映射器和缩减器中排序:
- mappers 为每个 reducer 输出排序 KV 对,导致每个输出文件根据 SortComparator 排序
- reducer 从映射器中获取大量排序文件并将它们合并在一起,为 reduce() 调用提供输入
默认情况下,值以某种未指定的顺序进入 reduce()。通常,它取决于一切:您在地图中发出 key/value 对的顺序、hadoop 决定合并文件的顺序、使用的排序算法等等。