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

Hadoop InputFormat e tipi di InputFormat in MapReduce

Nel nostro precedente tutorial Hadoop , ti abbiamo fornito una descrizione dettagliata di Hadoop Mapper e Riduttore. Ora in questo blog tratteremo l'altro componente del processo MapReduce, ovvero Hadoop InputFormat.

Discuteremo cos'è InputFormat in Hadoop, quali funzionalità sono fornite da MapReduce InputFormat. Tratteremo anche i tipi di InputFormat in MapReduce e come ottenere i dati dal mapper usando InputFormat.

Cos'è Hadoop InputFormat?

Hadoop InputFormat  descrive le specifiche di input per l'esecuzione del lavoro Map-Reduce.

InputFormat descrive come dividere e leggere i file di input. Nell'esecuzione del lavoro MapReduce, InputFormat è il primo passo. È anche responsabile della creazione delle suddivisioni di input e della loro divisione in record.

I file di input memorizzano i dati per il lavoro MapReduce. I file di input risiedono in HDFS . Sebbene il formato di questi file sia arbitrario, possiamo anche utilizzare file di registro basati su riga e formato binario. Quindi, in MapReduce, la classe InputFormat è una delle classi fondamentali che fornisce le seguenti funzionalità:

  • InputFormat seleziona i file o altri oggetti per l'input.
  • Definisce anche le suddivisioni dei dati. Definisce sia le dimensioni delle singole attività Map che il suo potenziale server di esecuzione.
  • Hadoop InputFormat definisce il Lettore di record. È anche responsabile della lettura dei record effettivi dai file di input.

Come otteniamo i dati da Mapper?

I metodi per ottenere i dati dal mapper sono:getsplits() e createRecordReader() che sono i seguenti:

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

Tipi di InputFormat in MapReduce

Esistono diversi tipi di MapReduce InputFormat in Hadoop che vengono utilizzati per scopi diversi. Discutiamo dei tipi Hadoop InputFormat di seguito:

1. FileInputFormato

È la classe base per tutti gli InputFormats basati su file. FileInputFormat specifica anche la directory di input che ha la posizione dei file di dati. Quando iniziamo l'esecuzione di un lavoro MapReduce, FileInputFormat fornisce un percorso contenente i file da leggere.

Questo InpuFormat leggerà tutti i file. Quindi divide questi file in uno o più InputSplits.

2. TextInputFormat

È il formato di input predefinito. Questo InputFormat tratta ogni riga di ogni file di input come un record separato. Non esegue analisi. TextInputFormat è utile per dati non formattati o record basati su riga come i file di registro. Quindi,

  • Chiave – È l'offset di byte dell'inizio della riga all'interno del file (non l'intero file diviso). Quindi sarà univoco se combinato con il nome del file.
  • Valore – È il contenuto della riga. Esclude i terminatori di riga.

3. KeyValueTextInputFormat

È simile a TextInputFormat. Questo InputFormat tratta anche ogni riga di input come un record separato. Mentre la differenza è che TextInputFormat tratta l'intera riga come valore, ma KeyValueTextInputFormat suddivide la riga stessa in chiave e valore con un carattere di tabulazione ('/t'). Quindi,

  • Chiave – Tutto fino al carattere di tabulazione.
  • Valore – È la parte rimanente della riga dopo il carattere di tabulazione.

4. SequenceFileInputFormat

È un InputFormat che legge i file di sequenza. I file di sequenza sono file binari. Questi file memorizzano anche sequenze di coppie chiave-valore binarie. Questi sono compressi a blocchi e forniscono serializzazione e deserializzazione diretta di diversi dati arbitrari. Quindi,

Chiave e valore sono entrambi definiti dall'utente.

5. SequenceFileAsTextInputFormat

È la variante di SequenceFileInputFormat. Questo formato converte i valori chiave del file di sequenza in oggetti di testo. Quindi, esegue la conversione chiamando "tostring() ' su chiavi e valori. Quindi, SequenceFileAsTextInputFormat rende i file di sequenza un input adatto per lo streaming.

6. SequenceFileAsBinaryInputFormat

Usando SequenceFileInputFormat possiamo estrarre le chiavi e i valori del file di sequenza come un oggetto binario opaco.

7. NlineInputFormat

È un'altra forma di TextInputFormat in cui le chiavi sono offset di byte della riga. E i valori sono il contenuto della riga. Quindi, ogni mappatore riceve un numero variabile di righe di input con TextInputFormat e KeyValueTextInputFormat.

Il numero dipende dalla dimensione della divisione. Inoltre, dipende dalla lunghezza delle linee. Quindi, se vogliamo che il nostro mappatore riceva un numero fisso di righe di input, utilizziamo NLineInputFormat.

N- È il numero di righe di input che riceve ogni mappatore.

Per impostazione predefinita (N=1), ogni mappatore riceve esattamente una riga di input.

Supponiamo N=2, quindi ogni divisione contiene due righe. Quindi, un mappatore riceve le prime due coppie chiave-valore. Un altro mappatore riceve le seconde due coppie chiave-valore.

8. DBInputFormat

Questo InputFormat legge i dati da un database relazionale, utilizzando JDBC. Carica anche piccoli set di dati, magari per unirti a set di dati di grandi dimensioni da HDFS utilizzando MultipleInputs. Quindi,

  • Chiave – LongWritables
  • Valore – DBWritables.

Conclusione

Pertanto, InputFormat definisce come leggere i dati da un file nelle istanze Mapper. In questo tutorial, abbiamo imparato molti tipi di InputFormat come FileInputFormat, TextInputFormat ecc.

Il formato di input predefinito è TextInputFormat. Se hai domande relative a MapReduce InputFormat, sentiti libero di condividere con noi. Spero che li risolveremo.