MapReduce.

-   An understanding of how MapReduce applications of different design patterns perform.

Background: The MapReduce Pattern  {#background}
==================================

MapReduce [@dean2008mapreduce] initiated by researchers from Google \[mrcompattern\] is one of the most prevalent patterns in big data processing. The open-source community then created an open-source version of MapReduce known as Hadoop MapReduce. MapReduce 2.0 uses YARN [@vavilapalli2013apache] (Yet Another Resource Negotiator) for cluster resource management. In the context of YARN, a container is as a logical unit of computation assigned with CPU and memory where individual MapReduce tasks of an application are executed. They run on nodes and are managed by a Node Manager process. The node manager sends periodic reports of task progress to Application Master which monitors and manages the entire application progress. After a successful resource allocation by YARN’s Resource Manager, the MapReduce execution starts by first reading data read from HDFS [@borthakur2008hdfs] and fed to mappers for processing. The mappers then write their intermediate results to disk. If a reducer is defined, these results are shuffled and processed by the reducers, and the final results are written to the disk. As shown in Figure \[mrpattern\], the time taken by a job depends on the execution of 