2013-06-10 2 views
0

Число отображаемых карт() равно числу 64 МБ блоков входных данных. Предположим, что у нас есть 2 входных файла размером 1 МБ, оба файла будут храниться в одном блоке. Но когда я запускаю свою программу MR с помощью 1 namenode и 2 jobnodes, я вижу 2 map(), порожденный, по одному для каждого файла. Так это потому, что система пыталась разделить работу между 2 узлами т.е.Различается ли число задач карты, зависит от количества рабочих мест?

Number of map() spawned = number of 64MB blocks of input data * number of jobnodes ? 

Кроме того, в MapReduce учебнике, его написано, чем для 10TB файла с блочным существом 128KB, 82000 карт будут порождало. Однако, согласно логике, что количество карт зависит только от размера блока, должно быть создано 78125 заданий (10 ТБ/128 МБ). Я не понимаю, как было создано несколько дополнительных рабочих мест? Будет здорово, если кто-нибудь может поделиться своими мыслями по этому поводу? Благодарю. :)

ответ

0

По умолчанию создается один картограф на каждый входной файл, и если размер входного файла больше, чем размер разбиения (который обычно поддерживается таким же, как размер блока), то для этого файла количество файлов будет ограничено размером файла/split size.

Теперь предположим, что вам 5 входных файлов и размер разбивки хранится в виде 64 МБ

file1 - 10 MB 
file2 - 30 MB 
file3 - 50 MB 
file4 - 100 MB 
file5 - 1500 MB 

количество картографа запущенного

file1 - 1 
file2 - 1 
file3 - 1 
file4 - 2 
file5 - 24 

всего картографы - 29

0

Кроме того, вход сплит размер и размер блока не всегда соблюдается. Если входной файл является gzip, он не является разделяемым. Поэтому, если один из файлов gzip равен 1500 МБ, он не будет разделен. Лучше использовать сжатие блока с помощью Snappy или LZO вместе с форматом файла последовательности.

Кроме того, размер входного разделения не используется, если вход представляет собой таблицу HBASE. В случае таблицы HBase разделение только для сохранения правильного размера региона для таблицы. Если таблица распределена неправильно, вручную разделите таблицу на несколько регионов.

0

Количество счетчиков зависит только от одной вещи: нет InputSplits, созданных с помощью InputFormat (по умолчанию это TextInputFormat, который создает разделители, беря \ n в качестве разделителя). Это не зависит от нет. узлов или файла или размера блока (64 МБ или что-то еще). Очень хорошо, если раскол равен блоку. Но это всего лишь ситуация ideal и cannot be guaranteed всегда. Структура MapReudce максимально подходит для оптимизации процесса. И в этом процессе происходят такие вещи, как создание всего 1 картографа для всего файла (если размер файла меньше размера блока). Другая оптимизация может заключаться в создании меньшего числа картографов, чем количество разделов. For example, если ваш файл имеет 20 строк, и вы используете TextInputFormat, тогда вы можете подумать, что вы получите 20 карт (как нет. Mappers = no. Splits и TextInputFormat создает расщепления на основе \ n). Но этого не происходит. При создании 20 карт для такого небольшого файла будут нежелательные накладные расходы.

И если размер раскола больше размера блока, остальные данные перемещаются из другого удаленного блока на другой машине для обработки.

О MapReduce учебника:

Если у вас есть данные 10TB, затем - (10 * 1024 * 1024)/128 = 81,920 картографы, что почти = 82000

Надеется, что это устраняет некоторые из вещей ,

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