Количество картографов не может быть определено в программе mapreduce, так как общее количество картографов будет выбрано на основе входного разделения или размера. Но почему у нас есть возможность установить num-mappers на sqoop? Когда программа mapreduce берет число или мапперы самостоятельно и не позволяет нам их выбрать, почему sqoop разрешено это делать?
Количество картографов: Mapreduce против Sqoop
Ответы (1)
sqoop разделит ваш набор данных, используя столбец --split-by
. Прочитайте, как это работает здесь. Также запустите sqoop в подробном режиме, чтобы лучше понять, как он работает. Он получит минимальное и максимальное значение разделенного столбца и разделит весь диапазон на части num-mappers, предполагая, что разделенный столбец равномерно распределен. Если он распределен неравномерно, sqoop разделит набор данных между картографами неравномерно (с перекосом).
И количество мапперов тоже настраивается, по крайней мере, в улье. Например, если вы используете Tez, вы можете настроить минимальный и максимальный размер группового разделения:
set tez.grouping.min-size=16777216; -- 16 MB min split
set tez.grouping.max-size=1073741824; -- 1 GB max split
Также вы можете настроить номер сплита и если возможно, Tez будет запускать близкое к нему количество мапперов (некоторые сплиты можно совмещать, что-то нельзя сплитить, но это повлияет на количество мапперов):
set tez.grouping.split-count=5000;
Этот подход не рекомендуется, лучше использовать указанные выше настройки размера разделения.
Для механизма исполнения MR:
set mapreduce.input.fileinputformat.split.minsize=16777216; -- 16 MB
set mapreduce.input.fileinputformat.split.maxsize=1073741824; -- 1 GB
Контролировать количество мапперов не так просто, т.к. зависит от многих факторов. Например, ORC разделен на уровне полосы, это означает, что вы не можете разделить меньшую полосу, чем одна полоса, и т. д. Подробнее о количестве картографов< /а>