Video: Hadoop Processing Frameworks 2024
Na de kaartfase en vóór het begin van de fase Reduce is een overdrachtproces, bekend als shuffle en sort . Hier worden de gegevens van de mapper-taken voorbereid en verplaatst naar de knooppunten waar de reducertaken zullen worden uitgevoerd. Wanneer de mapper-taak is voltooid, worden de resultaten gesorteerd op sleutel, gepartitioneerd als er meerdere verloopstukken zijn en vervolgens naar schijf geschreven.
U ziet dit concept in de volgende afbeelding, die de MapReduce-gegevensverwerkingsstroom en de interactie met de fysieke componenten van de Hadoop-cluster laat zien. (Eén snelle opmerking: gegevens in het geheugen worden weergegeven door witte vierkanten en gegevens die op de schijf zijn opgeslagen, worden weergegeven door grijze vierkanten.)
Om het algemene MapReduce-proces te versnellen, worden de gegevens onmiddellijk verplaatst naar de nodes van de reducerende taken, om een overvloed aan netwerkactiviteit te voorkomen wanneer de laatste mappertaak zijn werk voltooit. Deze overdracht vindt plaats terwijl de mapper-taak wordt uitgevoerd, omdat de uitgangen voor elk record - onthouden - worden opgeslagen in het geheugen van een wachtende verlooptaak. (U kunt configureren of dit gebeurt - of niet gebeurt - en ook het aantal betrokken threads.)
Houd er rekening mee dat hoewel de taak van een reducer de meeste uitvoer van de mappertaak heeft, de verwerking van de taak verminderen kan pas beginnen nadat alle mapper-taken zijn voltooid.
Om scenario's te voorkomen waarbij de prestaties van een MapReduce-taak worden belemmerd door een trage mapper-taak die wordt uitgevoerd op een slecht presterende slave-node, gebruikt het MapReduce-framework een concept met de naam speculatieve uitvoering .
In het geval dat sommige mapper-taken langzamer worden uitgevoerd dan redelijk wordt geacht, zal de applicatiemaster dubbele taken uitvoeren (in Hadoop 1 doet de JobTracker dit). Welke taak het eerst wordt voltooid - het duplicaat of het origineel - de resultaten worden op schijf opgeslagen en de andere taak wordt gedood. Als u uw taken goed in de gaten houdt en u zich afvraagt waarom er meer mapper-taken zijn die u verwacht, is dit waarschijnlijk de reden.
De uitvoer van mapper-taken wordt niet naar HDFS geschreven, maar naar een lokale schijf op het slave-knooppunt waar de mapper-taak werd uitgevoerd. Als zodanig wordt het niet gerepliceerd in het Hadoop-cluster.
Afgezien van het comprimeren van de uitvoer, kunt u mogelijk de prestaties verbeteren door een combinatietaak uit te voeren. Deze eenvoudige tactiek, die hier wordt getoond, omvat het uitvoeren van een lokale vermindering van de uitvoer voor individuele mapper-taken.
In de meeste gevallen is er geen extra programmering nodig, omdat u het systeem kunt vertellen om de verloopfunctie te gebruiken. Als u uw reductiefunctie niet gebruikt, moet u ervoor zorgen dat de uitgang van de combinerfunctie identiek is aan die van de reductiefunctie.
Het is aan het MapReduce-framework of de combiner-functie één keer, meerdere keren of nooit moet worden uitgevoerd. Het is dus van cruciaal belang dat de code van de combiner ervoor zorgt dat de eindresultaten niet worden beïnvloed door meerdere runs. Het uitvoeren van de combiner kan een prestatievoordeel opleveren door de hoeveelheid tussentijdse gegevens die anders over het netwerk zouden moeten worden overgedragen, te verminderen.
Dit verlaagt ook de hoeveelheid verwerking die de reducer-taken zouden moeten uitvoeren. U voert hier een extra taak uit, dus het is mogelijk dat enige prestatiewinst te verwaarlozen is of zelfs tot slechtere algehele prestaties kan leiden. Uw kilometerstand kan variëren, dus test dit zorgvuldig.
Nadat alle resultaten van de mapper-taken zijn gekopieerd naar de knooppunten van de reducerende taken, worden deze bestanden samengevoegd en gesorteerd.