Nel nostro blog precedente abbiamo studiato Hadoop Contatori in dettaglio. Ora in questo tutorial parleremo di RecordReader in Hadoop.
Qui tratteremo l'introduzione a Hadoop RecordReader, il funzionamento di RecordReader. Discuteremo anche i tipi di RecordReader in MapReduce, la dimensione del singolo record in Hadoop MapReduce in questo tutorial MapReduce.
Cos'è RecordReader in MapReduce?
Un RecordReader converte la visualizzazione orientata ai byte dell'input in una visualizzazione orientata ai record per il Mapper e Riduttore compiti da elaborare.
Per comprendere Hadoop RecordReader, dobbiamo comprendere MapReduce Dataflow. Impariamo come fluiscono i dati:
MapReduce è un semplice modello di elaborazione dei dati. Gli input e gli output per la mappa e le funzioni di riduzione sono coppie chiave-valore . Di seguito è riportata la forma generale della mappa e delle funzioni di riduzione:
- Mappa: (K1, V1) → elenco (K2, V2)
- Riduci: (K2, elenco (V2)) → elenco (K3, V3)
Ora prima che inizi l'elaborazione, deve sapere su quali dati elaborare. Quindi, InputFormat la classe aiuta a raggiungere questo obiettivo. Questa classe seleziona il file da HDFS questo è l'input per la funzione mappa. È anche responsabile della creazione delle suddivisioni di input.
Inoltre, dividili in record. Divide i dati nel numero di suddivisioni (in genere 64/128 MB) in HDFS. Questo è noto come InputSplit. InputSplit è la rappresentazione logica dei dati. In un processo MapReduce, il numero di esecuzione delle attività mappa è uguale al numero di InputSplits.
Chiamando 'getSplit()' il cliente calcola le divisioni per il lavoro. Quindi è stato inviato al master dell'applicazione. Utilizza le loro posizioni di archiviazione per pianificare le attività della mappa che le elaboreranno nel cluster.
Dopo che l'attività della mappa passa la divisione a createRecordReader () metodo. Da ciò, ottiene RecordReader per la divisione. RecordReader genera record (coppia chiave-valore). Quindi passa alla funzione mappa.
Hadoop RecordReader nell'esecuzione del lavoro MapReduce utilizza i dati entro i limiti che vengono creati da inputsplit. E quindi crea coppie chiave-valore per il mapper. L'"inizio" è la posizione del byte nel file.
All'inizio, Hadoop RecordReader inizia a generare coppie chiave/valore. La "fine" è il punto in cui RecorReader interrompe la lettura dei record. In RecordReader, i dati vengono caricati dalla relativa origine.
Quindi i dati vengono convertiti in coppie chiave-valore adatte alla lettura da parte del Mapper. Comunica con inputsplit fino al completamento della lettura del file.
Come funziona RecorReader in Hadoop?
È più di un iteratore sui record. L'attività di mappatura utilizza un record per generare una coppia chiave-valore che passa alla funzione di mappatura. Possiamo anche vederlo usando la funzione di esecuzione del mapper indicata di seguito:
public void run(Context context ) throws IOException, InterruptedException{ setup(context); while(context.nextKeyValue()) { map(context.setCurrentKey(),context.getCurrentValue(),context) } cleanup(context); }
Sebbene non sia obbligatorio per RecordReader rimanere tra i limiti creati da inputsplit per generare coppie chiave-valore, di solito rimane. Inoltre, l'implementazione personalizzata può persino leggere più dati al di fuori di inputsplit.
Quindi, dopo aver eseguito setup() , il nextKeyValue() si ripeterà sul contesto. Questo popola gli oggetti chiave e valore per il mapper. A titolo di contesto, il framework recupera il valore-chiave dal lettore di record. Quindi passa a map() metodo per fare il suo lavoro.
Quindi, input (valore-chiave) ai processi della funzione mappa secondo la logica menzionata nel codice mappa. Quando il record arriva alla fine del record, nextKeyValue() il metodo restituisce false.
Tipi di lettore di record Hadoop
InputFormat definisce l'istanza di RecordReader, in Hadoop. Per impostazione predefinita, utilizzando TextInputFormat ReordReader converte i dati in coppie chiave-valore. TextInputFormat fornisce anche 2 tipi di lettori di record come segue:
1. LineRecordReader
È il lettore di record predefinito. TextInputFormat fornisce questo RecordReader. Tratta anche ogni riga del file di input come il nuovo valore. Quindi la chiave associata è l'offset di byte. Salta sempre la prima riga dello split (o parte di esso), se non è il primo split.
Legge sempre una riga dopo il limite della divisione alla fine (se i dati sono disponibili, quindi non è l'ultima divisione).
2. SequenceFileRecordReader
Questo Hadoop RecorReader legge i dati specificati dall'intestazione di un file di sequenza.
La dimensione massima del singolo Record
Utilizzando il parametro sottostante impostiamo il valore massimo.
conf.setInt("mapred.linerecordreader.maxlength", Integer.MAX_VALUE);
Conclusione
In conclusione, Hadoop RecorReader crea l'input (valore-chiave) per Mapper. Utilizza anche TextInputFormat per convertire i dati in coppia chiave-valore.
Spero che questo blog ti sia piaciuto se hai domande relative a Hadoop RecordReader, sentiti libero di condividere con noi. Saremo lieti di risolverli.