MapReduce is an architectural approach to solving concurrent processing problems by breaking apart the mapping and reduction opperations. The advantage over sequential algorithms by scaling out the number of concurrent executors, either by utilizing more cores on a given machine or by distributing the work into a cluster. At the core there are two application extensiable portions: the map operation, and the reduce operation.
In order to exploit the maximum parallelization of the system, map operations should be purely functional. However, depending on the underlying MapReduce framework this may not be a strict requirement. The reduction operation is responible for digesting the resulting values of the map operation, coalescing the data into the desired output of the operations.