我正在运行一个相当大的mrjob作业(1755638个键),并且这些键正在按排序顺序写入减速器。即使我指定hadoop应该使用hash分区器,也会发生这种情况:
class SubClass(MRJob): PARTITIONER = "org.apache.hadoop.mapred.lib.HashPartitioner" ...
我不明白为什么钥匙被分类,当我不要求他们被分类。
6g8kf2rb1#
当您没有显式指定任何分区器时,默认情况下使用hashpartitioner。
7d7tgy0s2#
默认情况下不会对键进行排序,但是如果数据集很小,hashpartitioner将提供排序键的外观。当我将数据集的大小从50m增加到10g时,密钥就停止了排序。
iyzzxitl3#
mr按键对键/值对进行排序,这样可以确保给定键的所有值一起传递给reducer。实际上,传入reduce()方法的iterable只是读取排序后的列表,直到找到一个新键,然后停止迭代。这就是为什么钥匙总是按顺序出现。
3条答案
按热度按时间6g8kf2rb1#
当您没有显式指定任何分区器时,默认情况下使用hashpartitioner。
7d7tgy0s2#
默认情况下不会对键进行排序,但是如果数据集很小,hashpartitioner将提供排序键的外观。当我将数据集的大小从50m增加到10g时,密钥就停止了排序。
iyzzxitl3#
mr按键对键/值对进行排序,这样可以确保给定键的所有值一起传递给reducer。实际上,传入reduce()方法的iterable只是读取排序后的列表,直到找到一个新键,然后停止迭代。这就是为什么钥匙总是按顺序出现。