Я знаю, как работает уменьшение карты и какие шаги у меня есть:
Конечно, у меня есть Partitioning, Combiners, но сейчас это не важно.
Интересно то, что когда я запускаю задания по уменьшению карты, похоже, что мапперы и редукторы работают параллельно:
Так что я не понимаю, как это возможно.
Вопрос 1. Если у меня есть несколько узлов, которые выполняют операцию сопоставления, как редюсер может начать работать? Потому что Редуктор не может начать работать без сортировки, верно? (ввод должен быть отсортирован для Reducer — если маппер все еще работает, ввод не может быть отсортирован).
Вопрос 2. Если у меня есть несколько редукторов, как окончательные данные будут объединены? Другими словами, окончательные результаты должны быть отсортированы правильно? Это означает, что мы тратим дополнительное время O ( n * Log n) для слияния «несколько результатов редуктора?»
если несколько редьюсеров завершили задачу, у них могут быть одинаковые ключи в результате, верно? Таким образом, окончательный результат должен быть объединен. Например, если я пытаюсь найти «среднюю зарплату» и у меня есть 2 редуктора, в конце концов я должен объединить результат, иначе у меня будут разные результаты в разных выходных данных редуктора. В этом случае мне нужно отсортировать, чтобы найти похожие ключи (сгруппировать похожие ключи).
Редьюсер, который обрабатывает каждый ключ, уникален: «Необходимо, чтобы для любого ключа, независимо от того, какой экземпляр маппера его сгенерировал, раздел назначения был одним и тем же. Если ключ «кошка» генерируется в двух отдельных (ключ, значение) парах , они оба должны быть уменьшены вместе». источник
Редьюсеры могут начать копировать результаты картографов, как только они станут доступны. Он называется фаза копирования задачи сокращения (см. Полное руководство по Hadoop, глава 7 «Как работает MapReduce»).
Также оттуда:
...When all the map outputs have been copied, the reduce task moves into the sort phase (which should properly be called the merge phase, as the sorting was carried out on the map side), which merges the map outputs, maintaining their sort ordering. This is done in rounds...
И, конечно же, помните, что Hadoop также является MPP, а это значит, что он может обрабатывать их в массовом параллельном процессе. Без обид, но вроде забавный вопрос. Потому что, если бы Hadoop этого не делал, я думаю, это было бы не так полезно для компаний.
@KenrySanchez Не уверен, почему этот вопрос может быть забавным, может быть, вы не полностью его поняли. Отдельно я считаю, что Hadoop — это классический пример кластерной архитектуры, а не MPP. Если вы находите это запутанным, проверьте, например, stackoverflow.com/questions/5570936/….
не волнуйтесь, это без обид ;). Я понимаю архитектуру Hadoop. Но, как я уже говорил им ранее. В профессиональной среде компании вам необходимо обрабатывать большие объемы данных, и даже этот Hadoop должен работать в кластере (даже с 1 мастером и двумя убийцами). Настоящая сила приходит с MPP. Кластер — это просто способ обновления производственной мощности, в данном случае горизонтально масштабируемого. Но на самом деле вы правы, это классический пример кластерной архитектуры.
Что касается вашего второго вопроса, почему вы ожидаете, что результаты будут отсортированы?