В улье, почему количество ведер должно быть равно количеству редукторов?
Почему количество ведер в улье должно быть равно количеству редукторов?
Ответы (2)
Потому что это наиболее оптимизированный способ работы с mapreduce (при прочих равных условиях). Задачи будут разделены между редьюсерами.
В кустах 0.x и 1.x необходимо указать следующее: hive.enforce.bucketing = true. Это означает, что количество редукторов будет автоматически определяться на основе количества сегментов в вашей таблице. В более поздних версиях куста (2.x) это установлено по умолчанию.
Источник: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL+BucketedTables
Количество редукторов, запущенных при вставке в таблицу с сегментами, равно делителю количества сегментов в этой таблице. Выбирается делитель, ближайший к максимальному набору редукторов, и запускается такое количество редукторов.
Пример:
Num of buckets in a table 5956.
hive.exec.reducers.max=1009
divisors of 5956=1489*4
number of launched reducers: 4
поэтому можно запустить либо 1489, либо 4 редуктора, но поскольку максимальное количество редукторов, которые можно запустить, составляет 1009, будут работать только 4 редуктора, что может занять десятилетие для запуска таблицы большого размера.
Установка hive.exec.reducers.max=2000 запустит 1489 редюсеров.