There are some frequent patterns used across map-reduce.

Synchronization within MapReduce occurs during shuffle/sort stage of intermediate key-value pairs which are copied from mappers to reducers, grouped by key.

Many algorithms cannot easily be expressed as a single MapReduce job - need to decompose into a sequence of jobs.

We want MapReduce algorithms to be scalable (i.e. can deal with larger datasets) and efficient (no waste of resources) - linear scalability is ideal.

Local Aggregation (In-mapper combining)

Pairs & Stripes