我已根据需要实现了二级排序。但是我需要对它们的内部工作进行一些澄清。
鉴于排序发生在 map 端。我假设溢出文件中的所有(k,V)对都是按键排序的。在我们的例子中,是复合键。
我想知道许多映射文件中属于同一键的值如何以特定顺序(如SortComparator中指定的)出现,以减少每次的功能。
如果排序发生在 map 侧,并且合并在简化器侧进行。在reduce函数启动之前,如何以及何时将许多映射文件中属于key的值按特定顺序排列?
最佳答案
默认情况下,值不排序,仅对键排序。但是,您可以以特定的方式覆盖Partitioner
,SortComparator
和GroupingComparator
,从而使hadoop框架可以按自己喜欢的方式对键和值进行排序。 (此类设置示例可以在我的article中找到)。请注意,由于通常值对象大得多,因此对键和值进行排序的作业将比仅按键排序运行的时间更长。
键在映射器和简化器中都被排序:
默认情况下,值以某些未指定的顺序变为reduce()。通常,它取决于一切:在map中发出键/值对的顺序,hadoop决定合并文件的顺序,使用的排序算法等。