Пример потоковой передачи Hadoop 'cat' и 'wc' - как на самом деле работают преобразователь 'cat' и редуктор 'wc' - PullRequest
0 голосов
/ 22 сентября 2018

Мой вопрос такой.Apache Hadoop, в его документации упоминается один следующий пример кода для потоковой передачи hadoop:

$HADOOP_HOME/bin/hadoop  jar $HADOOP_HOME/hadoop-streaming.jar \
-input myInputDirs \
-output myOutputDir \
-mapper /bin/cat \
-reducer /bin/wc

Теперь я передаю текстовый файл этому стримеру.Допустим, текстовый файл содержит только две следующие строки:

This is line1
It becomes line2

Команда hadoop streaming работает отлично и проблем нет.

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

  1. Модуль сопоставления, как я понимаю, получает пару (ключ, значение) в качестве входных данных.В случае двух приведенных выше строк, что будет ключом, а что будет значением.
  2. Функция Mapper - это 'cat'.Будет ли 'cat' действовать на ключевую часть маппера или на часть значения маппера.
  3. Каким будет вывод маппера, если на входе находятся только две вышеуказанные строки.Что будет «ключом», а что будет «значением».
  4. Редуктор получит эти пары (ключ, значение).Функция редуктора - «wc».Как бы «wc» узнал, действовать ли «ключ» или «ценность» этого кортежа.

Я понимаю, что это очень простые вопросы, но я снова и снова застреваю, чтобы получитьправильный ответ.Буду благодарен за помощь.

Спасибо.

1 Ответ

0 голосов
/ 23 сентября 2018

В случае двух приведенных выше строк, что будет ключом, а что будет значением.

Ключ - это смещение линии.Значением является весь текст строки

Мапперы действуют как на ключи, так и на значения

Вывод маппера будет таким же, я полагаю, или, по крайней мере, просто (ноль, строка), длякаждая строка

wc будет работать с каждым уникальным ключом, поэтому, если в качестве выходных данных вы получите только один результат, то вероятнее всего будет (null, ["this line one", "it becomes line2"]), и список значений будет подсчитан

...