Video: Thorium. 2024
Efter Map-fasen och före början av Reduce-fasen är en handoff-process, känd som shuffle och Sortera . Här utarbetas data från mapparuppgifterna och flyttas till noder där reduktionsuppgifterna ska köras. När mapper-uppgiften är klar sorteras resultaten efter nyckel, partitioneras om det finns flera reducerare och sedan skrivs till disken.
Du kan se detta koncept i följande figur, som visar MapReduce-databehandlingsflödet och dess interaktion med Hadoop-klustrets fysiska komponenter. (En snabb anteckning: Data i minnet representeras av vita rutor och data lagrad på disken representeras av grå rutor.)
För att påskynda den övergripande MapReduce-processen, flyttas data omedelbart till noden för reduktionsuppgifterna, för att undvika en översvämning av nätverksaktivitet när den slutliga mapperuppgiften avslutar sitt arbete. Överföringen händer när mapper-uppgiften körs, eftersom utmatningarna för varje post - kom ihåg - sparas i minnet av en väntande reduceringsuppgift. (Du kan konfigurera om detta händer - eller inte händer - och även antalet trådar som berörs.)
Tänk på att även om en reduceringsuppgift kan ha större delen av mapparens uppgift, kan processens bearbetning inte minska tills alla mappuppgifter har slutförts.
För att undvika scenarier där prestanda för ett MapReduce-jobb hämmas av en omedelbar mapparuppgift som körs på en dåligt fungerande slavnod, använder MapReduce-ramen ett koncept som heter spekulativt utförande .
Om vissa mappordningar löper långsammare än vad som anses rimligt, kommer Application Master att hämta duplicera uppgifter (i Hadoop 1 gör JobTracker det här). Oavsett vilken uppgift som avslutas först - dubbletter eller original - dess resultat lagras på disken och den andra uppgiften dödas. Om du övervakar dina jobb noggrant och undrar varför det finns fler mapperuppgifter som löper än du förväntar dig, är det en sannolik anledning.
Utmatningen från mapper-uppgifter är inte skriven till HDFS, utan snarare till lokal disk på slavnoden där mapper-uppgiften kördes. Som sådan replikeras det inte över Hadoop-klustret.
Bortsett från att komprimera utmatningen kan du potentiellt öka prestanda genom att köra en kombinationsuppgift. Denna enkla taktik, som visas här, innebär att man utför en lokal minskning av utmatningen för individuella mapperuppgifter.
I de flesta fall behövs ingen extra programmering, eftersom du kan berätta för systemet att använda reduktionsfunktionen. Om du inte använder din reduktionsfunktion, måste du se till att kombinationsfunktionens utgång är identisk med reducerfunktionen.
Det är upp till MapReduce-ramen om kombinationsfunktionen behöver köras en gång, flera gånger eller aldrig, så det är viktigt att combinerens kod säkerställer att slutresultatet inte påverkas av flera körningar. Att köra kombinationsmaskinen kan ge en prestanda genom att minska mängden mellanliggande data som annars skulle behöva överföras över nätverket.
Detta sänker också mängden bearbetning som reduktionsarbetet skulle behöva göra. Du kör en extra uppgift här, så det är möjligt att eventuell prestationsökning är försumbar eller kan till och med resultera i sämre övergripande prestanda. Din körsträcka kan variera, varför prova detta noggrant.
När alla resultat av mapperuppgifterna har kopierats till noden för reduktionsuppgifterna slås dessa filer samman och sorteras.