Vad är MapReduce i Hadoop? ArchiStruktur och diagram

⚡ Smart sammanfattning

MapReduce är Hadoop-programmeringsmodellen som omvandlar en stor datamängd till ett litet resultat genom att köra en map-funktion över varje indatadelning och sedan en reduce-funktion över de grupperade mellanvärdena.

  • 🔘 Fyra faser: Varje jobb körs som delning, mappningping, blandning och reducering, med nyckel-värde-par som flyter mellan varje steg.
  • ☑️ Utarbetat exempel: Tre textrader blir sju ord, vilket visar exakt vad varje fas bidrar med.
  • Delad storlek: En mappningsuppgift körs per indatadelning, och delningsstorleken matchar normalt HDFS-blockstorleken.
  • 🧪 Mellanliggande data: Kartutdata skrivs till lokal disk snarare än HDFS, eftersom replikering av engångsdata är slöseri.
  • 🛠️ Samordning: Ett jobbTracker schemalägger arbete och uppgifterTracPatienter rapporterar framsteg genom periodiska hjärtslagssignaler.
  • ⚠️ Versionsnotering: YARN ersatte det paret med en ResourceManager, NodeManagers och en ApplicationMaster per jobb från Hadoop 2.x.

MapReduce-arkitekturen i Hadoop förklarad med ett exempel

Vad är MapReduce i Hadoop?

MapReduce är ett programramverk och en programmeringsmodell som används för att bearbeta stora mängder data. MapReduce-program fungerar i två faser, nämligen Map och Reduce. Map-uppgifter hanterar delning och mappningping av data medan Reduce uppgifter blandas och minskar datan.

Hadoop kan köra MapReduce-program skrivna på olika språk: JavaRubin, Pythonoch C++MapReduce-program är parallella till sin natur, så de är mycket användbara för att utföra storskalig dataanalys med flera maskiner i klustret.

Indata till varje fas är nyckel-värdepar. Dessutom behöver varje programmerare specificera två funktioner: en mappningsfunktion och en reduceringsfunktion.

MapReduce ArchiTecture i Big Data förklaras med exempel

Hela processen går igenom fyra faser av exekvering, nämligen delning, mappningping, blandning och reducering.

I den här MapReduce-handledningen ska vi förstå det med ett MapReduce-exempel.

Anta att du har följande indata för din MapReduce i Stora data program:

Welcome to Hadoop Class
Hadoop is good
Hadoop is bad

Diagrammet nedan tracgår dessa tre linjer genom varje fas, från ingångsdelningarna till vänster till de slutliga ordantalarna till höger.

MapReduce-arkitekturdiagram tractre inmatningslinjer genom delning, mappningping, blandning och reducering

Det slutliga resultatet av MapReduce-uppgiften är

illa 1
Klass 1
god 1
Hadoop 3
is 2
till 1
Välkommen 1

Datan går igenom följande faser av MapReduce inom Big Data.

Ingångsdelningar

Indata till ett MapReduce-jobb i Big Data är uppdelat i bitar med fast storlek som kallas indatadelningar. En indatadelning är en del av indatan som förbrukas av en enda karta.

Kartaping

Detta är den allra första fasen i utförandet av ett MapReduce-program. I denna fas skickas data i varje del till en karta.ping funktion för att producera utdatavärden. I vårt exempel är kartans jobbping fasen är att räkna antalet förekomster av varje ord från inmatningsuppdelningarna (mer information om inmatningsuppdelningar ges nedan) och förbereda en lista i form av .

blanda

Denna fas förbrukar kartans utdataping fas. Dess uppgift är att konsolidera relevanta poster från kartanping fasutgång. I vårt exempel är samma ord klubbade tillsammans tillsammans med deras respektive frekvens.

Minska

I den här fasen aggregeras utdatavärdena från blandningsfasen. Denna fas kombinerar värden från blandningsfasen och returnerar ett enda utdatavärde. Kort sagt sammanfattar denna fas hela datamängden.

I vårt exempel aggregerar den här fasen värdena från blandningsfasen, dvs. den beräknar det totala antalet förekomster av varje ord.

MapReduce ArchiTecture förklaras i detalj

Punkterna nedan förklarar hur delningar, mappningsuppgifter och reduceringsuppgifter faktiskt placeras och lagras i klustret.

  • En mappningsuppgift skapas för varje delning, som sedan kör mappningsfunktionen för varje post i delningen.
  • Det är alltid fördelaktigt att ha flera delningar eftersom tiden det tar att bearbeta en del är kort jämfört med tiden det tar att bearbeta hela indata. När delningarna är mindre blir bearbetningen bättre belastningsbalanserad, eftersom de bearbetas parallellt.
  • Det är dock inte heller önskvärt att ha för små delningar. När delningarna är för små börjar kostnaden för att hantera delningarna och skapa kartuppgifter dominera den totala körtiden för jobbet.
  • För de flesta jobb är det bättre att göra delningsstorleken lika med storleken på en HDFS blocket, som standard är 128 MB från och med Hadoop 2.x (det var 64 MB i Hadoop 1.x) och styrs av dfs.blocksize fast egendom.
  • Körning av mappningsuppgifter resulterar i att utdata skrivs till en lokal disk på respektive nod, och inte till HDFS.
  • Anledningen till att välja lokal disk framför HDFS är att undvika replikeringen som sker under en HDFS-lagringsoperation.
  • Kartutdata är mellanutdata som bearbetas av reduceringsuppgifter för att producera den slutliga utdata.
  • När jobbet är klart kan kartutdata slängas. Så att lagra det i HDFS med replikering blir överdrivet.
  • I händelse av nodfel, innan kartutmatningen förbrukas av reduceringsuppgiften, kör Hadoop kartuppgiften igen på en annan nod och återskapar kartutdatan.
  • Reduce-uppgifter fungerar inte med konceptet datalokalitet. Utdata från varje kartuppgift matas till reduce-uppgiften. Kartutdata överförs till den maskin där reduce-uppgiften körs.
  • På den här maskinen slås utdata samman och skickas sedan till den användardefinierade reduceringsfunktionen.
  • Till skillnad från mappningsutdata lagras reduce-utdata i HDFS (den första repliken lagras på den lokala noden och andra repliker lagras på off-rack-noder). Så att skriva reduce-utdata förbrukar nätverksbandbredd, men bara lika mycket som en vanlig HDFS-skrivpipeline förbrukar.

