Map-Reduce es un modelo de programación que se divide principalmente en dos fases Map Phase y Reduce Phase . Está diseñado para procesar los datos en paralelo que se dividen en varias máquinas (Nodes). HadoopJava _ _Los programas consisten en la clase Mapper y la clase Reducer junto con la clase del controlador. Hadoop Mapper es una función o tarea que se utiliza para procesar todos los registros de entrada de un archivo y generar la salida que funciona como entrada para Reducer. Produce la salida devolviendo nuevos pares clave-valor. Los datos de entrada deben convertirse en pares clave-valor, ya que Mapper no puede procesar los registros de entrada sin procesar o las tuplas (pares clave-valor). El mapeador también genera algunos pequeños bloques de datos mientras procesa los registros de entrada como un par clave-valor. discutiremos los diversos procesos que ocurren en Mapper, sus características clave y cómo se generan los pares clave-valor en Mapper.
Entendamos el Mapeador en Map-Reduce:
Mapper es un programa simple definido por el usuario que realiza algunas operaciones en divisiones de entrada según su diseño. Mapper es una clase base que el desarrollador o programador debe ampliar en sus líneas de código de acuerdo con los requisitos de la organización. el tipo de entrada y salida debe mencionarse en el argumento de la clase Mapper, que debe ser modificado por el desarrollador.
Por ejemplo:
Class MyMappper extends Mapper<KEYIN,VALUEIN,KEYOUT,VALUEOUT>
Mapper es la línea de código inicial que inicialmente interactúa con el conjunto de datos de entrada. Supongamos que si tenemos 100 bloques de datos del conjunto de datos que estamos analizando, en ese caso habrá 100 programas o procesos Mapper que se ejecutan en paralelo en máquinas (Nodes) y producen su propia salida conocida como salida intermedia que luego se almacena en Disco local, no en HDFS. La salida del mapeador actúa como entrada para Reducer, que realiza alguna operación de clasificación y agregación de datos y produce la salida final.
El mapeador consta principalmente de 5 componentes: entrada, divisiones de entrada, lector de registros, mapa y disco de salida intermedio. La Tarea de Mapa se completa con la aportación de todo este componente disponible.
- Entrada: La entrada son registros o conjuntos de datos que se utilizan para fines de análisis. Estos datos de entrada se establecen con la ayuda de InputFormat . Ayuda a identificar la ubicación de los datos de entrada que se almacenan en HDFS (Sistema de archivos distribuidos de Hadoop).
- Divisiones de entrada: son responsables de convertir los datos de entrada físicos a alguna forma lógica para que Hadoop Mapper pueda manejarlos fácilmente. Las divisiones de entrada se generan con la ayuda de InputFormat . Un gran conjunto de datos se divide en muchas divisiones de entrada que dependen del tamaño del conjunto de datos de entrada. Habrá un mapeador separado asignado para cada división de entrada. Las divisiones de entrada solo hacen referencia a los datos de entrada, estos no son los datos reales. Los DataBlocks no son el único factor que decide el número de divisiones de entrada en un Map-Reduce. podemos configurar manualmente el tamaño de las divisiones de entrada en mapred.max.split.sizepropiedad mientras se ejecuta el trabajo. Todas estas divisiones de entrada son utilizadas por cada uno de los bloques de datos. El tamaño de las divisiones de entrada se mide en bytes. Cada división de entrada se almacena en alguna ubicación de memoria (strings de nombre de host). Map-Reduce coloca las tareas del mapa cerca de la ubicación de la división lo más cerca posible. La división de entrada con el tamaño más grande se ejecutó primero para que el tiempo de ejecución del trabajo se pueda minimizar.
- Record-Reader: Record-Reader es el proceso que se ocupa de la salida obtenida de las divisiones de entrada y genera su propia salida como pares clave-valor hasta que finaliza el archivo. A cada línea presente en un archivo se le asignará el Byte-Offset con la ayuda de Record-Reader. De manera predeterminada, Record-Reader usa TextInputFormat para convertir los datos obtenidos de las divisiones de entrada en pares clave-valor porque Mapper solo puede manejar pares clave-valor.
- Mapa: el par clave-valor obtenido de Record-Reader se alimenta al Mapa, que genera un conjunto de pares de pares clave-valor intermedios.
- Disco de salida intermedia: finalmente, la salida del par clave-valor intermedio se almacenará en el disco local como salida intermedia. No es necesario almacenar los datos en HDFS, ya que es una salida intermedia. Si almacenamos estos datos en HDFS, el costo de escritura será mayor debido a su función de replicación. También aumenta su tiempo de ejecución. Si de alguna manera se termina el trabajo de ejecución, en ese caso, también es difícil limpiar esta salida intermedia disponible en HDFS. La salida intermedia siempre se almacena en el disco local, que se limpiará una vez que el trabajo complete su ejecución. En el disco local, esta salida de Mapper se almacena primero en un búfer cuyo tamaño predeterminado es de 100 MB, que se puede configurar con la propiedad io.sort.mb. La salida del mapeador se puede escribir en HDFS si y solo si el trabajo es solo un trabajo de mapa. En ese caso, no habrá una tarea de reducción, por lo que la salida intermedia es nuestra salida final que se puede escribir en HDFS. El número de tareas de Reducer se puede hacer cero manualmente con job.setNumReduceTasks(0). Esta salida de Mapper no es útil para el usuario final, ya que es una salida temporal útil solo para Reducer.
Cómo calcular el número de mapeadores en Hadoop:
El número de bloques del archivo de entrada define el número de tareas de mapa en la fase de mapa de Hadoop,
que se puede calcular con la ayuda de la siguiente fórmula.Mapeador = (tamaño total de datos)/ (tamaño de división de entrada)
Por ejemplo: para un archivo de tamaño 10 TB (Tamaño de datos) donde el tamaño de cada bloque de datos es de 128 MB (tamaño de división de entrada), el número de mapeadores será de alrededor de 81920.
Publicación traducida automáticamente
Artículo escrito por dikshantmalidev y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA