MapReduce는 대부분의 분할 및 정복 시스템에서 상당히 근본적인 방식으로 분기되지만 많은 사람들이 거의 그리워하지 않는 간단한 시스템입니다. 그것의 진짜 천재는 중간 결과에 태그를 붙이는 것입니다.
일반적인 (이전) 분할 및 정복 시스템에서는 작업을 직렬로 분할하고 작업 패킷을 병렬로 실행 한 다음 해당 작업의 결과를 다시 직렬로 병합합니다.
MapReduce에서는 작업을 직렬로 나누고, 작업 패킷을 병렬로 실행하고, 결과에 태그를 지정하여 어떤 결과가 다른 결과와 관련되는지 표시합니다. 그런 다음 병합은 태그가 동일한 모든 결과에 대해 직렬이지만 태그가 다른 결과에 대해 병렬로 실행될 수 있습니다.
대부분의 이전 시스템에서 병합 단계는 가장 사소한 작업을 제외하고 병목 현상이되었습니다. 맵리 듀스로 그것은 할 수 있는 작업의 성격이 모두 병합이 연속적으로 수행 할 것을 요구하는 경우 여전히. 그러나 작업이 어느 정도의 병렬 결과 병합을 허용하는 경우 MapReduce는 이러한 가능성을 활용할 수있는 간단한 방법을 제공합니다. 대부분의 다른 시스템은 두 가지 중 하나를 수행합니다. 일부 작업에 필요할 수 있기 때문에 모든 병합을 순차적으로 실행 하거나 특정 작업에 대한 병렬 병합을 정적으로 정의합니다. MapReduce는 병합 단계에서 일관성을 유지하면서 (매핑 단계에서 실수를하지 않았다고 가정하면서) 가능한 한 많은 병렬로 자동 예약 할 수있는 충분한 데이터를 제공합니다.
또한 MapReduce에서는 모든 단계가 재귀 적 일 수 있음을 암시하므로 큰 작업을 병렬로 실행할 수있는 5 개의 작은 작업으로 나눌 수있는 초기 매핑 단계가있을 수 있습니다. turn) 다른 여러 병렬 작업에 매핑됩니다.
이로 인해 매핑 작업과 축소 측면 모두에 트리 구조가 생겨서 많은 작업을 충분히 수행 할 수 있도록 큰 작업을 신속하게 분할 할 수 있습니다.