Hur fungerar MapReduce Organizes?

I den här MapReduce-handledningen ska vi lära oss hur MapReduce fungerar.

Hadoop delar upp jobbet i uppgifter. Det finns två typer av uppgifter:

  1. Kartuppgifter (Delar och kartor)ping)
  2. Minska uppgifter (blanda, minska)

Hela exekveringsprocessen, det vill säga exekveringen av både Map- och Reduce-uppgifterna, styrs av två typer av entiteter som kallas:

  1. JobbTracker: agerar som en mästare och ansvarar för att ett inskickat jobb utförs fullständigt.
  2. Flera uppgifterTrackers: agerar som slavar, var och en av dem utför en del av jobbet.

För varje jobb som skickas in för körning i systemet finns det ett jobb.Tracker som finns på NameNode, och det finns flera TaskTrackers som finns på DataNodes.

Obs: jobbetTracker och uppgiftTracker-paret tillhör MapReduce version 1 (Hadoop 1.x). Från och med Hadoop 2.x delar YARN upp dessa uppgifter mellan en klusteromfattande ResourceManager, en NodeManager på varje nod och en ApplicationMaster per jobb, även om själva mappnings-, shuffle- och reduceringsfaserna är oförändrade.

Diagrammet nedan visar hur ett inskickat jobb är uppdelat i uppgifter och tracsprang över klustret.

Diagram som visar ett jobb uppdelat i kart- och reduceringsuppgifter tracked av JobbetTracker och uppgiftTrackörsbär

  • Ett jobb delas upp i flera uppgifter som sedan körs på flera datanoder i ett kluster.
  • Det är jobbets ansvar tracker för att koordinera aktiviteten genom att schemalägga uppgifter att köras på olika datanoder.
  • Utförandet av en enskild uppgift hanteras sedan av uppgiften tracker, som finns på varje datanod som kör en del av jobbet.
  • Uppgiften tracarbetsgivarens ansvar är att skicka lägesrapporten till arbetsgivaren tracker.
  • Dessutom uppgiften tracker skickar regelbundet en "hjärtslagssignal" till JobTracför att meddela den om systemets aktuella tillstånd.
  • Således jobbet tracker håller track av den totala utvecklingen för varje jobb. Om uppgiften misslyckas, jobbet tracker kan omplanera det på en annan uppgift tracker.

Vanliga frågor

YARN gjorde det, från och med Hadoop 2.x. En klusteromfattande ResourceManager hanterar schemaläggning, en NodeManager körs på varje nod och en ApplicationMaster per jobb. tracks dess uppgifter. Kartläggnings- och reduceringsfaserna är oförändrade.

Modeller som tränats på tidigare jobbhistorik förutspår körtid, rekommenderar delningsstorlekar och reducerarantal och upptäcker skevhet tidigt. De övervakar även räknarvärden och flaggar ovanligt långsamma eller misslyckade jobb innan en körning är klar.

Copilot hanterar stöttningen väl: mapper- och reducer-signaturer, generiska produkter, importer och drivrutinskonfigurationsanrop. Schemabeslut, såsom vilket fält som är gruppenping nyckel, behöver fortfarande en utvecklare som känner till data.

En vanlig utgångspunkt är något under antalet tillgängliga reducer-platser, så varje reducer körs i en våg. För få skapar långa svansar; för många producerar många små utdatafiler.

En kombinerare är en valfri mini-reducerare som körs på kartutgången innan den korsar nätverket. Den minskar shuffle-trafiken kraftigt, men den kan bara användas när reduce-operationen är både associativ och kommutativ.

Spark lagrar mellanresultat i minnet och uttrycker ett jobb som en riktad graf över steg, medan MapReduce skriver mellanliggande utdata till disk mellan faser. Spark är därför mycket snabbare för iterativt arbete.

Partitioneraren bestämmer vilken reducer som tar emot varje mellanliggande nyckel, och hashar som standard nyckeln modulo reducerantalet. En anpassad hash skrivs när den hashen lämnar en enskild reducer överbelastad.

Hadoop skapar en mappningsuppgift per inmatningsdelning, och en delning är ett byteintervall snarare än en hel fil. En stor fil ger många delningar; många små filer ger små, ineffektiva mappningsuppgifter.

Sammanfatta detta inlägg med: