Hadoop MapReduce Partecipa & Contro con l'esempio

Sommario:

Anonim

Cos'è Join in Mapreduce?

L' operazione Mapreduce Join viene utilizzata per combinare due set di dati di grandi dimensioni. Tuttavia, questo processo implica la scrittura di molto codice per eseguire l'effettiva operazione di join. L'unione di due set di dati inizia confrontando le dimensioni di ciascun set di dati. Se un set di dati è più piccolo rispetto all'altro set di dati, il set di dati più piccolo viene distribuito a ogni nodo di dati nel cluster.

Una volta distribuito un join in MapReduce, Mapper o Reducer utilizza il set di dati più piccolo per eseguire una ricerca per i record corrispondenti dal set di dati di grandi dimensioni e quindi combina tali record per formare i record di output.

In questo tutorial imparerai-

  • Cos'è un join in MapReduce?
  • Tipi di join
  • Come unire due DataSet: Esempio di MapReduce
  • Cos'è Counter in MapReduce?
  • Tipi di contatori MapReduce
  • Esempio di contatori

Tipi di join

A seconda del luogo in cui viene eseguita l'unione effettiva, le unioni in Hadoop sono classificate in-

1. Join lato mappa: quando il join viene eseguito dal mappatore, viene chiamato join lato mappa. In questo tipo, il join viene eseguito prima che i dati vengano effettivamente consumati dalla funzione di mappa. È obbligatorio che l'input per ogni mappa sia nella forma di una partizione e sia in ordine. Inoltre, deve esserci un numero uguale di partizioni e deve essere ordinato in base alla chiave di join.

2. Reduce-side join - Quando il join viene eseguito dal riduttore, viene chiamato come Reduce -side join. Non è necessario in questo join avere un set di dati in una forma strutturata (o partizionata).

Qui, l'elaborazione del lato mappa emette la chiave di join e le tuple corrispondenti di entrambe le tabelle. Come effetto di questa elaborazione, tutte le tuple con la stessa chiave di join cadono nello stesso riduttore che quindi unisce i record con la stessa chiave di join.

Un flusso di processo complessivo di join in Hadoop è illustrato nel diagramma sottostante.

Tipi di join in Hadoop MapReduce

Come unire due DataSet: Esempio di MapReduce

Esistono due set di dati in due file diversi (mostrati di seguito). Il Key Dept_ID è comune in entrambi i file. L'obiettivo è utilizzare MapReduce Join per combinare questi file

File 1
File 2

Input: il set di dati di input è un file txt, DeptName.txt e DepStrength.txt

Scarica i file di input da qui

Assicurati di aver installato Hadoop. Prima di iniziare con il processo effettivo di esempio di MapReduce Join, cambia l'utente in "hduser" (id utilizzato durante la configurazione di Hadoop, puoi passare all'id utente utilizzato durante la configurazione di Hadoop).

su - hduser_

Passaggio 1) Copia il file zip nella posizione che preferisci

Passaggio 2) Decomprimere il file zip

sudo tar -xvf MapReduceJoin.tar.gz

Passaggio 3) Vai alla directory MapReduceJoin /

cd MapReduceJoin/

Passaggio 4) Avvia Hadoop

$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh

Passaggio 5) DeptStrength.txt e DeptName.txt sono i file di input utilizzati per questo programma di esempio di MapReduce Join.

Questi file devono essere copiati su HDFS utilizzando il comando seguente-

$HADOOP_HOME/bin/hdfs dfs -copyFromLocal DeptStrength.txt DeptName.txt /

Passaggio 6) Esegui il programma utilizzando il comando seguente-

$HADOOP_HOME/bin/hadoop jar MapReduceJoin.jar MapReduceJoin/JoinDriver/DeptStrength.txt /DeptName.txt /output_mapreducejoin

Passaggio 7) Dopo l'esecuzione, il file di output (denominato 'part-00000') verrà archiviato nella directory / output_mapreducejoin su HDFS

I risultati possono essere visualizzati utilizzando l'interfaccia della riga di comando

$HADOOP_HOME/bin/hdfs dfs -cat /output_mapreducejoin/part-00000

I risultati possono essere visualizzati anche tramite un'interfaccia web come-

