1. A method comprising: analyzing (i) a distinct pre-determined amount of memory allocation attributed to each task from a first sub-set of multiple tasks of a currently-executing MapReduce job and (ii) a distinct amount of data utilized by each task from the first sub-set of the multiple tasks; determining the optimal memory allocation among the first sub-set of the multiple tasks based on said analyzing, wherein said memory size minimizes a cost function related to said memory allocation and said amount of data utilized; performing a task-wise performance comparison among a second sub-set of the multiple tasks of the MapReduce job using the optimal memory size allocation among the first sub-set of the multiple tasks to generate a set of memory allocation results; and dynamically applying the set of memory allocation results to the remaining tasks of the currently-executing MapReduce job during execution of the MapReduce job; wherein said analyzing, said determining, said performing, and said applying are carried out by at least one computing device.