MapReduce отличается от большинства систем «разделяй и властвуй» довольно фундаментально, но это настолько просто, что многие люди почти упускают это. Настоящий гений в том, чтобы пометить промежуточные результаты.
В типичной (предыдущей) системе «разделяй и властвуй» вы разделяете работу последовательно, выполняете рабочие пакеты параллельно, а затем снова последовательно объединяете результаты этой работы.
В MapReduce вы разделяете работу последовательно, выполняете рабочие пакеты параллельно и помечаете результаты, чтобы указать, какие результаты соответствуют каким другим. Затем объединение выполняется последовательно для всех результатов с одним и тем же тегом, но может выполняться параллельно для результатов с разными тегами.
В большинстве предыдущих систем этап слияния стал узким местом для всех, кроме самых поистине тривиальных задач. С MapReduce все еще может быть, если природа задач требует, чтобы все слияния выполнялись последовательно. Если, однако, задача допускает некоторую степень параллельного объединения результатов, то MapReduce предоставляет простой способ воспользоваться этой возможностью. Большинство других систем выполняют одно из двух: либо выполняют все слияния последовательно только потому, что это может быть необходимо для некоторых задач, либо статически определяют параллельное слияние для конкретной задачи. MapReduce предоставляет вам достаточно данных на этапе слияния, чтобы автоматически планировать как можно большее количество параллелей, при этом гарантируя (при условии, что вы не допустили ошибок на этапе сопоставления), что согласованность сохраняется.
Также обратите внимание, что в MapReduce подразумевается, что все шаги могут быть рекурсивными, поэтому у меня может быть начальный шаг отображения, который разбивает большую задачу на 5 меньших задач, которые могут выполняться параллельно - но каждая из них может (в включите) привязаться к ряду других меньших параллельных задач и так далее.
Это приводит к древовидной структуре как на картографической, так и на сокращающей сторонах, что позволяет быстро разбить большую задачу на достаточное количество частей, чтобы воспользоваться преимуществами множества машин.