sql >> Databasteknik >  >> RDS >> Database

Hur MapReduce fungerar i Hadoop

MapReduce var en modell som introducerades av Google som en metod för att lösa en klass av Big Data-problem med stora kluster av billiga maskiner. Hadoop absorberar denna modell i kärnan av dess arbetsprocess. Den här artikeln ger en inledande idé om MapReduce-modellen som används av Hadoop för att lösa Big Data-problemet.

Översikt

En typisk Big Data-applikation hanterar en stor uppsättning skalbar data. Att använda en enda databas för att lagra och hämta kan vara en stor bearbetningsflaskhals. Detta gäller särskilt om vi använder en monolitisk databas för att lagra en enorm mängd data som vi kan se med relationsdatabaser och hur de används som ett enda arkiv. Detta kommer inte att fungera, speciellt vi måste hantera stora datamängder i en distribuerad miljö.

Google använde MapReduce-algoritmen för att ta itu med situationen och kom fram till en lösning. Tanken är att dela upp den större uppgiften i mindre hanterbara delar och fördela dem över datorer i nätverket för bearbetning. Det sålunda erhållna resultatet integreras för att bilda den slutliga datamängden. Denna idé blev basen för Doug Cuttings Hadoop-projekt. Hadoop använder denna algoritm för att bearbeta data parallellt med andra för att leverera en komplett statistisk analys av stora datamängder. Därför kan Hadoop grovt delas upp i två delar:

  • Bearbetar: Utnyttjas av MapReduce-algoritmen
  • Lagring: Utnyttjas av HDFS

Hadoop MapReduce är alltså en implementering av algoritmen som utvecklats och underhålls av Apache Hadoop-projektet. Den fungerar som en maskin i sig själv där vi ger input och motorn svarar genom att omvandla input till output snabbt och effektivt, bearbetning genom flera steg. Denna uppenbart förenklade idé behöver utarbetas lite eftersom den följer med.

MapReduce

MapReduce är en parallell programmeringsmodell som används för snabb databehandling i en distribuerad applikationsmiljö. Det fungerar på datamängder (multi-terabyte data) fördelade över kluster (tusentals noder) i råvaruhårdvarunätverket. MapReduce-program körs på Hadoop och kan skrivas på flera språk – Java, C++, Python och Ruby. De huvudsakliga egenskaperna hos MapReduce-programmet är att det i sig har ingjutit en anda av parallellism i programmen. Detta gör den idealisk för storskalig dataanalys som kan utnyttja modellen för parallellism i sin praktik för att pressa resultat mer effektivt och snabbare ur en befintlig infrastruktur.

Hur det fungerar

Hadoop MapReduce delar upp uppgifterna i flera steg, var och en med en betydande uppsättning funktioner för att extrahera önskat resultat från Big Data. Det fungerar på noder i ett kluster på en samling råvaruservrar. Processen börjar med användarförfrågan som kör MapReduce-motorn och slutar med att resultatet lagras tillbaka till HDFS.

Vi kan initiera ett MapReduce-jobb att köra genom att anropa JobClient.runJob(conf) metod. Detta är en bekväm metod för att skapa en ny JobClient exempel. Detta anropar i sin tur submitJob() och granskar jobbets framsteg varje sekund och rapporterar tillbaka till konsolen om det är någon förändring sedan den senaste rapporten genererades. Detta har en krusningseffekt och utlöser en uppsättning operationer bakom kulisserna. Det första steget är att hitta och läsa indatafilen som innehåller rådata. Filformatet är godtyckligt och måste konverteras till ett format som passar för bearbetning. Det här är jobbet för InputFormat och RecordReader(RR) . InputFormat använder funktionen som heter InputSplit för att dela upp filen i mindre delar. RecorReader(RR) omvandlar sedan rådata och gör den tillgänglig för bearbetning av karta .

Mappning

När data är godtagbara att mappa, skapar den en distinkt instans för varje ingångspar (nyckel och värde) och börjar bearbeta. Så snart mappningsfunktionen börjar producera utdata skrivs den inte direkt till disken; istället lagras den i minnesbufferten för att göra en viss försortering. Varje karta har en cirkulär buffert där den omdirigerar utdata. Vid överskridande av tröskelstorleken skrivs innehållsspillet tillbaka till disken. Den delar vidare upp data i partitioner som är acceptabla för reduceraren till vilken data omdirigeras härnäst. Alla dessa arbeten äger dock rum på ett samtidigt sätt på flera noder i Hadoop-klustret. Efter att kartuppgifterna har slutförts ackumuleras mellanresultaten i partitionen, och blandning och sortering sker för att optimera utdata för att reducera ska ta över som indata.

Minska och slå samman

Det som reducerar får är också ett nyckel-, värdepar och fungerar på ett liknande sätt som kartan. Den samlar kartutdata från flera kartuppgifter över klustret och börjar bearbetas först efter att kartläggningen är klar. Den har en uppsättning kopiatortrådar för att slå samman och överföra utdata från kartan till skivan. När kopior ackumuleras på disk gör en bakgrundstråd jobbet med att slå samman dem till större, sorterade filer. Den tillhandahåller också utdata i form av en nyckel, ett värdepar och kan behöva formateras om av OutputFormat innan ansökan kan acceptera formatet. OutputFormat tar slutligen nyckeln, värdeparet och skriver tillbaka den bearbetade datan till HDFS. Här, RecordWriter spelar huvudrollen, ungefär som RecordReader , förutom att den deltar under läsning från HDFS i början.

Slutsats

Det här är bara toppen av isberget. Det finns många intrikata detaljer och mycket mer händer bakom kulisserna. Kort sagt ger Hadoop MapReduce möjligheterna att dela upp Big Data i mindre, hanterbara delar, bearbeta dem parallellt på ett distribuerat kluster och slutligen göra data tillgänglig för konsumtion eller ytterligare bearbetning. Hadoop har idag vuxit till att bli ett större ekosystem av verktyg och teknologier för att lösa ålderdomliga Big Data-problem och utvecklas snabbt för att förfina sina funktioner.


  1. Hur CTE kan hjälpa till att skriva komplexa, kraftfulla frågor:ett prestationsperspektiv

  2. Skapa trigger för att logga SQL som påverkade tabellen?

  3. Vad är det mest effektiva sättet att kontrollera om en post finns i Oracle?

  4. Heroku PostgreSQL GROUP_BY-fel i Rails-appen