Поведение параметра "mapred.min.split.size" в HDFS

Параметр "mapred.min.split.size" изменяет размер блока, в который файл был записан ранее? Предполагая ситуацию, когда я при запуске своей JOB передаю параметр "mapred.min.split.size" со значением 134217728 (128 МБ). Что правильно сказать о том, что происходит?

1 - каждый MAP обрабатывает эквивалент 2 блоков HDFS (при условии, что каждый блок 64 МБ);

2 - будет новый раздел моего входного файла (ранее включал HDFS), чтобы занимать блоки в HDFS 128M;

3 ответа

Решение

Размер сплита рассчитывается по формуле:

max(mapred.min.split.size, min(mapred.max.split.size, dfs.block.size))

В вашем случае это будет:-

split size=max(128,min(Long.MAX_VALUE(default),64))

Итак, выше вывод:-

  1. каждая карта будет обрабатывать 2 блока hdfs(при условии, что каждый блок 64 МБ): True

  2. Будет новое разделение моего входного файла (ранее HDFS) для размещения блоков в HDFS 128M: False

но создание минимального размера разделения, большего, чем размер блока, увеличивает размер разделения, но за счет локальности.

Предположим, что минимальный размер разделения определен 128 МБ, а минимальный размер блока определен 64 МБ.

ПРИМЕЧАНИЕ. Поскольку по умолчанию HDFS каждый блок будет реплицирован на 3 различных узла данных HDFS. Также каждая задача карты выполняет свою операцию на одном блоке.

Следовательно, размер разбиения 128 МБ будет рассматривать 2 блока как один блок и создавать для него одну задачу карты, которая будет выполняться на одном канале данных. Это происходит за счет локальности данных. Под "стоимостью локальных данных" я имею в виду блок, который находится на датоделе, для которого не выполняется задача карты. Который должен быть извлечен из этого узла данных и обработан в этом месте, на котором выполняется задача карты, что приводит к снижению производительности.

Однако, если мы рассмотрим файл размером 128 МБ, с размером блока по умолчанию 64 МБ и минимальным разделенным размером по умолчанию 64 МБ, то в этом случае, как обычно, для каждой 64 МБ блока будут созданы две задачи карты.

Я пробовал использовать приведенную формулу, в которой размер блока составляет 128 МБ, но результаты не соответствуют ожиданиям. Я придумал приведенную ниже формулу, но она не имеет никакого смысла, но каждый раз дает мне правильный результат.

      min(mapred.min.split.size, max(mapred.max.split.size, dfs.block.size))
Другие вопросы по тегам