Разделение ввода Hadoop - как это работает

Я знаю кратко о Hadoop

Мне интересно узнать, как это работает.

Чтобы быть точным, я хочу знать, как именно он делит / разбивает входной файл.

Делит ли он на равные части по размеру?

или это настраиваемая вещь.

Я прошел через этопосл, но я не мог понять

Ответы на вопрос(2)

ста), Hadoop сначала вычисляет входные разбиения, каждый размер входного разделения обычно равен размеру блока HDFS. Например, для файла размером 1 ГБ будет 16 входных разбиений, если размер блока составляет 64 МБ. Однако размер разделения можно настроить так, чтобы он был меньше / больше размера блока HDFS. Расчет входных разбиений выполняется с помощью FileInputFormat. Для каждого из этих входных разбиений должна быть запущена задача карты.

Но вы можете изменить размер входного разбиения, настроив следующие свойства:

mapred.min.split.size: The minimum size chunk that map input should be split into.
mapred.max.split.size: The largest valid size inbytes for a file split. 
dfs.block.size: The default block size for new files.

И формула для разделения входа:

Math.max("mapred.min.split.size", Math.min("mapred.max.split.size", blockSize));

Вы можете проверить примерыВо.

Решение Вопроса

который для большинства файловых форматов определяется вFileInputFormat базовый класс.

Существует ряд настраиваемых опций, которые обозначают, как hadoop будет брать один файл и обрабатывать его как один сплит, или делить файл на несколько сплитов:

Если входной файл сжат, формат ввода и метод сжатия должны быть разделяемыми. Gzip, например, не разделяемый (вы не можете случайным образом найти точку в файле и восстановить сжатый поток). BZip2 разделяется. Смотрите конкретныеInputFormat.isSplittable() реализация для вашего формата ввода для получения дополнительной информации Если размер файла меньше или равен определенному размеру блока HDFS, то, скорее всего, hadoop обработает его в одном разбиении (это можно настроить, см. Более позднюю статью о свойствах размера разбиения) Если размер файла больше, чем его определенный размер блока HDFS, то Hadoop, скорее всего, разделит файл на разбиения на основе базовых блоков (4 блока приведут к 4 разбиениям) Вы можете настроить два свойстваmapred.min.split.size а такжеmapred.max.split.size, которые помогают формат ввода при разбиении блоков на разбиения. Обратите внимание, что минимальный размер может быть переопределен форматом ввода (который может иметь фиксированный минимальный размер ввода)

Если вы хотите узнать больше и вам удобно просматривать источник, ознакомьтесь сgetSplits() метод вFileInputFormat (и новый, и старый API имеют одинаковый метод, но могут иметь некоторые различия).

Ваш ответ на вопрос