sql >> Database teknologi >  >> NoSQL >> HBase

Hadoop InputFormat &typer af InputFormat i MapReduce

I vores tidligere Hadoop tutorial , har vi givet dig en detaljeret beskrivelse af Hadoop Mapper og Reducer. Nu i denne blog vil vi dække den anden komponent af MapReduce-processen, dvs. Hadoop InputFormat.

Vi vil diskutere, hvad der er InputFormat i Hadoop, hvilke funktioner der leveres af MapReduce InputFormat. Vi vil også dække typerne af InputFormat i MapReduce, og hvordan man henter data fra mapper ved hjælp af InputFormat.

Hvad er Hadoop InputFormat?

Hadoop InputFormat  beskriver input-specifikationen for udførelse af Map-Reduce-jobbet.

InputFormat beskriver, hvordan man opdeler og læser inputfiler. I MapReduce jobudførelse er InputFormat det første trin. Den er også ansvarlig for at oprette input-opdelingerne og opdele dem i poster.

Inputfiler gemmer dataene til MapReduce-jobbet. Inputfiler ligger i HDFS . Selvom disse filformater er vilkårlige, kan vi også bruge linjebaserede logfiler og binært format. I MapReduce er InputFormat-klassen derfor en af ​​de grundlæggende klasser, som giver nedenstående funktionalitet:

  • InputFormat vælger filerne eller andre objekter til input.
  • Det definerer også dataopdelingerne. Den definerer både størrelsen af ​​individuelle kortopgaver og dens potentielle udførelsesserver.
  • Hadoop InputFormat definerer RecordReader. Den er også ansvarlig for at læse faktiske poster fra inputfilerne.

Hvordan får vi data fra Mapper?

Metoder til at hente data fra mapper er:getsplits() og createRecordReader() som er som følger:

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;
}

Typer af InputFormat i MapReduce

Der er forskellige typer af MapReduce InputFormat i Hadoop, som bruges til forskellige formål. Lad os diskutere Hadoop InputFormat-typerne nedenfor:

1. FileInputFormat

Det er basisklassen for alle filbaserede inputformater. FileInputFormat angiver også inputmappe, som har datafilers placering. Når vi starter en MapReduce-jobkørsel, giver FileInputFormat en sti, der indeholder filer, der skal læses.

Dette InpuFormat vil læse alle filer. Derefter opdeler den disse filer i en eller flere InputSplits.

2. TextInputFormat

Det er standardinputformatet. Dette InputFormat behandler hver linje i hver inputfil som en separat post. Den udfører ingen parsing. TextInputFormat er nyttigt til uformaterede data eller linjebaserede poster som logfiler. Derfor,

  • Nøgle – Det er byte-forskydningen af ​​begyndelsen af ​​linjen i filen (ikke hele filen en split). Så det vil være unikt, hvis det kombineres med filnavnet.
  • Værdi – Det er indholdet af linjen. Det udelukker linjeterminatorer.

3. KeyValueTextInputFormat

Det ligner TextInputFormat. Dette InputFormat behandler også hver inputlinje som en separat post. Mens forskellen er, at TextInputFormat behandler hele linjen som værdien, men KeyValueTextInputFormat opdeler selve linjen i nøgle og værdi med et tabulatortegn ('/t'). Derfor,

  • Nøgle – Alt op til tabulatortegn.
  • Værdi – Det er den resterende del af linjen efter tabulatortegn.

4. SequenceFileInputFormat

Det er et InputFormat, som læser sekvensfiler. Sekvensfiler er binære filer. Disse filer gemmer også sekvenser af binære nøgleværdi-par. Disse er blokkomprimerede og giver direkte serialisering og deserialisering af flere vilkårlige data. Derfor,

Nøgle og værdi er begge brugerdefinerede.

5. SequenceFileAsTextInputFormat

Det er varianten af ​​SequenceFileInputFormat. Dette format konverterer sekvensfilens nøgleværdier til tekstobjekter. Så den udfører konvertering ved at kalde 'tostring() ’ på tasterne og værdierne. Derfor gør SequenceFileAsTextInputFormat sekvensfiler til passende input til streaming.

6. SequenceFileAsBinaryInputFormat

Ved at bruge SequenceFileInputFormat kan vi udtrække sekvensfilens nøgler og værdier som et uigennemsigtigt binært objekt.

7. NlineInputFormat

Det er en anden form for TextInputFormat, hvor tasterne er byte offset af linjen. Og værdier er indholdet af linjen. Så hver mapper modtager et variabelt antal linjers input med TextInputFormat og KeyValueTextInputFormat.

Antallet afhænger af opdelingens størrelse. Det afhænger også af længden af ​​linjerne. Så hvis vi ønsker, at vores mapper skal modtage et fast antal linjers input, så bruger vi NLineInputFormat.

N- Det er antallet af inputlinjer, som hver mapper modtager.

Som standard (N=1) modtager hver mapper præcis én linje input.

Antag, at N=2, så indeholder hver opdeling to linjer. Så én mapper modtager de første to nøgle-værdi-par. En anden mapper modtager de to andre nøgleværdi-par.

8. DBInputFormat

Dette InputFormat læser data fra en relationsdatabase ved hjælp af JDBC. Den indlæser også små datasæt, måske til at forbinde med store datasæt fra HDFS ved hjælp af MultipleInputs. Derfor,

  • Nøgle – LongWritables
  • Værdi – DBWritables.

Konklusion

Derfor definerer InputFormat, hvordan man læser data fra en fil ind i Mapper-instanserne. I denne tutorial har vi lært mange typer af InputFormat som FileInputFormat, TextInputFormat osv.

Standardinputformatet er TextInputFormat. Hvis du har en forespørgsel relateret til MapReduce InputFormat, så del gerne med os. Håber vi løser dem.


  1. Gruppér og tæl efter måned

  2. Mongoose tilføjer flere objekter til array, hvis de ikke eksisterer baseret

  3. Fjern med _id i MongoDB-konsollen

  4. Hvorfor tilføjes et _id med ObjectID, når du bruger MongoDB's $push for at tilføje nyt objekt til et array?