1. A method comprising: utilizing at least one processor to execute computer code configured to perform the steps of: receiving a plurality of jobs, each job comprising at least a map phase, a copy/shuffle phase and a reduce phase; determining, for each job, a map phase execution time and a copy/shuffle phase execution time; classifying the plurality of jobs into one or more groups, wherein at least one group of the one or more groups comprises jobs having a greater map phase execution time than a copy/shuffle phase execution time and wherein at least another group of the one or more groups comprises jobs having a greater copy/shuffle phase execution time than map phase execution time; sorting the jobs classified within the at least one group and the jobs classified within the at least another group in ascending order of overall job execution time; and executing the map phase and the copy/shuffle phase of the jobs classified within the at least one group and the at least another group via processor sharing, wherein executing comprises allocating resources such that a resource capacity of each of the map phase and the copy shuffle phase is shared between the jobs classified within the at least one group and the at least another group, wherein allocating resources at the copy/shuffle phase further comprises allocating resources to a job such that a progress at the copy/shuffle phase of the job matches a progress at the map phase of the job, and wherein executing further comprises allocating the resources to each of the map phase and copy/shuffle phase so that a job having the smallest overall job execution time in each group is processed first.