sql >> Database >  >> NoSQL >> HBase

Hadoop InputFormat &soorten InputFormat in MapReduce

In onze vorige Hadoop-zelfstudie , we hebben je een gedetailleerde beschrijving gegeven van Hadoop Mapper en Verloopstuk. In deze blog gaan we het andere onderdeel van het MapReduce-proces behandelen, namelijk Hadoop InputFormat.

We zullen bespreken wat InputFormat is in Hadoop, welke functionaliteiten worden geleverd door MapReduce InputFormat. We bespreken ook de typen InputFormat in MapReduce en hoe u de gegevens van de mapper kunt krijgen met InputFormat.

Wat is Hadoop InputFormat?

Hadoop InputFormat  beschrijft de invoerspecificatie voor het uitvoeren van de Map-Reduce job.

InputFormat beschrijft hoe u invoerbestanden kunt splitsen en lezen. In MapReduce-taakuitvoering is InputFormat de eerste stap. Het is ook verantwoordelijk voor het maken van de invoersplitsingen en het verdelen ervan in records.

Invoerbestanden slaan de gegevens op voor de MapReduce-taak. Invoerbestanden bevinden zich in HDFS . Hoewel deze bestandsindeling willekeurig is, kunnen we ook lijngebaseerde logbestanden en binaire indelingen gebruiken. Vandaar dat in MapReduce de klasse InputFormat een van de fundamentele klassen is die onderstaande functionaliteit biedt:

  • InputFormat selecteert de bestanden of andere objecten voor invoer.
  • Het definieert ook de gegevenssplitsingen. Het definieert zowel de grootte van afzonderlijke kaarttaken als de mogelijke uitvoeringsserver.
  • Hadoop InputFormat definieert de RecordReader. Het is ook verantwoordelijk voor het lezen van feitelijke records uit de invoerbestanden.

Hoe krijgen we de gegevens van Mapper?

Methoden om de gegevens van mapper te krijgen zijn:getsplits() en createRecordReader() die als volgt zijn:

public abstract class InputFormat<K, V>
{
public abstract List<InputSplit> getSplits(JobContext context)
throws IOException, InterruptedException;
public abstract RecordReader<K, V>
createRecordReader(InputSplit split,
TaskAttemptContext context) throws IOException,
InterruptedException;
}

Soorten InputFormat in MapReduce

Er zijn verschillende soorten MapReduce InputFormat in Hadoop die voor verschillende doeleinden worden gebruikt. Laten we de Hadoop InputFormat-typen hieronder bespreken:

1. Bestandsinvoerformaat

Het is de basisklasse voor alle op bestanden gebaseerde InputFormats. FileInputFormat specificeert ook de invoermap met de locatie van de gegevensbestanden. Wanneer we een MapReduce-taakuitvoering starten, biedt FileInputFormat een pad met bestanden om te lezen.

Dit InpuFormat leest alle bestanden. Vervolgens verdeelt het deze bestanden in een of meer InputSplits.

2. TextInputFormat

Het is de standaard InputFormat. Dit InputFormat behandelt elke regel van elk invoerbestand als een afzonderlijk record. Het voert geen parsering uit. TextInputFormat is handig voor niet-opgemaakte gegevens of regelgebaseerde records zoals logbestanden. Vandaar,

  • Sleutel – Het is de byte-offset van het begin van de regel in het bestand (niet het hele bestand in één splitsing). Het is dus uniek als het wordt gecombineerd met de bestandsnaam.
  • Waarde – Het is de inhoud van de regel. Het sluit lijnafsluitingen uit.

3. KeyValueTextInputFormat

Het is vergelijkbaar met TextInputFormat. Dit InputFormat behandelt ook elke invoerregel als een afzonderlijk record. Hoewel het verschil is dat TextInputFormat de hele regel als waarde behandelt, maar KeyValueTextInputFormat de regel zelf opsplitst in sleutel en waarde door een tab-teken ('/t'). Vandaar,

  • Sleutel – Alles tot aan het tabteken.
  • Waarde – Het is het resterende deel van de regel na het tabteken.

4. SequenceFileInputFormat

Het is een InputFormat die sequentiebestanden leest. Sequentiebestanden zijn binaire bestanden. Deze bestanden slaan ook reeksen van binaire sleutel-waardeparen op. Deze zijn blokgecomprimeerd en bieden directe serialisatie en deserialisatie van verschillende willekeurige gegevens. Vandaar,

Sleutel en waarde zijn beide door de gebruiker gedefinieerd.

5. SequenceFileAsTextInputFormat

Het is de variant van SequenceFileInputFormat. Deze indeling converteert de sleutelwaarden van het reeksbestand naar tekstobjecten. Het voert dus conversie uit door 'tostring() . aan te roepen ’ op de toetsen en waarden. Daarom maakt SequenceFileAsTextInputFormat sequentiebestanden geschikte invoer voor streaming.

6. SequenceFileAsBinaryInputFormat

Door SequenceFileInputFormat te gebruiken, kunnen we de sleutels en waarden van het sequentiebestand extraheren als een ondoorzichtig binair object.

7. NlineInputFormaat

Het is een andere vorm van TextInputFormat waarbij de toetsen een byte-offset van de regel zijn. En waarden zijn de inhoud van de regel. Elke mapper ontvangt dus een variabel aantal regels invoer met TextInputFormat en KeyValueTextInputFormat.

Het aantal is afhankelijk van de grootte van de splitsing. Hangt ook af van de lengte van de lijnen. Dus, als we willen dat onze mapper een vast aantal regels invoer ontvangt, dan gebruiken we NLineInputFormat.

N- Het is het aantal invoerregels dat elke mapper ontvangt.

Standaard (N=1) ontvangt elke mapper precies één invoerregel.

Stel dat N=2, dan bevat elke splitsing twee lijnen. Eén mapper ontvangt dus de eerste twee Key-Value-paren. Een andere mapper ontvangt de tweede twee sleutel-waardeparen.

8. DBInputFormat

Dit InputFormat leest gegevens uit een relationele database, met behulp van JDBC. Het laadt ook kleine datasets, bijvoorbeeld om deel te nemen aan grote datasets van HDFS met behulp van MultipleInputs. Vandaar,

  • Sleutel – LongWritables
  • Waarde – DBWritables.

Conclusie

Daarom definieert InputFormat hoe gegevens uit een bestand in de Mapper-instanties moeten worden gelezen. In deze tutorial hebben we veel soorten InputFormat geleerd, zoals FileInputFormat, TextInputFormat enz.

Het standaard invoerformaat is TextInputFormat. Als u een vraag heeft met betrekking tot MapReduce InputFormat, kunt u deze met ons delen. Ik hoop dat we ze zullen oplossen.


  1. Hoe zou Redis te weten komen of het gegevens in de cache of nieuwe gegevens uit DB moet retourneren?

  2. Voorbeelden bij het gebruik van RedisStore in socket.io

  3. MongoDB-CR-verificatie als standaard configureren op MongoDB 3.x

  4. Subdocumentindex in Mongolië