если я правильно помню реализацию:
делается map в мэпере, результаты пишутся в буфер, буфер СОРТИРУЕТСЯ и кидается на диск
редьюсеры забирают данные с множества мэперов, соответственно это классический sorted merge по файлам получается и на одинаковые ключи вызывается функция reduce
имеется доп оптимизация когда можно первый раз применить функцию reduce ещё на стороне map
это снижает объем записываемых и передаваемых по сети данных