In questo blog, ti mostrerò come eseguire un programma MapReduce. MapReduce è una delle parti principali di Apache Hadoop, è il livello di elaborazione di Apache Hadoop. Quindi, prima di mostrarti come eseguire un programma MapReduce, lascia che ti spieghi brevemente MapReduce.
MapReduce è un sistema per l'elaborazione parallela di grandi set di dati. MapReduce riduce i dati in risultati e crea un riepilogo dei dati. Un programma mapreduce ha due parti:mappatore e riduttore. Dopo che il mappatore ha terminato il suo lavoro, iniziano solo i riduttori.
Mapper : Mappa le coppie chiave/valore di input su un insieme di coppie chiave/valore intermedie.
Riduttore : Riduce un insieme di valori intermedi che condividono una chiave a un insieme più piccolo di valori.
Fondamentalmente, nel programma wordcount mapreduce, forniamo file di input - qualsiasi file di testo, come input. All'avvio del programma mapreduce, di seguito sono riportati i processi che attraversa:
Separazione : Divide in parole ogni riga nel file di input.
Mappatura : Forma una coppia di valori chiave, dove word è la chiave e 1 è il valore assegnato a ciascuna chiave.
Rimescolamento : Le coppie di valori chiave comuni vengono raggruppate insieme.
Ridurre : I valori di chiavi simili vengono sommati.
Esecuzione del programma MapReduce
Un programma MapReduce è scritto in Java. E principalmente Eclipse IDE viene utilizzato per la programmazione dagli sviluppatori. Quindi, in questo blog, ti mostrerò come esportare un programma mapreduce in un file jar dall'IDE di Eclipse ed eseguirlo su un cluster Hadoop.
Il mio programma MapReduce è presente nel mio IDE Eclipse.
Ora per eseguire questo programma MapReduce su un cluster hadoop, esporteremo il progetto come file jar. Seleziona l'opzione File in Eclipse ide e fai clic su Esporta. Nell'opzione Java, seleziona Jar file e fai clic su Avanti.
Seleziona il progetto Wordcount e fornisci il percorso e il nome del file jar, lo tengo wordcount.jar, fai clic su Avanti due volte.
Ora fai clic su Sfoglia e seleziona la classe principale e infine fai clic su Fine per creare il file jar. Nel caso in cui ricevi un avviso come di seguito, fai semplicemente clic su OK.
Controlla se il tuo cluster Hadoop è attivo e funzionante o meno.
Comando: jps
hadoop@hadoop-VirtualBox:~$ jps
3008 NodeManager
3924 Jps
2885 ResourceManager
2505 DataNode
3082 JobHistoryServer
2716 SecondaryNameNode
2383 NameNode
hadoop@hadoop-VirtualBox:~$
Abbiamo il nostro file di input su HDFS per il programma di conteggio parole.
hadoop@hadoop-VirtualBox:~$ hdfs dfs -put input /
hadoop@hadoop-VirtualBox:~$ hdfs dfs -cat /input
This is my first mapreduce test
This is wordcount program
hadoop@hadoop-VirtualBox:~$
Ora esegui il file wordcount.jar usando il comando seguente.
Nota: Dato che abbiamo selezionato la classe principale durante l'esportazione di wordcount.jar , non c'è bisogno di menzionare la classe principale nel comando.
Comando: hadoop jar conteggio parole.jar /input /output
hadoop@hadoop-VirtualBox:~$ hadoop jar wordcount.jar /input /output
16/11/27 22:52:20 INFO client.RMProxy: Connecting to ResourceManager at /0.0.0.0:
8032
16/11/27 22:52:22 WARN mapreduce.JobResourceUploader: Hadoop command-line option
parsing not performed. Implement the Tool interface and execute your application
with ToolRunner to remedy this.
16/11/27 22:52:27 INFO input.FileInputFormat: Total input paths to process : 1
16/11/27 22:52:28 INFO mapreduce.JobSubmitter: number of splits:1
16/11/27 22:52:29 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_14802
67251741_0001
16/11/27 22:52:32 INFO impl.YarnClientImpl: Submitted application application_14802
67251741_0001
16/11/27 22:52:33 INFO mapreduce.Job: The url to track the job: http://hadoop-Virtu
alBox:8088/proxy/application_1480267251741_0001/
16/11/27 22:52:33 INFO mapreduce.Job: Running job: job_1480267251741_0001
16/11/27 22:53:20 INFO mapreduce.Job: Job job_1480267251741_0001 running in uber mo
de : false
16/11/27 22:53:20 INFO mapreduce.Job: map 0% reduce 0%
16/11/27 22:53:45 INFO mapreduce.Job: map 100% reduce 0%
16/11/27 22:54:13 INFO mapreduce.Job: map 100% reduce 100%
16/11/27 22:54:15 INFO mapreduce.Job: Job job_1480267251741_0001 completed
successfully
16/11/27 22:54:16 INFO mapreduce.Job: Counters: 49
File System Counters
FILE: Number of bytes read=124
FILE: Number of bytes written=237911
FILE: Number of read operations=0
FILE: Number of large read operations=0
FILE: Number of write operations=0
HDFS: Number of bytes read=150
HDFS: Number of bytes written=66
HDFS: Number of read operations=6
HDFS: Number of large read operations=0
HDFS: Number of write operations=2
Job Counters
Launched map tasks=1
Launched reduce tasks=1
Data-local map tasks=1
Total time spent by all maps in occupied slots (ms)=21062
Total time spent by all reduces in occupied slots (ms)=25271
Total time spent by all map tasks (ms)=21062
Total time spent by all reduce tasks (ms)=25271
Total vcore-milliseconds taken by all map tasks=21062
Total vcore-milliseconds taken by all reduce tasks=25271
Total megabyte-milliseconds taken by all map tasks=21567488
Total megabyte-milliseconds taken by all reduce tasks=25877504
Map-Reduce Framework
Map input records=2
Map output records=10
Map output bytes=98
Map output materialized bytes=124
Input split bytes=92
Combine input records=0
Combine output records=0
Reduce input groups=8
Reduce shuffle bytes=124
Reduce input records=10
Reduce output records=8
Spilled Records=20
Shuffled Maps =1
Failed Shuffles=0
Merged Map outputs=1
GC time elapsed (ms)=564
CPU time spent (ms)=4300
Physical memory (bytes) snapshot=330784768
Virtual memory (bytes) snapshot=3804205056
Total committed heap usage (bytes)=211812352
Shuffle Errors
BAD_ID=0
CONNECTION=0
IO_ERROR=0
WRONG_LENGTH=0
WRONG_MAP=0
WRONG_REDUCE=0
File Input Format Counters
Bytes Read=58
File Output Format Counters
Bytes Written=66
hadoop@hadoop-VirtualBox:~$
Dopo che il programma è stato eseguito correttamente, vai su HDFS e controlla il file della parte all'interno della directory di output.
Di seguito è riportato l'output del programma di conteggio parole.
hadoop@hadoop-VirtualBox:~$ hdfs dfs -cat /output/part-r-00000
This 2
first 1
is 2
mapreduce 1
my 1
program 1
test 1
wordcount 1
hadoop@hadoop-VirtualBox:~$
Conclusione
Questo esempio qui è in Java, puoi anche scrivere un programma MapReduce in Python. Abbiamo eseguito con successo un programma Hadoop MapReduce su un cluster Hadoop su Ubuntu 16.04. I passaggi per eseguire un programma Mapreduce su altri ambienti Linux rimangono gli stessi. Assicurati che prima di eseguire il programma, il tuo cluster Hadoop sia attivo e funzionante, inoltre il tuo file di input dovrebbe essere presente in HDFS.