Ora seleziona "Sfoglia il filesystem" e vai su / output_mapreducejoin

Apri part-r-00000

Vengono visualizzati i risultati

NOTA: si prega di notare che prima di eseguire questo programma per la prossima volta, sarà necessario eliminare la directory di output / output_mapreducejoin

$HADOOP_HOME/bin/hdfs dfs -rm -r /output_mapreducejoin

L'alternativa consiste nell'usare un nome diverso per la directory di output.

Cos'è Counter in MapReduce?

Un contatore in MapReduce è un meccanismo utilizzato per raccogliere e misurare le informazioni statistiche sui processi e gli eventi di MapReduce. I contatori tengono traccia di varie statistiche di lavoro in MapReduce come il numero di operazioni effettuate e l'avanzamento dell'operazione. I contatori vengono utilizzati per la diagnosi dei problemi in MapReduce.

I contatori Hadoop sono simili all'inserimento di un messaggio di log nel codice per una mappa o una riduzione. Queste informazioni potrebbero essere utili per la diagnosi di un problema nell'elaborazione del lavoro di MapReduce.

In genere, questi contatori in Hadoop sono definiti in un programma (mappa o riduzione) e vengono incrementati durante l'esecuzione quando si verifica un evento o una condizione particolare (specifica per quel contatore). Un'ottima applicazione dei contatori Hadoop consiste nel tenere traccia dei record validi e non validi da un set di dati di input.

Tipi di contatori MapReduce

Esistono fondamentalmente 2 tipi di contatori MapReduce

    1. Contatori Hadoop incorporati: esistono alcuni contatori Hadoop incorporati per lavoro. Di seguito sono riportati i gruppi di contatori incorporati-
      • Contatori attività MapReduce - Raccoglie informazioni specifiche dell'attività (ad esempio, numero di record di input) durante il tempo di esecuzione.
      • Contatori FileSystem - Raccoglie informazioni come il numero di byte letti o scritti da un'attività
      • Contatori FileInputFormat : raccoglie le informazioni di un numero di byte letti tramite FileInputFormat
      • Contatori FileOutputFormat : raccoglie le informazioni di un numero di byte scritti tramite FileOutputFormat
      • Contatori lavoro: questi contatori vengono utilizzati da JobTracker. Le statistiche raccolte da loro includono, ad esempio, il numero di attività avviate per un lavoro.
    2. Contatori definiti dall'utente

Oltre ai contatori incorporati, un utente può definire i propri contatori utilizzando funzionalità simili fornite dai linguaggi di programmazione. Ad esempio, in Java vengono utilizzati "enum" per definire contatori definiti dall'utente.

Esempio di contatori

Un esempio di MapClass con contatori per contare il numero di valori mancanti e non validi. File di dati di input utilizzato in questo tutorial Il nostro set di dati di input è un file CSV, SalesJan2009.csv

public static class MapClassextends MapReduceBaseimplements Mapper{static enum SalesCounters { MISSING, INVALID };public void map ( LongWritable key, Text value,OutputCollector output,Reporter reporter) throws IOException{//Input string is split using ',' and stored in 'fields' arrayString fields[] = value.toString().split(",", -20);//Value at 4th index is country. It is stored in 'country' variableString country = fields[4];//Value at 8th index is sales data. It is stored in 'sales' variableString sales = fields[8];if (country.length() == 0) {reporter.incrCounter(SalesCounters.MISSING, 1);} else if (sales.startsWith("\"")) {reporter.incrCounter(SalesCounters.INVALID, 1);} else {output.collect(new Text(country), new Text(sales + ",1"));}}}

Il frammento di codice sopra mostra un'implementazione di esempio dei contatori in Hadoop Map Reduce.

In questo caso, SalesCounters è un contatore definito utilizzando "enum" . Viene utilizzato per contare i record di input MANCANTI e NON VALIDI .

Nello snippet di codice, se il campo "country" ha lunghezza zero, il suo valore è mancante e quindi il contatore SalesCounters.MISSING corrispondente viene incrementato.

Successivamente, se il campo "vendite" inizia con ", il record viene considerato NON VALIDO. Ciò è indicato dall'incremento del contatore SalesCounters.INVALID.