Пример потоковой передачи 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 работает отлично и проблем нет.
Но я не могу ответить на следующие вопросы, несмотря на то, что много раз читал выше связанные материалы и другие примеры в Интернете. Допустим, есть только один картограф и только один редуктор:
- Mapper, как я понимаю, получает в качестве входных данных пару (ключ, значение). В случае вышеупомянутых двух строк, что будет ключом, а что будет значением.
- Функция картографирования - "кошка". Будет ли 'cat' действовать на ключевую часть маппера или на часть значения маппера.
- Что будет выводом маппера, если на входе будут только две вышеуказанные строки. Что было бы "ключом" и что было бы "ценностью"?
- Редуктор получит эти (ключ, значение) пары. Функция редуктора - "wc". Как бы "wc" узнал, действовать ли "ключ" или "значение" этого кортежа?
Я понимаю, что это очень простые вопросы, но я снова и снова застреваю, чтобы получить правильный ответ. Буду благодарен за помощь.
Благодарю.
1 ответ
В случае вышеупомянутых двух строк, что будет ключом, а что будет значением.
Ключ - это смещение линии. Значение - весь текст строки
Картографы действуют как на ключи, так и на значения
Я полагаю, что выходные данные маппера будут одинаковыми или, по крайней мере, просто (null, line) для каждой строки.
wc
будет работать с каждым уникальным ключом, так что если вы получите только один результат в качестве вывода, то ввод был (null, ["this line one", "it becomes line2"])
и список значений считается