【问题标题】:Secondary Sorting : When does the sorting of values happen?二次排序:值的排序何时发生?
【发布时间】:2018-05-07 01:11:21
【问题描述】:

我已根据我的要求实施了二次排序。但我需要弄清楚它的内部工作原理。

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

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

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

【问题讨论】:

    标签: java hadoop mapreduce bigdata reducers


    【解决方案1】:

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

    键在 mapper 和 reducer 中都被排序:

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

    默认情况下,值以某种未指定的顺序出现在 reduce() 中。一般来说,它取决于一切:您在 map 中发出键/值对的顺序、hadoop 决定合并文件的顺序、使用的排序算法等等。

    【讨论】:

    • :: 感谢您的回复。我能够找到在 SortComparator 中指定的要排序的 reduce 输入值。所以我很想知道在合并许多映射文件后,reducer 端是否再次发生排序。必须有一些逻辑或算法使二次排序成为可能,从而将减速器输入限制为特定顺序。如果排序仅在地图末端,这不会发生,对吗?如果我的理解有误,请纠正我。
    • 没有单独的主要和次要排序。只有单一的排序。它是在映射器和减速器中完成的。默认情况下,它仅按键对 KV 对进行排序,而将值以某种未指定的顺序排列。但是你可以让它对键和值进行排序。 hadoop 中的操作顺序:1)映射分区(Partitioner)发出 KV 对,2)映射排序(SortComparator)每个分区的输出,3)reduce 收集映射器的所有输出,4)reducer 合并(SortComparator 再次)它们; 5) reducer slices (GroupingComparator) 合并输出并将数据输入到您的reduce() 实现中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-13
    • 2014-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多