Очень большая пара ключ-значение в Hadoop - PullRequest
4 голосов
/ 19 декабря 2011

Я новичок в Hadoop, и моя нынешняя сложность программы ограничена сложностью wordcount. Я пытаюсь понять фундаментальную архитектуру Hadoop, чтобы лучше проектировать свои решения.

Один из самых больших вопросов, которые у меня возникают, - как Hadoop обрабатывает большие пары ключ-значение на границах блоков? Предположим, у меня есть пара значений ключа размером 10 МБ (например, если значение представляет собой файл размером 10 МБ), и предположим, что я использую файл последовательности. Как Hadoop справляется с этим на границах своих блоков? Делит ли он разделение на две части и сохраняет его в двух разных блоках или понимает, что пара ключ-значение очень велика, и, следовательно, вместо разделения он просто создает новый блок для всей пары ключ-значение?

1 Ответ

4 голосов
/ 19 декабря 2011

Размер блока по умолчанию в HDFS составляет 64 МБ.Если пара ключ / значение составляет 10 МБ, то она может / не может быть разделена на блоки.

  • Если 1-я пара КВ составляет 60 МБ, а вторая - 10 МБ.Затем во 2-й паре КВ остается только 4 МБ свободного места в 1-м блоке (при размере блока 64 МБ).Таким образом, 4 МБ 2-го КВ сохраняются в 1-м блоке, а оставшиеся 6 МБ сохраняются во втором блоке.

  • Если 1-я пара КВ равна 40 МБ, а вторая -10 МБ.Затем во 2-й паре КВ в первом блоке осталось 24 МБ (при размере блока 64 МБ).Таким образом, 2-й кв хранится полностью в 1-м блоке и не разделяется.

При использовании SequenceFile маппер не знает, где находится начало записи в блоке, поэтомуСинхронизация добавляется в SequenceFiles автоматически с помощью инфраструктуры Hadoop.В соответствии с Hadoop: полное руководство

Точка синхронизации - это точка в потоке, которая может использоваться для повторной синхронизации с границей записи, если читатель «потерян» -например, после поиска произвольной позиции в потоке.Точки синхронизации записываются в SequenceFile.Writer, который вставляет специальную запись, чтобы пометить точку синхронизации каждые несколько записей в процессе записи файла последовательности.Такие записи достаточно малы, чтобы нести незначительные накладные расходы на хранение - менее 1%.Точки синхронизации всегда совпадают с границами записи.

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

Подводя итог, HadoopFrameworks поддерживает запись, даже если запись разбита на блоки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...