1. A method of performing a large-scale data processing job, comprising: executing a plurality of processes on a plurality of interconnected processors, the plurality of processes including a plurality of map processes and a plurality of reduce processes; in each respective map process of the plurality of map processes: executing a map program to retrieve a sequence of input data blocks assigned to the respective map process and to apply a map function to each input data block in the sequence to produce the intermediate data; and storing the intermediate data in memory; and in each respective reduce process of the plurality of reduce processes: receiving a respective partition of the intermediate data assigned to the respective reduce process; and applying a reduce function to the respective partition of the intermediate data to produce output values; and in a first respective reduce process: receiving multiple distinct partitions of the intermediate data; and processing the multiple partitions one at a time in succession; and identifying the first respective reduce process as a reduce process that is delaying the data processing job while continuing to process intermediate data and, in response, dividing the intermediate data in a partition that is assigned to the first respective reduce process into a plurality of subpartitions and assigning at least one subpartition of the plurality of subpartitions to a reduce process that is not the first respective reduce process.