2016-02-29 2 views
0

Всем известно, что Hadoop плохо управляет небольшими файлами, причиной числа используемых им картографов. , но как насчет больших файлов, которые немного больше размера блока.BlockSize и большие данные

В качестве примера предположим, что размер блока hdfs равен 128 Мб, и этот хаоп получает файлы между 126 МБ и 130 МБ.

файлы размером от 126 мб до 128 мб будут пригодны для хранения в хауопе, но как насчет 129mb-130mb, do hadop нужно 2 картона для чтения этих файлов? как справиться с этой проблемой в hadoop betside факта создания блоков hdfs больше?

заранее спасибо :)

ответ

1

Количество картографов зависит от количества входных расщеплений, вычисленных каркасом, а не от блоков, составляющих файл. Разделение входа может превышать блок. В этом случае данные, превышающие размер блока, все равно будут обрабатываться одной задачей карты. Разделение входа - это логическая единица вычисления (по карте), тогда как блок является логической единицей хранения (по HDFS).

При этом второй картограф потребуется, если файл имеет второй входной сплит.

+0

Большое спасибо за ответ, он отвечает на мой вопрос, есть ли у вас статья, в которой объясняется, как выбираются размер и количество входных расщеплений и какова связь между этими разбиениями и блоками hdfs (помимо данных)? –

+0

Пожалуйста, взгляните на «Hadoop: окончательный герой Tom White». Это медленная книга. Вы по достоинству оцените детали. – Marco99

+0

Спасибо большое! я сделаю это :), но в краткосрочной перспективе мне нужен быстрый ответ для одного из моих клиентов, поэтому, если у вас есть хорошая статья, не стесняйтесь :) Большое спасибо. –

1

После того, как вы пересечете boundry 128Mb, вам нужен второй блок.

, например, файл 130MB будет отображаться в виде 2-х блоков: первый 128 и второй остальной части файла

HDFS предназначается для обработки больших файлов. Допустим, у вас есть файл 1000 Мб. С размером блока 4k вам нужно будет сделать 256 000 запросов для получения этого файла (1 запрос на блок). В HDFS эти запросы проходят через сеть и имеют много накладных расходов. Каждый запрос должен обрабатываться узлом имени, чтобы выяснить, где этот блок можно найти. Это много трафика! Если вы используете блоки 64Mb, количество запросов уменьшается до 16, что значительно снижает стоимость накладных расходов и нагрузку на узел имен.

+0

Согласен, спасибо за ваш ответ! На самом деле я думаю, что я не был ясен. Мой вопрос состоит в том, чтобы знать, будет ли hadoop использовать 2 картографа для файлов 129mb и 130mb, и если это так, то каковы другие решения, связанные с тем, что блок hdfs больше? –

0

Я думаю, что у вас есть неправильное представление о взаимоотношениях между HDFS и mapreduce. HDFS - это основная файловая система, mapreduce - это вычислительная среда. HDFS самостоятельно не использует структуру mapreduce вообще для своей работы. Работа Mapreduce использует HDFS в качестве файловой системы при поиске своих ящиков для работы, записи временных данных обработки, вытягивания файлов для обработки или любой другой операции с файлами. Количество карт/редукторов устанавливается на время подачи заявки и зависит от клиента mapreduce, подающего задание.

Если у вас есть 500 МБ-файл, который был разделен на 4 блока по 128 МБ, и вы хотите запустить задание сопоставления слов, которое читает файл и выводит количество каждого встречающегося слова, и вы запускаете его с 4-мя картами и 2 редуктора, вы в конечном итоге будете выполнять каждую задачу карты, обрабатывая один из блоков размером 4 x 128 МБ. Задание будет сообщаться с namenode HDFS, чтобы запросить файл, namenode ответит всеми блоками, необходимыми для сборки файла, а также даст расположение блоков. Фаза карты будет считывать эти файлы из своих datanodes и создавать 4 файла после их обработки (например, part-0000, part-0001, part-0002, part-0003), фаза уменьшения будет сортировать и подсчитывать слова в каждом файле и дать ему окончательный результат.

Вам не нужно увеличивать блоки только потому, что ваш файл больше размера блока. Это нарушает цель распределенной файловой системы или любой существующей файловой системы. HDFS (и все файловые системы, которые я использовал) может иметь 8 ГБ файл - он все равно разбивает его на 128 Мбайт кусков или все, что вы задаете в качестве размера вашего блока.

+0

Спасибо за ваш ответ OkezieE, Да, мое сообщение было путаным, потому что я использовал hdfs вместо Hadoop. в противном случае: -> Я согласен с тем, что с файлами размером 8 ГБ нет необходимости изменять размер блока, поскольку hasoop будет иметь хороший блок, разделяющий общее значение - возможно, у него будет 1/64 шанс иметь небольшой файл - но когда вы используете файлы размером от 128 до 130 мб, у вас будет 50% шанс иметь небольшие файлы. -> в соответствии с mapredcuce, если я понял, вы имеете в виду, что число карт & уменьшено и определено при создании задания M/R? если да, то как обстоят дела в улье? это automact –

Смежные вопросы