Как Hadoop выполняет разбиение ввода? - PullRequest
34 голосов
/ 14 мая 2010

Это концептуальный вопрос, касающийся Hadoop / HDFS. Допустим, у вас есть файл, содержащий 1 миллиард строк. И для простоты, давайте рассмотрим, что каждая строка имеет форму <k,v>, где k - смещение строки от начала, а значение - содержимое строки.

Теперь, когда мы говорим, что хотим запустить N задач карты, разделяет ли фреймворк входной файл на N разбиений и запускает каждую задачу карты в этом разбиении? или мы должны написать функцию разбиения, которая разделяет N, и запускать каждую задачу карты в сгенерированном разбиении?

Все, что я хочу знать, это то, выполняется ли разбиение внутри системы или мы должны разделить данные вручную?

В частности, каждый раз, когда вызывается функция map (), каковы ее параметры Key key and Value val?

Спасибо, Дипак

Ответы [ 11 ]

0 голосов
/ 21 ноября 2013

Краткий ответ: InputFormat заботится о разбиении файла.

Я подхожу к этому вопросу, рассматривая класс TextInputFormat по умолчанию:

Все классы InputFormat являются подклассом FileInputFormat, который обеспечивает разделение.

В частности, функция FileSputFormat getSplit генерирует список InputSplit из списка файлов, определенных в JobContext. Разделение основано на размере байтов, минимальные и максимальные значения которых могут быть произвольно определены в файле проекта XML.

...