1. A method comprising steps of: partitioning input data into one or more sized items of input data associated with a MapReduce job, wherein said partitioning comprises changing the size of the input data based on an execution duration associated with the MapReduce job, wherein said changing comprises (i) increasing the size of the input data if said execution duration is less than a given threshold and (ii) decreasing the size of the input data if said execution duration is greater than the given threshold, and wherein said partitioning comprises ensuring that the number of input data items having a size below a given size is less than a predetermined threshold number; determining a total number of mapper components, and a total number of reducer components for the MapReduce job based on said partitioning; dynamically determining an allocation of resources to each of the total number of mapper components and total number of reducer components during run-time of the MapReduce job, wherein said dynamically determining the allocation of resources comprises (i) monitoring one or more utilization parameters for each of the total number of mapper components and total number of reducer components during run-time of the MapReduce job, (ii) characterizing a type of bottleneck from among multiple types of bottlenecks based on said monitoring, and (iii) dynamically determining the allocation of resources based at least on the type of bottleneck; and dynamically determining a number of concurrently executing mapper components and reducer components from the total number of mapper components and the total number of reducer components for the MapReduce job; wherein said steps are carried out by at least one computing device.