using 64MB and 128MB. For example, for a given input data size of 5GB, we executed the benchmark 20 times (10\*2, where 10 is from the various value of $M_{sel}$, and 2 is from values of $B_{size}$). As shown in Figure \[phaseprofile\], there are three main steps involved in the generic benchmarking setup. First, we modified the MapReduce 3.0 source code and added the necessary codes to obtain the running times of each stage. Since MapReduce uses counters to present task and job-related statistics to the user, we added six new counters to represent the six generic phases.

![**A Phase Profiling Pipeline Methodology**[]{data-label="phaseprofile"}](images/phaseprofiler){width="40.00000%" height="1.5cm"}

The Mapper $interface$ has a logic in the $run()$ function that adheres to the map selectivity setting. The reduce function outputs the entire shuffled data. To implement the logic of map selectivity, we used the *Teragen* program provided by the MapReduce framework to generate the dataset. Each row generated by Teragen has a size of 100 bytes. Therefore, to process only 10% of a 500MB input, we invoked Teragen to generate \[(500MB to Bytes) /100\] rows, and we override the $run()$ function of MapReduce interface to stop after the map had processed the 10% threshold. As 