2017-02-06 7 views
1

Я выполняю довольно большую работу с MRJob (1,755,638 ключей), а ключи записываются в редукторы в отсортированном порядке. Это происходит, даже если я указываю, что Hadoop следует использовать хэш-разметки, с:Почему MRJob сортирует мои ключи?

class SubClass(MRJob): 

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

... 

Я не понимаю, почему ключи сортируются, когда я не прошу, чтобы они были отсортированы.

ответ

0

Ключи сортируются по умолчанию, но HashPartitioner выдаст внешний вид сортировочных ключей, если набор данных невелик. Когда я увеличил размер набора данных с 50 М до 10 Г, ключи перестали сортироваться.

2

HashPartitioner используется по умолчанию, если вы явно не указали какой-либо разделитель.

0

MR сортирует пары ключ/значение по ключу, чтобы гарантировать, Фактически, Iterable, переданный в метод reduce(), просто считывает этот отсортированный список, пока не найдет новый ключ, а затем прекратит итерацию. Вот почему ключи всегда будут выглядеть по порядку.