sql >> Database >  >> NoSQL >> HBase

Speculatieve uitvoering in Hadoop MapReduce

In dit artikel over speculatieve uitvoering van MapReduce gaat u dieper in op speculatieve uitvoering van Hadoop. Je leert wat speculatieve uitvoering is, wat de noodzaak ervan is, hoe we het kunnen in- en uitschakelen.

Het artikel legt ook uit of het nuttig is of niet en hoe het werkt.

Wat is speculatieve uitvoering in Hadoop?

Het MapReduce-model in het Hadoop-framework splitst de taken op in onafhankelijke taken en voert deze taken parallel uit om de algehele uitvoeringstijd van de taak te verkorten.

Dit maakt de taakuitvoering tijdgevoelig voor de langzaam lopende taken, omdat slechts een enkele langzame taak de volledige taakuitvoeringstijd langer kan maken dan verwacht. Wanneer een taak uit duizenden of honderden taken bestaat, is de mogelijkheid van een paar achter elkaar liggende taken zeer reëel.

De taken kunnen om verschillende redenen traag zijn, zoals een verkeerde configuratie van de software of degradatie van de hardware. Maar de oorzaak die ervoor zorgt dat de taak traag verloopt, is moeilijk te ontdekken, omdat de taken nog steeds met succes worden voltooid, hoewel het langer duurt dan verwacht.

Het Hadoop-framework probeert niet de langzaam lopende taken te diagnosticeren of op te lossen. Het framework probeert de taak te detecteren die langzamer wordt uitgevoerd dan de verwachte snelheid en start een andere taak, wat een equivalente taak is als een back-up.

De back-uptaak ​​staat bekend als de speculatieve taak en dit proces staat bekend als speculatieve uitvoering in Hadoop.

Wat is de noodzaak van speculatieve executie in Hadoop?

In het Hadoop-framework is het invoerbestand opgedeeld in meerdere blokken en die blokken werden opgeslagen op de verschillende knooppunten in het Hadoop-cluster.

Wanneer de MapReduce-taak door de client wordt verzonden, berekent deze het aantal InputSplits en voert het evenveel mappers uit als het aantal InputSplits. Deze mappers (kaarttaken) lopen parallel op de DataNodes, waar de gesplitste gegevens zich bevinden.

Wat als de weinige DataNodes in het Hadoop-cluster de taken niet zo snel uitvoeren als de andere DataNodes vanwege hardwarestoringen of netwerkproblemen.

Dus de kaarttaken die op die DataNodes worden uitgevoerd, zullen langzamer zijn in vergelijking met de kaarttaken die op de andere DataNodes worden uitgevoerd. De Reducer kan pas met de uitvoering beginnen als de tussenuitgangen van alle mappers beschikbaar zijn.

Dus hoe minder langzaam lopende kaarttaken de uitvoering van de Reducer vertragen.

Als de Reducer op het langzamere knooppunt draait, zal dat ook de uiteindelijke uitvoer van de taak vertragen.

Dus om te waken tegen dergelijke traag lopende taken, start het Hadoop-framework dezelfde taak op het andere knooppunt. Deze optimalisatie door het Hadoop-framework wordt de speculatieve uitvoering van de taak genoemd.

Hoe werkt speculatieve uitvoering in Hadoop?

De speculatieve uitvoering start niet de twee dubbele taken van elke onafhankelijke taak van een taak op ongeveer hetzelfde moment, zodat ze tegen elkaar kunnen racen. Als het raamwerk dit doet, zou dit leiden tot verspilling van de clusterbronnen.

In plaats daarvan volgt de planner de voortgang van alle taken van hetzelfde type (zoals in kaart brengen en verkleinen) in een taak, en start alleen de speculatieve duplicaten voor kleine proporties die langzamer liepen dan het gemiddelde.

Wanneer de taak met succes wordt voltooid, werden alle dubbele taken die werden uitgevoerd, gedood omdat ze niet langer nodig waren.

Dus als de oorspronkelijke taak wordt voltooid vóór de speculatieve taak, wordt de speculatieve taak gedood. Als de speculatieve taak eindigt voor de oorspronkelijke taak, wordt de oorspronkelijke taak gedood.

Merk op dat de speculatieve uitvoering een optimalisatie is. Het is geen functie om de MapReduce-taken betrouwbaarder te laten verlopen.

Hoe speculatieve uitvoering in Hadoop configureren?

Standaard is de speculatieve uitvoering ingeschakeld voor zowel de kaarttaak als voor de verkleiningstaken. De eigenschappen ervan worden ingesteld in de mapred-site.xml configuratiebestand.

  • mapreduce.map.speculative :Als deze eigenschap is ingesteld op true, wordt de speculatieve uitvoering van de kaarttaak ingeschakeld. Standaard is het waar.
  • mapreduce.reduce.speculative :Als deze eigenschap is ingesteld op true, wordt de speculatieve uitvoering van de taak verkleinen ingeschakeld. Standaard is het waar.

Waarom zou je speculatieve uitvoering ooit willen uitschakelen?

Het belangrijkste doel van de speculatieve uitvoering is om de uitvoeringstijd van de taak te verminderen. Maar dit gaat ten koste van de efficiëntie van het Hadoop-cluster.

Op een druk Hadoop-cluster kan dit de algehele doorvoer verminderen omdat de overtollige taken worden uitgevoerd om de uitvoeringstijd voor de enkele taak te verkorten.

Om deze reden schakelen sommige clusterbeheerders de speculatieve uitvoering op het Hadoop-cluster uit en laten gebruikers dit expliciet inschakelen voor de afzonderlijke taken.

We kunnen het uitschakelen voor het verminderen van taken, omdat voor dubbele verminderingstaken dezelfde mapper-outputs moeten worden opgehaald als de oorspronkelijke taak, wat het netwerkverkeer op het cluster aanzienlijk zal verhogen.

Is speculatieve uitvoering gunstig?

Speculatieve uitvoering in Hadoop is in sommige gevallen gunstig omdat in het Hadoop-cluster met honderden of duizenden knooppunten problemen zoals netwerkcongestie of hardwarestoringen vaak voorkomen.

Het is dus beter om parallelle of dubbele taken uit te voeren. Maar als de twee dubbele taken van elke onafhankelijke taak van een taak ongeveer tegelijkertijd worden gestart, is dat een verspilling van clusterbronnen.

Samenvatting

Ik hoop dat je na het lezen van dit artikel duidelijk hebt begrepen wat speculatieve uitvoering in Hadoop is en waarom het nodig is. Je hebt ook gezien hoe we het kunnen uitschakelen voor kaarttaken en taken afzonderlijk kunnen verminderen.


  1. Het gegevenstype van een kolom in SQL controleren?

  2. 5 manieren om de minuten van een date in MongoDB te krijgen

  3. MongoDB-aggregaties met Java

  4. gegevens opslaan in redis via cron-taak