Пример потоковой передачи Hadoop 'cat' и 'wc' --- как на самом деле работают преобразователь 'cat' и редуктор 'wc'

У меня вопрос такой. 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. Mapper, как я понимаю, получает в качестве входных данных пару (ключ, значение). В случае вышеупомянутых двух строк, что будет ключом, а что будет значением.
  2. Функция картографирования - "кошка". Будет ли 'cat' действовать на ключевую часть маппера или на часть значения маппера.
  3. Что будет выводом маппера, если на входе будут только две вышеуказанные строки. Что было бы "ключом" и что было бы "ценностью"?
  4. Редуктор получит эти (ключ, значение) пары. Функция редуктора - "wc". Как бы "wc" узнал, действовать ли "ключ" или "значение" этого кортежа?

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

Благодарю.

1 ответ

Решение

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

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

Картографы действуют как на ключи, так и на значения

Я полагаю, что выходные данные маппера будут одинаковыми или, по крайней мере, просто (null, line) для каждой строки.

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

Другие вопросы по тегам