sql >> Database >  >> NoSQL >> HBase

Hadoop RecordReader Introductie, werking en typen

In onze vorige blog hebben we Hadoop . bestudeerd Tellers in detail. In deze tutorial gaan we de RecordReader in Hadoop bespreken.

Hier behandelen we de inleiding tot Hadoop RecordReader, de werking van RecordReader. We bespreken ook de typen RecordReader in MapReduce, de grootte van het enkele record in Hadoop MapReduce in deze MapReduce-zelfstudie.

Wat is RecordReader in MapReduce?

Een RecordReader converteert de byte-georiënteerde weergave van de invoer naar een record-georiënteerde weergave voor de Mapper en Verloopstuk taken voor verwerking.

Om Hadoop RecordReader te begrijpen, moeten we MapReduce Dataflow begrijpen. Laten we leren hoe de gegevensstroom:

MapReduce is een eenvoudig model voor gegevensverwerking. Ingangen en uitgangen voor de kaart- en reductiefuncties zijn sleutel-waardeparen . Hieronder volgt de algemene vorm van de kaart en de verkleiningsfuncties:

  • Kaart: (K1, V1) → lijst (K2, V2)
  • Verminderen: (K2, lijst (V2)) → lijst (K3, V3)

Voordat de verwerking begint, moet het nu weten welke gegevens moeten worden verwerkt. Dus, InputFormat klas helpt daarbij. Deze klasse selecteert het bestand uit HDFS  dat is de invoer voor de kaartfunctie. Het is ook verantwoordelijk voor het maken van de invoersplitsingen.

Verdeel ze ook in records. Het verdeelt de gegevens in het aantal splitsingen (meestal 64/128 MB) in HDFS. Dit staat bekend als InputSplit. InputSplit is de logische weergave van gegevens. In een MapReduce-taak is het uitvoeringsaantal kaarttaken gelijk aan het aantal InputSplits.

Door ‘getSplit ()’ . te bellen de klant berekent de splitsingen voor de baan. Vervolgens wordt het naar de applicatiemaster gestuurd. Het gebruikt hun opslaglocaties om kaarttaken te plannen die ze op het cluster zullen verwerken.

Daarna geeft de kaarttaak de splitsing door aan de createRecordReader () methode. Van daaruit verkrijgt het RecordReader voor de splitsing. RecordReader genereert record (sleutelwaardepaar). Daarna gaat het naar de kaartfunctie.

Hadoop RecordReader in MapReduce-taakuitvoering gebruikt de gegevens binnen de grenzen die worden gecreëerd door de inputsplit. En het maakt vervolgens sleutel-waardeparen voor de mapper. De "start" is de bytepositie in het bestand.

Aan het begin begint Hadoop RecordReader met het genereren van sleutel/waarde-paren. Het “einde” is waar RecorReader stopt met het lezen van records. In RecordReader worden de gegevens geladen vanaf de bron.

Vervolgens worden de gegevens omgezet in sleutel-waardeparen die geschikt zijn om door de Mapper te worden gelezen. Het communiceert met de inputsplit totdat het lezen van het bestand niet is voltooid.

Hoe werkt RecorReader in Hadoop?

Het is meer dan een iterator over de records. De kaarttaak gebruikt één record om een ​​sleutel-waardepaar te genereren dat wordt doorgegeven aan de kaartfunctie. We kunnen dit ook zien door de onderstaande run-functie van de mapper te gebruiken:

public void run(Context context ) throws IOException, InterruptedException{
setup(context);
while(context.nextKeyValue())
{
map(context.setCurrentKey(),context.getCurrentValue(),context)
}
cleanup(context);
}

Hoewel het voor RecordReader niet verplicht is om binnen de grenzen te blijven die door de inputsplit zijn gecreëerd om sleutel-waardeparen te genereren, blijft het meestal wel. Ook kan een aangepaste implementatie zelfs meer gegevens lezen buiten de inputsplit.

Daarna, na het uitvoeren van setup() , de volgendeKeyValue() zal herhalen op de context. Hiermee worden de sleutel- en waardeobjecten voor de mapper ingevuld. Bij wijze van context haalt het framework de sleutelwaarde op uit de recordlezer. Ga dan naar de map() methode om zijn werk te doen.

Voer daarom (sleutelwaarde) in op de kaartfunctieprocessen volgens de logica die wordt vermeld in de kaartcode. Wanneer de record het einde van de record bereikt, wordt de nextKeyValue() methode retourneert false.

Typen Hadoop RecordReader

InputFormat definieert de RecordReader-instantie in Hadoop. Door TextInputFormat te gebruiken, converteert ReordReader standaard gegevens naar sleutel-waardeparen. TextInputFormat biedt ook 2 soorten RecordReaders, namelijk:

1. LineRecordReader

Het is de standaard RecordReader. TextInputFormat biedt deze RecordReader. Het behandelt ook elke regel van het invoerbestand als de nieuwe waarde. De bijbehorende sleutel is dan byte-offset. Het slaat altijd de eerste regel in de splitsing (of een deel ervan) over, als het niet de eerste splitsing is.

Het leest altijd één regel na de grens van de splitsing aan het einde (als er gegevens beschikbaar zijn, is het dus niet de laatste splitsing).

2. SequenceFileRecordReader

Deze Hadoop RecorReader leest gegevens die zijn gespecificeerd door de kop van een sequentiebestand.

De maximale grootte van de enkele Record

Door onderstaande parameter te gebruiken, stellen we de maximale waarde in.

conf.setInt("mapred.linerecordreader.maxlength", Integer.MAX_VALUE);

Conclusie

Kortom, Hadoop RecorReader creëert de invoer (sleutelwaarde) naar Mapper. Het gebruikt ook TextInputFormat voor het converteren van gegevens naar een sleutel-waardepaar.

Ik hoop dat je deze blog leuk vond als je vragen hebt over Hadoop RecordReader, deel ze gerust met ons. We lossen ze graag op.


  1. Waarden krijgen met jedis-pijplijn

  2. Wanneer CouchDB over MongoDB gebruiken en vice versa?

  3. MongoDB insertMany()

  4. Waarom neemt MongoDB zoveel ruimte in beslag?