Учитывает ли податель задания hadoop при расчете разбиений границы записей?
Этот вопрос НЕ является дубликатом: как записи процесса Hadoop разделяются по границам блоков?
У меня есть один вопрос, касающийся расчета входного сплита. Согласно руководству Hadoop
1) InputSplits уважают границы записи
2) В то же время говорится, что сплиты рассчитываются подателем вакансии. Который я предполагаю работает на стороне клиента. [Анатомия выполнения задания MapReduce - Classic MRv1]
Означает ли это, что:
(а) податель задания читает блоки для вычисления входных разбиений? Если это так, то это не будет очень неэффективно и превзойдет саму цель hadoop.
Или же
(b) Рассматривает ли податель задания только расщепления, которые являются просто оценкой, основанной на размерах и местоположении блоков, и затем он становится ответственным за InputFormat и RecordReader, выполняемый под маппером, для получения записей через границу хоста.
Спасибо
1 ответ
(а) податель задания читает блоки для вычисления входных разбиений? Если это так, то это не будет очень неэффективно и превзойдет саму цель hadoop.
Я так не думаю. Отправитель задания должен прочитать информацию блоков из узла имени, а затем просто выполнить расчет, который не должен использовать много вычислительных ресурсов.
(b) Рассматривает ли податель задания только расщепления, которые являются просто оценкой, основанной на размерах и местоположении блоков, и затем он становится ответственным за InputFormat и RecordReader, выполняемый под маппером, для получения записей через границу хоста.
Я не уверен, насколько точен расчет отправителя, но размер разделения рассчитывается на основе настроенного минимального и максимального размера разделения, а также размера блока с использованием этого уравнения
max(минимум SplitSize, min(максимум SplitSize, blockSize))
все эти значения могут быть установлены пользователями. Например, минимальный размер разделения может быть 1, а максимальное значение может быть максимальным длинным значением (9223372036854775807).
правильно - записи в InputFormat - это логическая концепция. Это означает, что как разработчики, когда мы разрабатываем код сокращения кода, нам не нужно рассматривать случай, когда запись разделена на 2 разных разбиения. Читатель записи отвечает за чтение недостающей информации через удаленное чтение. Это может вызвать некоторые накладные расходы, но обычно оно незначительное.