Sorting 为什么MRJob在整理我的钥匙?

Sorting 为什么MRJob在整理我的钥匙?,sorting,hadoop,mrjob,Sorting,Hadoop,Mrjob,我正在运行一个相当大的MRJob作业(1755638个键),并且这些键正在按排序顺序写入减速机。即使我指定Hadoop应使用哈希分区器,也会发生这种情况,包括: class SubClass(MRJob): PARTITIONER = "org.apache.hadoop.mapred.lib.HashPartitioner" ... 当我没有要求对键进行排序时,我不明白为什么要对键进行排序。当您没有明确指定任何分区器时,默认情况下会使用。MR会按键对键/值对进行排序,以确保给定键

我正在运行一个相当大的MRJob作业(1755638个键),并且这些键正在按排序顺序写入减速机。即使我指定Hadoop应使用哈希分区器,也会发生这种情况,包括:

class SubClass(MRJob):

    PARTITIONER = "org.apache.hadoop.mapred.lib.HashPartitioner"

...

当我没有要求对键进行排序时,我不明白为什么要对键进行排序。

当您没有明确指定任何分区器时,默认情况下会使用。

MR会按键对键/值对进行排序,以确保给定键的所有值都一起传递给减缩器。事实上,传入reduce()方法的Iterable只读取排序列表,直到找到新键,然后停止迭代。这就是键总是按顺序显示的原因。

默认情况下键不会排序,但如果数据集很小,HashPartitioner将提供排序键的外观。当我将数据集的大小从50M增加到10G时,密钥停止排序。

文档中是否提到过它?您的答案与@vy32相矛盾@Dandelion排序不是由分区器完成的,分区器决定每个键/值对要去哪个分区。排序作为reducer预处理的一部分进行,以便将键/值分组在一起并一起传递给reducer。当它给出排序的外观时,是什么样的哈希!?!不知道。考虑到我的“相当大的MRJob”实际上是多么的小,也许它甚至都懒得排序。