Hadoop MapReduce Join & Counter con ejemplo

¿Qué es Unirse a Mapreduce?

Únete a Mapreduce La operación 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. Unir 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 otro conjunto de datos, entonces se distribuye un conjunto de datos más pequeño a cada nodo 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 combinan esos registros para formar registros de salida.

Tipos de Unión

Dependiendo del lugar donde se realiza la unión real, las uniones en Hadoop se clasifican en:

1. Unión del lado del mapa – Cuando el asignador realiza la unión, se denomina unión del lado del mapa. En este tipo, la unión se realiza antes de que la función de mapa consuma realmente los datos. Es obligatorio que la entrada a cada mapa tenga la forma de una partición y esté ordenada. Además, debe haber el mismo número de particiones y deben estar ordenadas por clave de unión.

2. Unión del lado reducido – Cuando la unión la realiza el reductor, se denomina unión del lado reducido. En esta unión no es necesario tener un conjunto de datos en forma estructurada (o particionado).

Aquí, el procesamiento del lado del mapa emite la clave de unión y las tuplas correspondientes de ambas tablas. Como efecto de este procesamiento, todas las tuplas con la misma clave de unión caen en el mismo reductor que luego une los registros con la misma clave de unión.

En el siguiente diagrama se muestra un flujo de proceso general de uniones en Hadoop.

Tipos de uniones en Hadoop MapReduce
Tipos de uniones en Hadoop MapReduce

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). La clave Dept_ID es común en ambos archivos. El objetivo es utilizar MapReduce Join para combinar estos archivos.

Ejemplo de reducción de mapa
archivo 1
Ejemplo de reducción de mapa
archivo 2

Entrada: El conjunto de datos de entrada es un archivo txt, NombreDepto.txt y FuerzaDepto.txt

Descargue archivos de entrada desde aquí

Asegúrese de tener Hadoop instalado. Antes de comenzar con el proceso real del ejemplo de MapReduce Join, cambie el usuario a "hduser" (id utilizado durante la configuración de Hadoop, puede cambiar al ID de usuario utilizado durante la configuración de Hadoop).

su - hduser_

Ejemplo de reducción de mapa

Paso 1) Copie el archivo zip a la ubicación de su elección

Ejemplo de reducción de mapa

Paso 2) Descomprimir el archivo zip

sudo tar -xvf MapReduceJoin.tar.gz

Ejemplo de reducción de mapa

Paso 3) Ir al directorio MapReduceJoin/

cd MapReduceJoin/

Ejemplo de reducción de mapa

Paso 4) Iniciar Hadoop

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

Ejemplo de reducción de mapa

Paso 5) DeptStrength.txt y DeptName.txt son los archivos de entrada utilizados para este programa de ejemplo MapReduce Join.

Estos archivos deben copiarse a HDFS usando el siguiente comando:

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

Ejemplo de reducción de mapa

Paso 6) Ejecute el programa usando el siguiente comando:

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

Ejemplo de reducción de mapa

Ejemplo de reducción de mapa

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 comando.

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

Ejemplo de reducción de mapa

Los resultados también se pueden ver a través de una interfaz web como:

Ejemplo de reducción de mapa

Ahora selecciona 'Explorar el sistema de archivos' y navegar hasta /output_mapreducejoin

Ejemplo de reducción de mapa

Abierto parte-r-00000

Ejemplo de reducción de mapa

Se muestran los resultados

Ejemplo de reducción de mapa

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 utilizar un nombre diferente para el directorio de salida.

¿Qué es el contador en MapReduce?

A Contador en MapReduce es un mecanismo que se utiliza para recopilar y medir información estadística sobre trabajos y eventos de MapReduce. Los contadores mantienen un registro de diversas estadísticas de trabajos en MapReduce, como la cantidad 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 (mapa o reduce) 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 realizar un seguimiento de registros válidos e inválidos de un conjunto de datos de entrada.

Tipos de contadores MapReduce

Básicamente existen 2 tipos de MapReduce Contadores

  1. Contadores integrados de Hadoop:Hay algunos contadores de Hadoop integrados que existen por trabajo. A continuación se muestran los grupos de contadores integrados.
    • Contadores de tareas 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 – Recopila información como el número de bytes leídos o escritos por una tarea.
    • Contadores FileInputFormat – Recopila información de una cantidad de bytes leídos a través de FileInputFormat
    • Contadores FileOutputFormat – Recopila información de una cantidad de bytes escritos a través de FileOutputFormat
    • Contadores de trabajos – Estos contadores son utilizados por JobTracker. Las estadísticas recopiladas por ellos incluyen, por ejemplo, la cantidad de tareas iniciadas para un trabajo.
  2. Contadores definidos por el usuario

Además de los contadores integrados, un usuario puede definir sus propios contadores utilizando funcionalidades similares proporcionadas por 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 faltantes e inválidos. Archivo de datos de entrada utilizado en este tutorial Nuestro conjunto de datos de entrada es un archivo CSV, VentasEne2009.csv

public static class MapClass
            extends MapReduceBase
            implements Mapper<LongWritable, Text, Text, Text>
{
    static enum SalesCounters { MISSING, INVALID };
    public void map ( LongWritable key, Text value,
                 OutputCollector<Text, Text> output,
                 Reporter reporter) throws IOException
    {
        
        //Input string is split using ',' and stored in 'fields' array
        String fields[] = value.toString().split(",", -20);
        //Value at 4th index is country. It is stored in 'country' variable
        String country = fields[4];
        
        //Value at 8th index is sales data. It is stored in 'sales' variable
        String 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í, Contadores de ventas es un contador definido usando 'enumeración'. se usa para contar DESAPARECIDO como INVÁLIDO registros de entrada.

En el fragmento de código, si 'país' El campo tiene longitud cero, entonces falta su valor y, por lo tanto, el contador correspondiente. Contadoresdeventas.MISSING se incrementa.

A continuación, si 'ventas' El campo comienza con un " entonces el registro se considera INVÁLIDO. Esto se indica mediante un contador incremental. Contadoresdeventas.INVÁLIDO.