Like any other programming model,
MapReduce needs an algorithm-design
theory. The theory is not just the
theory of parallel algorithms—MapReduce
requires we coordinate parallel
processes in a very specific way. A MapReduce
job consists of two functions
written by the programmer, plus some
magic that happens in the middle