Hadoop – Reductor en Map-Reduce

Map-Reduce es un modelo de programación que se divide principalmente en dos fases, es decir, Map Phase y Reduce Phase. Está diseñado para procesar los datos en paralelo que se dividen en varias máquinas (Nodes). Los programas Java de Hadoop consisten en la clase Mapper y la clase Reducer junto con la clase del controlador. Reducer es la segunda parte del modelo de programación Map-Reduce. Mapper produce la salida en forma de pares clave-valor que funcionan como entrada para Reducer. 

Pero antes de enviar estos pares clave-valor intermedios directamente al Reductor, se realizará un proceso que barajará y clasificará los pares clave-valor de acuerdo con sus valores clave, lo que significa que el valor de la clave es el principal factor decisivo para la clasificación. La salida generada por Reducer será la salida final que luego se almacena en HDFS (Sistema de archivos distribuidos de Hadoop) . Reducer realiza principalmente algunas operaciones de cálculo como suma, filtración y agregación. De forma predeterminada, la cantidad de reductores utilizados para procesar la salida del Mapper es 1, que es configurable y el usuario puede cambiarlo según los requisitos.

Entendamos el Reducer en Map-Reduce:

Reducer-In-MapReduce

Aquí, en la imagen de arriba, podemos observar que hay múltiples Mapper que están generando los pares clave-valor como salida. La salida de cada mapeador se envía al clasificador que ordenará los pares clave-valor de acuerdo con su valor clave. La mezcla también se lleva a cabo durante el proceso de clasificación y la salida se enviará a la parte Reductora y se producirá la salida final. 

Tomemos un ejemplo para entender el funcionamiento de Reducer . Supongamos que tenemos los datos de una facultad universitaria de todos los departamentos almacenados en un archivo CSV. En caso de que queramos encontrar la suma de los salarios de los profesores según su departamento, podemos hacer su departamento. título como clave y salarios como valor . El Reductor realizará la operación de suma en este conjunto de datos y producirá el resultado deseado. 

La cantidad de reductores en la tarea Map-Reduce también afecta las siguientes funciones:

  1. Los gastos generales del marco aumentan.
  2. Costo de falla Reduce
  3. Aumentar el equilibrio de carga.

Una cosa que también debemos recordar es que siempre habrá una asignación uno a uno entre los reductores y las teclas. Una vez que se realiza todo el proceso de Reducer, la salida se almacena en el archivo de pieza (nombre predeterminado) en HDFS (Sistema de archivos distribuidos de Hadoop). En el directorio de salida en HDFS, Map-Reduce siempre crea un archivo _SUCCESS y un archivo part-r-00000 . El número de archivos parciales depende del número de reductores, en caso de que tengamos 5 reductores, el número del archivo parcial será de part-r-00000 a part-r-00004. Por defecto, estos archivos tienen el nombre de tipo part-a-bbbbb . Se puede cambiar manualmente, todo lo que tenemos que hacer es cambiar la propiedad a continuación en nuestro código de controlador de Map-Reduce.

// Here we are changing output file name from part-r-00000 to GeeksForGeeks
job.getConfiguration().set("mapreduce.output.basename", "GeeksForGeeks")

El Reducer Of Map-Reduce consta principalmente de 3 procesos/fases:

  1. Barajar: Barajar ayuda a transportar datos del Mapeador al Reductor requerido. Con la ayuda de HTTP, el marco requiere la partición aplicable de la salida en todos los mapeadores.
  2. Ordenar: en esta fase, la salida del mapeador que en realidad son los pares clave-valor se ordenará en función de su valor clave .
  3. Reducir: una vez que se ha realizado la mezcla y la clasificación, el Reductor combina el resultado obtenido y realiza la operación de cálculo según el requisito. La propiedad OutputCollector.collect() se usa para escribir la salida en el HDFS. Recuerde que la salida del Reducer no se ordenará.

Nota: Tanto la reproducción aleatoria como la clasificación se ejecutan en paralelo.

Configuración del número de reductores en Map-Reduce:

  1. Con línea de comando: mientras ejecutamos nuestro programa Map-Reduce, podemos cambiar manualmente el número de Reducer con el controlador mapred.reduce.tasks .   
  2. Con la instancia de JobConf: en nuestra clase de controlador, podemos especificar la cantidad de reductores usando la instancia de job.setNumReduceTasks(int)
    Por ejemplo job.setNumReduceTasks(2), Aquí tenemos 2 Reductores. también podemos hacer Reducers a 0 en caso de que solo necesitemos un trabajo de Map.
// Ideally The number of Reducers  in a Map-Reduce must be set to:
0.95 or 1.75 multiplied by (<no. of nodes> * <no. of maximum containers per node>)

Publicación traducida automáticamente

Artículo escrito por dikshantmalidev y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *