Colección de citas famosas - Slogan de motivación - 7.3 Flujo de trabajo de MapReduce

7.3 Flujo de trabajo de MapReduce

(1) Primero, lea los datos de HDFS y divídalos.

(2) Cada pequeño fragmento inicia una tarea de mapa separada para procesar los datos de este fragmento. La entrada y la salida de la tarea del mapa son valores clave.

(3) Particione la salida clave-valor de cada mapa, luego ordénela, fusione, fusione y distribuya a todos los nodos reducidos para su procesamiento; este proceso se llama reproducción aleatoria. Por lo tanto, la cantidad de particiones generadas por el mapa depende de la cantidad de máquinas reducidas (nodos).

(4) Escriba el resultado de la reducción en HDFS.

Nota: No hay comunicación entre mapas y no hay intercambio directo de información entre reductores. Los usuarios no pueden controlar directamente el intercambio de datos entre nodos, todos son implementados por el propio marco MapReduce para reducir la dificultad de desarrollo.

Para el proceso del párrafo anterior, lo explicaremos con más detalle por etapas (módulos). Por conveniencia, supongamos que el clúster contiene solo dos nodos.

Primero, el módulo InputFormat lee el archivo de HDFS y verifica el formato. Luego, InputFormat dividirá los datos en varios segmentos; tenga en cuenta que este segmento es solo una definición lógica y no se mueve físicamente.

El lector de registros RR (Record Reader) lee la división de HDFS en función de la información de longitud de posición de la división y la genera en formato clave-valor (porque la función de mapa solo acepta entradas en clave-valor formato).

Ingrese el valor clave en la función de mapeo (la lógica de procesamiento la define el usuario) y genere el resultado intermedio.

Mezclar los resultados intermedios, es decir, dividir, ordenar, fusionar y fusionar, para obtener resultados en forma de lista-clave[valor]. Luego, los resultados de la mezcla se distribuyen a las tareas de reducción de cada nodo (tenga en cuenta que los datos se intercambiarán entre nodos en este momento).

La función de reducción analiza los datos de entrada (la lógica de procesamiento también está definida por el usuario) y los resultados del análisis se generan en formato clave-valor.

OutputFormat comprueba el formato de salida y otras configuraciones, como si el directorio de salida existe. Después de pasar la verificación, los resultados se escriben nuevamente en HDFS.

Un archivo grande se dividirá en muchos bloques de datos y se almacenará en cada DataNode de HDFS (cada bloque de datos tiene múltiples copias redundantes almacenadas en diferentes DataNodes). Por ejemplo, un archivo se divide en seis partes como se muestra a continuación. La fragmentación también procesa todo el archivo original, es decir, fusiona y redistribuye seis bloques (solo fusión lógica, no física). Por ejemplo, Split1 en la siguiente figura contiene todo el Bloque1 y parte del Bloque2.

——También se puede considerar que Block y Split no tienen relación a nivel lógico.

El número de cortes lo define el usuario. La fragmentación múltiple significa que los archivos se pueden procesar en paralelo, lo que refleja las ventajas de la informática distribuida. Pero cuantas más porciones, mejor, porque la cantidad de porciones es la cantidad de tareas de mapa, y cambiar entre tareas de mapa consume recursos de administración. Demasiados sectores afectarán la eficiencia de la ejecución.

Es habitual establecer el tamaño de la división en el mismo tamaño que el bloque, normalmente 64 MB o 128 MB, para evitar aumentar la sobrecarga de transmisión al dividir el bloque tanto como sea posible.

El número de mapas es el número de divisiones (como se mencionó anteriormente).

El importe de la reducción lo define el usuario. El principio para la mejor elección es que sea ligeramente menor que el número total de todos los espacios Reducir en el clúster (considere reservar algunos recursos para manejar posibles errores).

La barajada se divide en barajada del lado del mapa y barajada del lado de restauración.

La reproducción aleatoria del lado del mapa pasa por el siguiente proceso.

