En este blog, le mostraré cómo ejecutar un programa MapReduce. MapReduce es una de las partes centrales de Apache Hadoop, es la capa de procesamiento de Apache Hadoop. Entonces, antes de mostrarle cómo ejecutar un programa MapReduce, permítame explicarle brevemente MapReduce.
MapReduce es un sistema para el procesamiento paralelo de grandes conjuntos de datos. MapReduce reduce los datos a resultados y crea un resumen de los datos. Un programa mapreduce tiene dos partes:mapeador y reductor. Una vez que el mapeador finaliza su trabajo, solo comienzan los reductores.
Mapeador: Asigna pares clave/valor de entrada a un conjunto de pares intermedios clave/valor.
Reductor: Reduce un conjunto de valores intermedios que comparten una clave a un conjunto de valores más pequeño.
Básicamente, en el programa wordcount mapreduce, proporcionamos archivos de entrada:cualquier archivo de texto, como entrada. Cuando se inicia el programa mapreduce, a continuación se muestran los procesos por los que pasa:
Dividir: Divide cada línea en el archivo de entrada en palabras.
Mapeo: Forma un par clave-valor, donde palabra es la clave y 1 es el valor asignado a cada clave.
Mezclar: Los pares de valores clave comunes se agrupan.
Reducción: Los valores de claves similares se suman.
Ejecución del programa MapReduce
Un programa MapReduce está escrito en Java. Y, sobre todo, Eclipse IDE se utiliza para la programación por parte de los desarrolladores. Entonces, en este blog, le mostraré cómo exportar un programa mapreduce a un archivo jar desde Eclipse IDE y ejecutarlo en un clúster de Hadoop.
Mi programa MapReduce está en mi IDE de Eclipse.
Ahora, para ejecutar este programa MapReduce en un clúster de Hadoop, exportaremos el proyecto como un archivo jar. Seleccione la opción Archivo en eclipse ide y haga clic en Exportar. En la opción Java, seleccione el archivo Jar y haga clic en Siguiente.
Seleccione el proyecto Wordcount y proporcione la ruta y el nombre del archivo jar, lo mantendré wordcount.jar, haga clic en Siguiente dos veces.
Ahora haga clic en Examinar y seleccione la clase principal y finalmente haga clic en Finalizar para crear el archivo jar. En caso de que reciba una advertencia como la siguiente, simplemente haga clic en Aceptar.
Compruebe si su clúster de Hadoop está activo y funcionando o no.
hadoop@hadoop-VirtualBox:~$ jps
3008 NodeManager
3924 Jps
2885 ResourceManager
2505 DataNode
3082 JobHistoryServer
2716 SecondaryNameNode
2383 NameNode
hadoop@hadoop-VirtualBox:~$
Tenemos nuestro archivo de entrada en HDFS para el programa de recuento de palabras.
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:~$
Ahora ejecute el archivo wordcount.jar usando el siguiente comando.
Nota: Dado que seleccionamos la clase principal al exportar wordcount.jar, no es necesario mencionar la clase principal en el comando.
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:~$
Después de que el programa se ejecute correctamente, vaya a HDFS y verifique el archivo de la pieza dentro del directorio de salida.
A continuación se muestra la salida del programa de recuento de palabras.
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:~$
Conclusión
Este ejemplo aquí está en Java, también puede escribir un programa MapReduce en python. Ejecutamos con éxito un programa Hadoop MapReduce en un Hadoop Cluster en Ubuntu 16.04. Los pasos para ejecutar un programa Mapreduce en otros entornos Linux siguen siendo los mismos. Asegúrese de que, antes de ejecutar el programa, su clúster de Hadoop esté en funcionamiento y que su archivo de entrada también esté presente en HDFS.