Итак, когда Tez выбирает количество картографов для запуска, он смотрит на количество контейнеров, которые могут работать параллельно (доступные слоты), волновой фактор, местоположение данных в стойке, максимальный размер разделения FileInputFormat, максимальный размер группировки Tez, полосы, которые могут перейти к разделению, несжатому общему размеру данных извлекаемых столбцов и т. д. - он не смотрит на размер контейнера tez.
Таким образом, вычисление количества картографов приводит к входной длине отрезка в байтах на модуль сопоставления, которую можно оценить (перед запуском задания).
Но как оценить общий размер контейнера, необходимый (память) для обработки этого разделения ввода?
Я понимаю, что необходимая память будет зависеть от
- Необработанная длина разделения ввода (байты)
- Сжатие (в процентах?)
- Любой UDF, который будет применяться к записям (вероятно, незначительный)
- Векторизация, если используется (логическое значение)
- Присоединение к карте, если необходимо (логическое значение)
- Сортировка при необходимости (логическое значение)
- Буфер, используемый перед записью на диск (в процентах?)
Но как я могу оценить размер контейнера или, скорее, пространство кучи, необходимое внутри контейнера, на основе входных разделенных байтов?
Один из способов — просмотреть выделенные байты кучи задачи сопоставления после одного запуска.
Но есть ли какая-либо формула для оценки COMMITTED_HEAP_BYTES из INPUT_SPLIT_LENGTH_BYTES на основе вышеуказанных факторов или любых других факторов?