Los datos de entrada son valores clave procesados ​​por RecordReader y luego proporcionados a la tarea de Mapa. El usuario personaliza la función del mapa y el resultado es una lista (

Para reducir la sobrecarga de direccionamiento del disco y mejorar la eficiencia, los resultados del procesamiento del mapa no se escriben directamente en el disco, sino en el caché primero.

El proceso de desbordamiento no se activa hasta que el caché esté casi lleno. Primero, los datos en el caché se particionan, clasifican y fusionan:

La partición es para prepararse para el proceso. Las tareas se entregarán a Reducir más adelante, por lo que hay varias. Cada reductasks se divide en varias áreas. La función hash se utiliza de forma predeterminada y el usuario puede personalizarla.

Ordenar según palabras clave del diccionario. La clasificación es la operación predeterminada del sistema y no requiere la intervención del usuario.

Combine puede reducir el número de pares clave-valor. Por ejemplo, hay dos pares clave-valor

Después de completar la operación anterior, los datos en el caché se escribirán en el disco. Cabe señalar que para garantizar una recepción ininterrumpida de la salida del mapa, el caché no se llena por completo antes de que se active la escritura de desbordamiento. En cambio, la escritura en el disco comienza aproximadamente el 80% del tiempo y el 20% restante continúa recibiéndose. salida del mapa.

Si el proceso de desbordamiento ocurre varias veces, se formarán múltiples archivos de desbordamiento en el disco. Cuando la cantidad de archivos es mayor que un cierto valor (definido por el usuario), el sistema los fusionará en un archivo grande y lo almacenará en el disco. Este archivo de gran tamaño conserva los resultados de particiones, clasificación y fusión anteriores.

Preste atención a la diferencia entre fusionar y fusionar: por ejemplo, para la entrada

JobTracker rastreará la generación de archivos fusionados una vez que detecte que el archivo grande fusionado está completo. notificará a cada tarea de Reducir para extraer la parte de Caminar de su propia zona. Se completa la mezcla lateral del mapa.

El proceso de mezcla en el lado de Reducir es el siguiente

Cuando JobTracker lo notifica, cada tarea de Reducir obtendrá datos de múltiples tareas de Mapa y estos datos se almacenarán primero en el caché. .

Cuando el caché alcanza un cierto tamaño, también se activará una operación de desbordamiento: primero fusionar, luego fusionar y finalmente escribir en el disco.

De manera similar a Map Shuffle, cuando la cantidad de archivos desbordados en el disco alcanza el valor establecido por el usuario, se activará la combinación de archivos y los archivos grandes combinados eventualmente se enviarán a la tarea Reducir para su procesamiento.

Vale la pena mencionar que si la tarea recibida es muy pequeña y ni siquiera alcanza el límite superior del caché, entonces el sistema realizará el procesamiento de fusión en el caché, omitirá el paso de desbordamiento y transferirá directamente. los datos para Reducir la tarea en curso.

El proceso descrito anteriormente es desde la perspectiva del flujo de datos. Desde una perspectiva del sistema, el proceso de ejecución de MapReduce de aplicaciones escritas por el usuario es el siguiente:

Después de que el usuario inicia MapReduce, el programa se implementará en diferentes máquinas. Una máquina ejecutará JobTracker como máquina maestra y las otras máquinas ejecutarán TaskTracker como máquinas trabajadoras.

Asigna tareas de mapas y tareas de simplificación a cada trabajador.

Los datos leídos de HDFS se dividen en muchas divisiones mediante InputFormat. Los datos se envían a la tarea de Mapa (la lógica de procesamiento la escribe el usuario) y el formato de entrada es clave-valor. La cantidad de tareas del mapa es la misma que la cantidad de divisiones. Salida como una lista de valores clave.

La salida del mapa se almacena primero en el caché. Cuando alcanza una cierta escala, se activa la reescritura, es decir, la partición, la clasificación, la fusión y luego la escritura en el disco.

Después de fusionar los datos en el disco, cada tarea de Reducir elimina su propia partición, luego ejecuta la función Reducir definida por el usuario para procesar los datos y finalmente genera los resultados en formato clave-valor.

Escribe el archivo de resultados en HDFS.

Referencia:

https://www.icourse163.org/learn/XMU-1002335004#/learn/content? tipo=detalle&id=1214310152. sm=1