De manier waarop HDFS is ingesteld, breekt zeer grote bestanden af in grote blokken (bijvoorbeeld 128 MB), en slaat drie exemplaren van deze blokken op verschillende knooppunten in het cluster op.HDFS is zich niet bewust van de inhoud van deze bestanden.
In YARN, wanneer een MapReduce-taak wordt gestart, de Resource Manager (het clusterbronbeheer en de functie voor taakplanning) maakt een Application Master-daemon die zorgt voor de levenscyclus van de taak. (In Hadoop 1 heeft de JobTracker individuele taken gevolgd, evenals taakplanning en clusterbronbeheer.)
lokaal worden verwerkt op het slaveknooppunt waar het is opgeslagen. Voordat u gaat kijken hoe de gegevensblokken worden verwerkt, moet u nauwkeuriger kijken hoe Hadoop gegevens opslaat. In Hadoop zijn bestanden samengesteld uit individuele records, die uiteindelijk één voor één worden verwerkt door mapper-taken.
De voorbeeldgegevensset bevat bijvoorbeeld informatie over voltooide vluchten in de Verenigde Staten tussen 1987 en 2008.
U heeft één groot bestand voor elk jaar en binnen elk bestand vertegenwoordigt elke regel een enkele vlucht. Met andere woorden, één regel staat voor één record. Onthoud nu dat de blokgrootte voor de Hadoop-cluster 64 MB is, wat betekent dat de lichte gegevensbestanden in stukjes van precies 64 MB zijn opgedeeld.
Zie je het probleem? Als elke kaarttaak alle records in een specifiek gegevensblok verwerkt, wat gebeurt er dan met die records die blokgrenzen overspannen? Bestandsblokken zijn exact 64 MB (of hoe je de blokgrootte ook instelt) en omdat HDFS geen idee heeft van wat zich in de bestandsblokken bevindt, kan het niet bepalen wanneer een record in een ander blok terecht kan komen.
Om dit probleem op te lossen, gebruikt Hadoop een logische weergave van de gegevens die zijn opgeslagen in bestandsblokken, die
invoersplits worden genoemd. Wanneer een MapReduce-opdrachtclient de invoersplits berekent, wordt berekend waar het eerste hele record in een blok begint en waar het laatste record in het blok eindigt. In gevallen waarin de laatste record in een blok onvolledig is, bevat de invoersplits locatiegegevens voor het volgende blok en de byte-offset van de gegevens die nodig zijn om de record te voltooien.
De figuur toont deze relatie tussen gegevensblokken en invoersplitsingen.
U kunt de Application Master-daemon configureren (of JobTracker, als u zich in Hadoop 1 bevindt) om de invoersplitsingen te berekenen in plaats van de opdrachtclient, wat sneller zou zijn voor taken die een groot aantal gegevensblokken verwerken.
MapReduce gegevensverwerking wordt aangedreven door dit concept van invoersplitsingen. Het aantal invoersplitsingen dat voor een specifieke toepassing wordt berekend, bepaalt het aantal mapper-taken. Elk van deze mapper-taken wordt waar mogelijk toegewezen aan een slaveknooppunt waar de invoersplitsing wordt opgeslagen. De Resource Manager (of JobTracker, als je in Hadoop 1 bent) doet zijn best om ervoor te zorgen dat invoersplitsingen lokaal worden verwerkt.