Video: Create and Execute MapReduce in Eclipse 2024
Hur HDFS har konfigurerats bryts ned mycket stora filer i stora block (till exempel, mäter 128 MB) och lagrar tre kopior av dessa block på olika noder i klustret. HDFS har ingen medvetenhet om innehållet i dessa filer.
I YARN, när ett MapReduce-jobb startas, resurshanteraren (klusterresurshanteringen och arbetsplaneringsfaciliteten) skapar en applikationsmastermonemon för att se efter livscykeln för jobbet. (I Hadoop 1 övervakade JobTracker enskilda jobb samt hantering av arbetsplanering och clusterresurshantering.)
Nyckeln till effektiv MapReduce-behandling är att så långt som möjligt bearbetas data lokalt - på slavnodet där den lagras. Innan du tittar på hur datablocken behandlas måste du titta närmare på hur Hadoop lagrar data. I Hadoop består filerna av enskilda poster, som i slutänden behandlas en-för-en av mapperuppgifter.
Exempelvis innehåller provdatasatsen information om färdiga flygningar i USA mellan 1987 och 2008.
Du har en stor fil för varje år, och inom varje fil representerar varje enskild linje en enda flygning. Med andra ord representerar en rad en post. Kom ihåg att blockstorleken för Hadoop-klustret är 64 MB, vilket innebär att de lätta datafilerna är brutna i bitar av exakt 64 MB.
Ser du problemet? Om varje kartuppgift behandlar alla poster i ett visst datablock, vad händer med de poster som spänner över blockgränser? Filblock är exakt 64 MB (eller vad du än bestämmer blockstorleken för), och eftersom HDFS inte har någon uppfattning om vad som finns i filblocken, kan det inte mäta när en skiva kan springa över i ett annat block.
För att lösa detta problem använder Hadoop en logisk representation av data lagrad i filblock, känd som
ingångsavsnitt . När en MapReduce-jobbklient beräknar ingångssplittningarna, räknas det ut var den första hela posten i ett block börjar och där den sista posten i blocket slutar. I de fall då den sista posten i ett block är ofullständig innehåller ingångssplitten platsinformation för nästa block och byteförskjutningen av de data som behövs för att slutföra posten.
Figuren visar detta samband mellan datablock och ingångsavsnitt.
Du kan konfigurera Application Master daemon (eller JobTracker, om du befinner dig i Hadoop 1) för att beräkna inmatningsavsnittet istället för jobbet klienten, vilket skulle vara snabbare för jobb som bearbetar ett stort antal datablock.
MapReduce databehandling drivs av detta koncept av ingångsavsnitt. Antalet ingångsavsnitt som beräknas för en specifik applikation bestämmer antalet mapparuppgifter. Var och en av dessa mapperuppgifter tilldelas, om möjligt, en slavnod där ingångsspliten lagras. Resurshanteraren (eller JobTracker, om du befinner dig i Hadoop 1) gör sitt bästa för att försäkra dig om att ingångssplittringar behandlas lokalt.