2016-10-08 4 views
2

Я только начал изучать Hadoop и Map-Reduce концепции и имеют следующие несколько вопросов, которые я хотел бы списываться прежде чем двигаться вперед:Основы Hadoop и MapReduce функционирующий

Из того, что я понимаю:

Hadoop специально используется, когда имеется огромное количество данных. Когда мы храним файл в HDFS, происходит то, что файл разбивается на различные блоки (размер блока обычно составляет 64 МБ или 128 МБ ... или что-то, что настроено для текущей системы). Теперь, когда большой файл разбит на различные блоки, эти блоки хранятся в кластере. Это внутренне обрабатывается средой hadoop.

Фоном для вопроса:

Допустим, есть несколько таких огромных файлов, хранящихся в системе. Теперь блоки этих разных файлов могут храниться на узле данных, A (имеется 3 узла данных, A, B и C). А также, несколько блоков одного и того же файла могут быть сохранены в одном узле данных, А.

Scenario1:

Если запрос клиента, который требует, чтобы получить доступ к несколько блоков из то же самое файл на том же узле данных, то что будет? Будут ли множественные карты, назначенные этим различным блокам, или один и тот же картограф будет обрабатывать несколько блоков?

Другая часть в том же вопросе: как клиент знает, какие блоки или позволяет указать, какая часть файла потребуется для обработки? Как клиент не знает, как хранятся файлы, как он будет запрашивать имяNode для расположения блоков и т. Д.? Или для каждой такой обработки обрабатываются ВСЕ блоки соответствующего файла? Я хочу спросить, какие метаданные хранятся в NameNode?

Scenario2

Если есть два различных запросов на доступ блоков различных файлов на одном узле данных, то что будет? В этом случае будут другие узлы данных без каких-либо работ и не будет ли узкое место на одном узле данных?

ответ

1

1) Количество карточек = Количество блоков файла. То есть отдельный блок отображения для каждого блока. В идеале, нет. узлов в кластере должно быть очень высоким, и не должно быть двух блоков одного и того же файла, хранящихся на одном компьютере.

2) Всякий раз, когда клиент отправляет задание, задание будет выполняться на весь файл, а не на отдельных кусках.

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

4) Namenode хранит всю информацию метаданных обо всех файлах, хранящихся в HDFS. Он хранит информацию о том, сколько блоков файл распределяется/делится. Каждый блок файла хранится по количеству узлов/машин. В среднем для хранения информации метаданных для каждого блока namenode требуется 150 байт.

5) Сценарий 2: Namenode очень хорошо справляется с такими проблемами. HDFS имеет коэффициент репликации, равный 3, что означает, что каждый блок будет храниться на трех разных узлах. Таким образом, через эти другие узлы HDFS управляет балансировкой нагрузки, но да, основной целью репликации является обеспечение доступности данных. Но учтите, что запросов на чтение содержимого файла будет очень мало. Hadoop предназначен для обработки данных, а не для простого чтения содержимого.

Я надеюсь, что это решит некоторые из ваших сомнений.

0

Если возникает запрос клиента, который требует доступа к нескольким блокам того же файла на одном и том же узле данных, то что произойдет?

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

Будут ли множественные карты, назначенные этим разным блокам, или> тот же самый обработчик будет обрабатывать несколько блоков?

Каждая карта сокращает количество рабочих мест, имеет свои собственные карты. Больше рабочих мест, которые связаны с одним и тем же блоком данных, означает большее количество карт, которые работают с одними и теми же данными.

Другая часть в том же вопросе, каким образом клиент знает, что блоки или позволяет сказать, какая часть файла будет требоваться для обработки? Как клиент не знает, как хранятся файлы, как он будет запрашивать имяNode для расположения блоков и т. Д.? Или для каждой такой обработки обрабатываются ВСЕ блоки соответствующего файла ? Я хочу спросить, какие метаданные хранятся в NameNode?

Клиенты знают, какие блоки необходимы из-за наменода. При начале доступа к файлам клиенты переходят к именименованию с именем файла и возвращают список блоков, в которых данные хранятся вместе с данными, которые их хранят. namenode содержит «информацию каталога» вместе список блоков, где находятся данные, вся эта информация хранится в ОЗУ и обновляется при каждом запуске системы. Также datanode отправляет heartbeat для наменования вместе с информацией о распределении блоков. КАЖДЫЙ datanode сообщает КАЖДОМУ namenode.

Если есть два разных запроса на доступ к блокам разных файлов на одном и том же узле данных, то что произойдет? В этом случае будут другие узлы данных без каких-либо работ и не будет ли узкое место на одном узле данных?

Если Datanode не отвечает (отказ), доступ всегда идет на одном и том же цифровом канале. Репликация не используется, чтобы заставить работу работать быстро, все должно быть уверенным, что никакие данные не будут потеряны. I.E: Когда вы пишете в HDFS, ваши данные будут перенаправлены на любой блок репликации, и это сделает записи очень медленными. Мы должны быть уверены, что данные безопасны.