sql >> Databasteknik >  >> NoSQL >> HBase

Spekulativ exekvering i Hadoop MapReduce

I den här MapReduce-artikeln om spekulativ exekvering kommer du att utforska Hadoops spekulativa utförande i detalj. Du kommer att lära dig vad som är spekulativt utförande, vad är dess behov, hur vi kan aktivera och inaktivera det.

Artikeln förklarar också om det är fördelaktigt eller inte och hur det fungerar.

Vad är spekulativ avrättning i Hadoop?

MapReduce-modellen i Hadoop-ramverket delar upp jobben i oberoende uppgifter och kör dessa uppgifter parallellt för att minska den totala tiden för jobbutförande.

Detta gör jobbutförandet tidskänsligt för de långsamt körande uppgifterna eftersom endast en enda långsam uppgift kan göra hela jobbexekveringstiden längre än förväntat. När ett jobb består av tusentals eller hundratals uppgifter är möjligheten för de få svåra uppgifterna mycket verklig.

Uppgifterna kan vara långsamma på grund av olika orsaker, såsom felkonfiguration av programvara eller försämring av hårdvaran. Men orsaken som gör att jobbet går långsamt är svår att upptäcka eftersom uppgifterna fortfarande slutförs framgångsrikt, även om det tar längre tid än förväntat.

Hadoop-ramverket försöker inte diagnostisera eller fixa de långsamma uppgifterna. Ramverket försöker upptäcka uppgiften som kör långsammare än den förväntade hastigheten och startar en annan uppgift, vilket är en likvärdig uppgift som en backup.

Säkerhetskopieringsuppgiften är känd som den spekulativa uppgiften, och denna process är känd som spekulativ exekvering i Hadoop.

Vad är behovet av spekulativ avrättning i Hadoop?

I Hadoop-ramverket är indatafilen uppdelad i flera block, och dessa block lagrades på de olika noderna i Hadoop-klustret.

När MapReduce-jobbet skickas av klienten beräknar det antalet InputSplits och kör lika många mappare som antalet InputSplit. Dessa mappare (kartuppgifter) körs parallellt på DataNodes, där de delade data finns.

Tänk nu om de få DataNoderna i Hadoop-klustret inte utför uppgifterna lika snabbt som de andra DataNodes, antingen på grund av hårdvarufel eller nätverksproblem.

Så kartuppgifterna som körs på dessa DataNodes kommer att vara långsammare jämfört med kartuppgifterna som körs på de andra DataNodes. Reduceraren kan starta sin exekvering endast när mellanutgångarna för alla mappers är tillgängliga.

Således kommer de färre långsamma kartuppgifterna att fördröja exekveringen av Reducer.

Om Reducer körs på den långsammare noden kommer det också att fördröja den totala slutresultatet av jobbet.

Så för att skydda sig mot sådana långsamma uppgifter startar Hadoop-ramverket samma uppgift på den andra noden. Denna optimering av Hadoop-ramverket kallas det spekulativa utförandet av uppgiften.

Hur fungerar spekulativ exekvering i Hadoop?

Det spekulativa utförandet startar inte de två dubbla uppgifterna för varje oberoende uppgift i ett jobb ungefär samtidigt så att de kan tävla mot varandra. Om ramverket gör det skulle det leda till slöseri med klusterresurserna.

Istället för det spårar schemaläggaren förloppet för alla uppgifter av samma typ (såsom kartlägga och reducera) i ett jobb och startar endast spekulativa dubbletter för små proportioner som gick långsammare än genomsnittet.

När uppgiften har slutförts framgångsrikt dödades alla dubbla uppgifter som körs eftersom de inte längre behövdes.

Så, om den ursprungliga uppgiften slutförs före den spekulativa uppgiften, dödas den spekulativa uppgiften. Om den spekulativa uppgiften avslutas före den ursprungliga uppgiften, dödas originalet.

Observera att den spekulativa exekveringen är en optimering. Det är inte en funktion för att göra MapReduce-jobben mer tillförlitliga.

Hur konfigurerar man spekulativ körning i Hadoop?

Som standard är den spekulativa exekveringen aktiverad för kartuppgiften såväl som för reduceringsuppgifterna. Dess egenskaper ställs in i mapred-site.xml konfigurationsfil.

  • mapreduce.map.speculative :Om den här egenskapen är inställd på true, är den spekulativa exekveringen av kartuppgiften aktiverad. Som standard är det sant.
  • mapreduce.reduce.speculative :Om den här egenskapen är inställd på true, är den spekulativa exekveringen av reduceringsuppgiften aktiverad. Som standard är det sant.

Varför skulle du någonsin vilja stänga av spekulativ avrättning?

Huvudmålet med det spekulativa utförandet är att minska tiden för utförandet av jobb. Men detta kommer att ske på bekostnad av Hadoop-klustrets effektivitet.

På ett upptaget Hadoop-kluster kan detta minska den totala genomströmningen eftersom de redundanta uppgifterna exekveras för att minska exekveringstiden för det enskilda jobbet.

På grund av denna anledning stänger vissa klusteradministratörer av den spekulativa körningen på Hadoop-klustret och låter användare uttryckligen aktivera det för de enskilda jobben.

Vi kan stänga av det för reduceringsuppgifterna eftersom alla dubbletter av reduceringsuppgifter kräver att man hämtar samma mappar-utdata som den ursprungliga uppgiften, vilket avsevärt kommer att öka nätverkstrafiken i klustret.

Är spekulativ avrättning fördelaktigt?

Spekulativ exekvering i Hadoop är fördelaktig i vissa fall eftersom i Hadoop-klustret som har hundratals eller tusentals noder, är problem som nätverksstockning eller hårdvarufel vanliga.

Så att köra parallella eller dubbla uppgifter blir bättre. Men om de två dubbla uppgifterna för varje oberoende uppgift i ett jobb lanseras ungefär samtidigt, kommer det att vara ett slöseri med klusterresurser.

Sammanfattning

Jag hoppas att du efter att ha läst den här artikeln tydligt förstod vad spekulativ avrättning i Hadoop är och varför det behövs. Du har också sett hur vi kan inaktivera det för kartuppgifter och minska uppgifter individuellt.


  1. Mongo DB hittar alla poster med högsta värde beroende på ett nyckelfält

  2. Fyll i saknade datum i register

  3. Hur kan jag vänta på att en dockningscontainer ska vara igång?

  4. Mongo Query med Regex i Node JS som arbetar PÅ EN VARIABEL