2017-02-06 3 views
0

Большие данные Hadoop 1-го поколения. Я очень новичок в Apache Hadoop. Я просто сомневался, что мой вопрос не имеет значения.Как происходит разделение блоков в HDFS?

Проблема: проблема с количеством слов (сухая отладка).

Пример:

Имя файла: test.txt

Размер файла: 120 MB

Размер блока по умолчанию: Содержимое 64 MB

Файл:

Hello StackOverflow 
Hi StackOverflow 
Hola StackOverflow 
Mushi Mushi StackOverflow 
..... 
..... 
..... 
Mushi Mushi StackOverflow 

Номер блоков будет: 2 (64 МБ + 56 МБ)

Блок 1 содержит:

Hello StackOverflow 
Hi StackOverflow 
Hola StackOverflow 
Mushi Mus 

Блок 2 содержит:

hi StackOverflow 
..... 
..... 
..... 
Mushi Mushi StackOverflow 

Примечание: Здесь Муши слово разделяется между блоком 1 и блок 2, потому что в слове "Мус" размер блока стал 64 МБ, оставшееся слово «привет» перешло в блок 2.

Теперь мои вопросы: Q1) Возможно ли сценарий?

Q2) If No Why?

Q3) Если да, то какой будет счетчик слов.

Q4) Каким будет выход Mapper для обоих блоков.

ответ

0

рамки MapReduce работает на InputSplit, а не HDFS блоков.

Посмотрите на нижеприведенное сообщение SE, чтобы лучше понять InputSplit & количество карт для данного файла.

How does Hadoop process records split across block boundaries?

Default number of reducers

Что касается ваших вопросов:

Q1) Можно ли сценарий?

Да. Возможное.

Q3) Если да, то каково будет счетчик слов.

Данные в блоке-2 будут скопированы на узле Mapper, который обрабатывает InputSplit.

Update:

касается другого запроса в комментарии, посмотрите на строку ниже с Hadoop: Полное руководство

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

В отсутствие удаленного чтения ваш блок HDFS является InputSplit в узле Mapper. Если запись пересекает границы узлов Mapper, удаленное чтение будет извлекать данные на первый узел Mapper, где присутствует большая часть данных.

+0

В некоторой степени я понял, что вход-разделение является логическим представлением, а его размер по умолчанию - ваш размер блока, то есть 64 МБ. но как он будет размещать данные (которые были в других блоках) из других блоков, если он (вход-разделение 1) завершил 64 МБ пространства, будет ли он автоматически увеличивать размер входных разрывов? – user3676578

+0

Размер InputSplit будет увеличен, и данные будут загружены в ОЗУ узла Mapper. –

+0

Но узел Mapper ничего не знает о другом узле данных, тогда как он получит данные из другого узла Mapper, которые находятся в ОЗУ? Извините, но я не могу создать картинку в своем уме. – user3676578