MAPREDUCE CON HADOOP
Introducción y ejemplo práctico de MapReduce con
Hadoop
Christian Fernando Ariza Porras
http://www.christian-ariza.net
@cronosnull
Las preguntas que responderemos hoy:
• ¿Cuáles son los componentes de Hadoop?
• ¿Cuál es la principal diferencia entre Hadoop 1.x y 2.x?
• ¿Cómo crear una aplicación MapReduce en Java?
• ¿Cuáles son los problemas más frecuentes?¿Cómo evitarlos?
Componentes de Hadoop
Imagen tomada de: http://hortonworks.com/hadoop/yarn/
Hadoop 1.0
Hadoop 2.0
Imagen tomada de: http://www.ibm.com/developerworks/library/bd-hadoopyarn/
En el curso trabajaremos con
Hadoop 1.1.2.21
PRIMERA APLICACIÓN
MAPREDUCE
Contador de palabras
Contador de palabras
• Cuenta cuántas veces aparece cada palabra dentro de un texto.
• Entrada: Archivo(s) de texto.
• Salida: Archivo de texto, separado por tabulaciones, con parejas
palabra -> cantidad
Diseño
• Map: Recibe una línea de texto, la divide por palabras, cuenta
cuántas veces aparece cada palabra y genera la salida, palabra
-> cantidad, para esa línea.
• Reduce: recibe una palabra y su conjunto de valores, los agrega
y genera la salida palabra->cantidad.
Configuración del proyecto
Librerías de
Hadoop +
Dependencias
Map
Map
Extiende la clase org.apache.hadoop.mapreduce.Mapper;
Tipo de: <llaveEntrada, valorEntrada, llaveSalida, ValorSalida>
Los tipos de datos de las entradas y las salidas deben implementar la interfaz Writable.
Map
Cada map recibe una pareja llave, valor y el contexto de la tarea
Map
Usando el contexto escribe
la salida como parejas
llave, valor.
Reduce
Cada reduce recibe una llave, el conjunto de valores y el contexto de la tarea
Reduce
Y escribe la respuesta en forma de parejas llave, valor
CONFIGURACIÓN DEL TRABAJO
Objetos de configuración, jar, y nombre del Trabajo
Mapper y tipos de datos de las salidas del maper.
Reducer y tipos de datos de las llaves y los valores de salida
Formato y carpeta de entrada
Formato y carpeta de salida
Ejecutar el trabajo y esperar
Main…
Hora de ejecutar el trabajo
• Conectarse a la máquina cliente
• Subir los datos al hdfs
– hadoop fs -put <carpetalocal> <carpetaRemota>
• Ejecutar el jar en hadoop
– hadoop jar <archivo.jar> <clase> <parámetros>
– hadoop jar wordcount.jar uniandes.reuters.job.WordCounter input
output
• Ver la salida:
– Descargarla usando get: hadoop fs -get <archivoRemoto>
<carpetaLocal>
– Verla usando cat: hadoop fs -cat output/* | sort -k 2 -n
Problemas comunes
• Los tipos de datos no coinciden.
– Revisar el stacktrace, los tipos de datos de salida del mapper deben
coincidir con los de entrada del reducer. Revisar la documentación
de los InputFormat.
• La versión de java no es soportada (Unsupported major.minor
versión)
– Compilar usando una versión soportada por el jdk que está en el
cluster (la misma instalada, una menor también puede funcionar.)
• La ejecución en Hadoop es más lenta que una solución stand-
alone.
– No todos los problemas deben resolverse con Hadoop.
• La carpeta de salida ya existe...
¿Preguntas?
Manos a la obra
Top Related