InputSplits в mapreduce
Я только начал изучать Mapreduce и у меня есть несколько вопросов, на которые я хочу получить ответы. Вот оно:
1) Случай 1: FileInputFormat в качестве формата ввода. Каталог, содержащий несколько файлов для обработки, является входным путем. Если у меня n файлов, все файлы меньше размера блока в кластере hadoop. Сколько расщеплений рассчитывается для карты, чтобы уменьшить работу?
2) Я расширяю FileInputFormat в классе, называемом MyFileInputFormat, и переопределяю isSplitable, чтобы всегда возвращать false. Входная конфигурация такая же, как указано выше. Получу ли я n сплитов в этом случае?
3) Если, скажем, 1 из n файлов будет немного больше, чем размер блока кластера, получу ли я n+1 разбиений во втором случае?
Заранее спасибо за помощь!
1 ответ
Начнем с Основы FileInputFormat
FileInputFormat является абстрактным, поэтому вы не можете использовать его напрямую. "публичный абстрактный класс FileInputFormat"
Предположим, вы используете InputFormat наподобие TextInputFormat (класс TextInputFormat расширяет FileInputFormat) и ответите на ваш вопрос.
Логика splitMethod в FileInputFormat применима для каждого файла во входном пути, поэтому у вас будет "N" разбиений в заданиях MapReduce (Case1).
В случае Case2 у вас все еще будет N разбиений, поскольку вы только что сообщили входному формату, чтобы не разбивать отдельные файлы. Но для каждого файла рассмотрим это как одно разбиение.
В случае 3 у вас все еще будет N разделений, так как файлы не разделяются. Помните, что логика разделения применяется к отдельному файлу и не учитывает их вместе.
CombineInputFormat - это то, что используется, если вы хотите объединить входные файлы во время логики разделения.