Reduktionsfasen behandlar nycklar och deras individuella listor över värden så att det som normalt returneras till klientprogrammet är en uppsättning nyckel- / värdepar. Här är blås-by-blow: En stor datasats har delats upp i mindre bitar, kallad ingångsavsnitt, och enskilda instanser av mapperuppgifter har bearbetat var och en av dem.
I vissa fall är denna enda fas av bearbetning allt som behövs för att generera önskad applikationsutgång. Om du till exempel kör en grundläggande omvandlingsoperation på data - konverterar all text till stor boks, till exempel, eller extraherar nyckelramar från videofiler - är den enda fasen allt du behöver. (Detta är känt som ett map-only jobb, förresten.)
Men i många andra fall är jobbet bara halvt gjort när mapperuppgifterna har skrivit sin produktion. Den återstående uppgiften är att koka ner alla interimresultat till ett enda, enhetligt svar.
På samma sätt som mapper-uppgiften, som behandlar varje posten en-för-en, reducerar reduceraren varje nyckel individuellt. Normalt returnerar reduceraren ett enda nyckel / värdepar för varje nyckel som behandlas. Dessa nyckel / värdepar kan dock vara så expansiva eller så små som du behöver dem att vara.
När reduktionsuppgifterna är klara, returnerar var och en en resultatfil och lagrar den i HDFS (Hadoop Distributed File System). Såsom visas här replikerar HDFS-systemet automatiskt dessa resultat.
Om resurshanteraren (eller JobTracker om du använder Hadoop 1) försöker att fördela resurser till mapper-uppgifter för att säkerställa att ingångsavsnitt behandlas lokalt finns det ingen sådan strategi för reduktionsuppgifter. Det antas att mappar uppgiftsresultat uppsättningar måste överföras över nätverket för att bearbetas av reduktionsuppgifterna.
Det här är en rimlig implementering eftersom det med hundratals eller till och med tusentals mapparuppgifter inte finns något praktiskt sätt att reducera uppgifterna med samma prioritering av lokalisering.