Каким образом ввод малого размера читается картографом в map-Reduce?
У меня есть работа по уменьшению карты, чей ввод - большой набор данных (скажем, размером 100 ГБ). Эта задача сокращения карты разбивает большие данные на куски и записывает отдельные файлы, по одному на каждый блок данных. Таким образом, вывод задания состоит из нескольких файлов, каждый размером 64 МБ.
Выходные данные этого задания уменьшения карты используются в качестве входных данных для другого задания уменьшения карты. Поскольку новый входной файл состоит из нескольких файлов, каждый размером 64 МБ, каждый маппер во втором задании карты уменьшает чтение только одного файла или может прочитать более 1 файла?
1 ответ
По умолчанию JobTracker назначит задачу карты одному блоку. Вы можете использовать CombineFileInputFormat, чтобы обойти это поведение и разбить несколько блоков на один входной сплит (но это не то, что вы просите).
В вашей ситуации, если ваши файлы занимают более 64 МБ, а размер блока по умолчанию составляет 64 МБ, вы можете получить два блока на файл ~64 МБ, что, вероятно, плохо. Если все ваши файлы меньше размера блока, вы должны получить один маппер на блок.
Интересно, почему у вас вообще есть первая работа в Mapreduce? Вы в основном воссоздаете то, что Hadoop делает для вас бесплатно. Если у вас есть куча больших файлов объемом до 100 ГБ, пусть блоки Hadoop сделают это за вас. Например, файл размером 140 МБ, в котором используется размер блока 64 МБ, будет автоматически разбит на фрагменты размером 64 МБ, 64 МБ и 12 МБ. Три картостроителя появятся, чтобы заняться этим одним файлом.