Стратегия выполнения
Потенциально серьезная проблема производительности MR связана с управлением передачей данных от заданий Map к заданиям Reduce. Напомним, что каждый из N экземпляров MAP производит M выходных файлов, каждый из которых предназначен для соответствующего отдельного экземпляра Reduce. Эти файлы записываются на локальные диски в узлах, в которых выполняется каждый экземпляр Map. Если N = 1000, а M = 500, то на фазе Map данной программы будет произведено 500000 локальных файлов. Когда начинается фаза Reduce, каждому из 500 экземпляров Reduce требуется прочитать свою тысячу входных файлов, и при этом необходимо использовать протокол передачи файлов для «вытаскивания» (pull) каждого из своих входных файлов из узлов, на которых выполнялись экземпляры Map. При наличии сотен одновременно выполняющихся экземпляров Reduce неизбежно два или большее число этих экземпляров будут пытаться одновременно прочитать свои входные файлы с одного и того же узла Map, что приведет к большому числу подводов головок и замедлит скорость чтения данных с диска. Именно поэтому в параллельных системах баз данных разделенные файлы не материализуются, и вместо подхода «вытаскивания» для передачи данных используется подход «проталкивания» (push).