¿Qué es Join en Mapreduce?
La operación Mapreduce Join se utiliza para combinar dos grandes conjuntos de datos. Sin embargo, este proceso implica escribir mucho código para realizar la operación de unión real. La unión de dos conjuntos de datos comienza comparando el tamaño de cada conjunto de datos. Si un conjunto de datos es más pequeño en comparación con el otro conjunto de datos, el conjunto de datos más pequeño se distribuye a todos los nodos de datos del clúster.
Una vez que se distribuye una combinación en MapReduce, Mapper o Reducer utilizan el conjunto de datos más pequeño para realizar una búsqueda de registros coincidentes del conjunto de datos grande y luego combinar esos registros para formar registros de salida.
En este tutorial, aprenderá:
- ¿Qué es una unión en MapReduce?
- Tipos de unión
- Cómo unir dos conjuntos de datos: Ejemplo de MapReduce
- ¿Qué es Counter en MapReduce?
- Tipos de contadores MapReduce
- Ejemplo de contadores
Tipos de unión
Dependiendo del lugar donde se realiza la combinación real, las combinaciones en Hadoop se clasifican en:
1. Unión del lado del mapa: cuando el asignador realiza la combinación, se llama combinación del lado del mapa. En este tipo, la combinación se realiza antes de que la función de mapa consuma los datos. Es obligatorio que la entrada a cada mapa tenga la forma de una partición y esté ordenada. Además, debe haber un número igual de particiones y debe estar ordenado por la clave de combinación.
2. Unión de lado reducido: cuando la unión la realiza el reductor, se denomina unión de lado reducido. No hay necesidad en esta unión de tener un conjunto de datos en forma estructurada (o particionada).
Aquí, el procesamiento del lado del mapa emite la clave de combinación y las tuplas correspondientes de ambas tablas. Como efecto de este procesamiento, todas las tuplas con la misma clave de combinación caen en el mismo reductor que luego une los registros con la misma clave de combinación.
En el siguiente diagrama se muestra un flujo de proceso general de uniones en Hadoop.
Cómo unir dos conjuntos de datos: Ejemplo de MapReduce
Hay dos conjuntos de datos en dos archivos diferentes (que se muestran a continuación). El Key Dept_ID es común en ambos archivos. El objetivo es utilizar MapReduce Join para combinar estos archivos
Entrada: el conjunto de datos de entrada es un archivo txt, DeptName.txt y DepStrength.txt
Descargar archivos de entrada desde aquí
Asegúrese de tener Hadoop instalado. Antes de comenzar con el proceso real de ejemplo de unión de MapReduce, cambie el usuario a 'hduser' (la identificación utilizada durante la configuración de Hadoop, puede cambiar a la identificación de usuario utilizada durante la configuración de Hadoop).
su - hduser_
Paso 1) Copie el archivo zip en la ubicación que elija
Paso 2) Descomprime el archivo zip
sudo tar -xvf MapReduceJoin.tar.gz
Paso 3) Vaya al directorio MapReduceJoin /
cd MapReduceJoin/
Paso 4) Inicie Hadoop
$HADOOP_HOME/sbin/start-dfs.sh
$HADOOP_HOME/sbin/start-yarn.sh
Paso 5) DeptStrength.txt y DeptName.txt son los archivos de entrada utilizados para este programa de ejemplo de MapReduce Join.
Estos archivos deben copiarse a HDFS usando el siguiente comando:
$HADOOP_HOME/bin/hdfs dfs -copyFromLocal DeptStrength.txt DeptName.txt /
Paso 6) Ejecute el programa usando el siguiente comando:
$HADOOP_HOME/bin/hadoop jar MapReduceJoin.jar MapReduceJoin/JoinDriver/DeptStrength.txt /DeptName.txt /output_mapreducejoin
Paso 7) Después de la ejecución, el archivo de salida (llamado 'part-00000') se almacenará en el directorio / output_mapreducejoin en HDFS
Los resultados se pueden ver usando la interfaz de línea de comandos
$HADOOP_HOME/bin/hdfs dfs -cat /output_mapreducejoin/part-00000
Los resultados también se pueden ver a través de una interfaz web como-
Ahora seleccione 'Examinar el sistema de archivos' y navegue hasta / output_mapreducejoin
Parte abierta -r-00000
Se muestran los resultados
NOTA: Tenga en cuenta que antes de ejecutar este programa la próxima vez, deberá eliminar el directorio de salida / output_mapreducejoin
$HADOOP_HOME/bin/hdfs dfs -rm -r /output_mapreducejoin
La alternativa es usar un nombre diferente para el directorio de salida.
¿Qué es Counter en MapReduce?
Un contador en MapReduce es un mecanismo utilizado para recopilar y medir información estadística sobre trabajos y eventos de MapReduce. Los contadores realizan un seguimiento de varias estadísticas de trabajos en MapReduce, como el número de operaciones realizadas y el progreso de la operación. Los contadores se utilizan para el diagnóstico de problemas en MapReduce.
Los contadores de Hadoop son similares a poner un mensaje de registro en el código de un mapa o reducir. Esta información podría ser útil para el diagnóstico de un problema en el procesamiento de trabajos de MapReduce.
Normalmente, estos contadores en Hadoop se definen en un programa (mapear o reducir) y se incrementan durante la ejecución cuando ocurre un evento o condición particular (específico de ese contador). Una muy buena aplicación de los contadores de Hadoop es rastrear registros válidos e inválidos de un conjunto de datos de entrada.
Tipos de contadores MapReduce
Básicamente, existen 2 tipos de contadores MapReduce
- Contadores integrados de Hadoop : hay algunos contadores integrados de Hadoop que existen por trabajo. A continuación se muestran los grupos de contadores integrados:
- Contadores de tareas de MapReduce : recopila información específica de la tarea (por ejemplo, número de registros de entrada) durante su tiempo de ejecución.
- Contadores del sistema de archivos : recopilan información como el número de bytes leídos o escritos por una tarea
- Contadores de FileInputFormat : recopila información de una cantidad de bytes leídos a través de FileInputFormat
- Contadores de FileOutputFormat : recopila información de una cantidad de bytes escritos a través de FileOutputFormat
- Contadores de trabajos: JobTracker utiliza estos contadores. Las estadísticas recopiladas por ellos incluyen, por ejemplo, el número de tareas iniciadas para un trabajo.
- Contadores definidos por el usuario
Además de los contadores integrados, un usuario puede definir sus propios contadores utilizando funcionalidades similares proporcionadas por los lenguajes de programación. Por ejemplo, en Java 'enum' se utilizan para definir contadores definidos por el usuario.
Ejemplo de contadores
Un ejemplo de MapClass con contadores para contar el número de valores perdidos y no válidos. Archivo de datos de entrada utilizado en este tutorial Nuestro conjunto de datos de entrada es un archivo 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"));}}}
El fragmento de código anterior muestra un ejemplo de implementación de contadores en Hadoop Map Reduce.
Aquí, SalesCounters es un contador definido usando 'enum' . Se utiliza para contar registros de entrada NO VÁLIDOS y FALTANTES .
En el fragmento de código, si el campo 'país' tiene una longitud cero, entonces falta su valor y, por lo tanto, se incrementa el contador correspondiente SalesCounters.MISSING .
A continuación, si el campo 'ventas' comienza con ", entonces el registro se considera NO VÁLIDO. Esto se indica incrementando el contador SalesCounters.INVALID.