为什么 MRJob 对我的密钥进行排序?
Why is MRJob sorting my keys?
我是 运行 一个相当大的 MRJob 作业(1,755,638 个键),键正在按排序顺序写入 reducer。即使我指定 Hadoop 应该使用散列分区程序,也会发生这种情况:
class SubClass(MRJob):
PARTITIONER = "org.apache.hadoop.mapred.lib.HashPartitioner"
...
我不明白为什么要对键进行排序,而我并没有要求对它们进行排序。
当您没有明确指定任何分区程序时,默认使用 HashPartitioner。
MR 对 key/value 对进行键排序,这样它可以确保给定键的所有值都一起传递给 reducer。事实上,传递给 reduce() 方法的 Iterable 只是读取排序后的列表,直到它找到一个新键,然后它停止迭代。这就是键总是按顺序出现的原因。
键默认不排序,但如果数据集较小,HashPartitioner 会给出外观排序键。当我将数据集的大小从 50M 增加到 10G 时,键停止排序。
我是 运行 一个相当大的 MRJob 作业(1,755,638 个键),键正在按排序顺序写入 reducer。即使我指定 Hadoop 应该使用散列分区程序,也会发生这种情况:
class SubClass(MRJob):
PARTITIONER = "org.apache.hadoop.mapred.lib.HashPartitioner"
...
我不明白为什么要对键进行排序,而我并没有要求对它们进行排序。
当您没有明确指定任何分区程序时,默认使用 HashPartitioner。
MR 对 key/value 对进行键排序,这样它可以确保给定键的所有值都一起传递给 reducer。事实上,传递给 reduce() 方法的 Iterable 只是读取排序后的列表,直到它找到一个新键,然后它停止迭代。这就是键总是按顺序出现的原因。
键默认不排序,但如果数据集较小,HashPartitioner 会给出外观排序键。当我将数据集的大小从 50M 增加到 10G 时,键停止排序。