Diagrama esquemático del proceso general de ejecución del programa de conteo de palabras

 

La etapa del mapa: transforma cada línea de datos de texto en datos kv como <palabra, 1>

reducir etapa: agregar un conjunto de datos kv de la misma palabra: acumular todos v

Nota: en el programa mapreduce,

Datos de entrada y salida en la etapa del mapa,

Datos de entrada y salida en la fase de reducción,

Los tipos deben ser los que implementan el marco de serialización HADOOP, como:

La cadena corresponde al texto

El entero corresponde a IntWritable

Long corresponde a LongWritable

 

Análisis de proceso:

Lado del mapa:

1) Cada fragmento de entrada será procesado por una tarea de mapa. De manera predeterminada, el tamaño de un bloque de HDFS (el predeterminado es 64M) es un fragmento. Por supuesto, también podemos establecer el tamaño del bloque. La salida del mapa se colocará temporalmente en un búfer de memoria en anillo (el tamaño del búfer es de 100M por defecto, controlado por la propiedad io.sort.mb), cuando el búfer está a punto de desbordarse (el valor predeterminado es el 80% del tamaño del búfer , Controlado por la propiedad io.sort.spill.percent), se creará un archivo de desbordamiento en el sistema de archivos local y los datos en el búfer se escribirán en este archivo.

2) Antes de escribir en el disco, el hilo primero divide los datos en el mismo número de particiones de acuerdo con el número de tareas de reducción, es decir, una tarea de reducción corresponde a una partición de datos. Esto se hace para evitar la incómoda situación de que a algunas tareas de reducción se les asigna una gran cantidad de datos, mientras que a algunas tareas de reducción se les asignan pocos datos o incluso ningún dato. De hecho, la partición es el proceso de hashing de datos. Luego ordene los datos en cada partición. Si el Combinador está configurado en este momento, los resultados ordenados se utilizarán para la operación Combia. El propósito de esto es permitir que se escriban en el disco la menor cantidad de datos posible.

3) Cuando la tarea de mapa genera el último registro, puede haber muchos archivos de desbordamiento y luego estos archivos deben fusionarse. Durante el proceso de fusión, las operaciones de clasificación y combinación se realizarán continuamente para dos propósitos: 1. Para minimizar la cantidad de datos escritos en el disco cada vez, 2. Para minimizar la cantidad de datos transmitidos por la red durante la siguiente etapa de replicación. Finalmente se fusionó en un archivo particionado y ordenado. Para reducir la cantidad de datos transmitidos a través de la red, los datos se pueden comprimir aquí, siempre que mapred.compress.map.out esté establecido en verdadero.

 

4) Copie los datos en la partición a la tarea de reducción correspondiente. Alguien puede preguntar: ¿Cómo saben los datos en una partición a qué reducción corresponde? De hecho, la tarea de mapa se mantiene en contacto con su TaskTracker principal, y TaskTracker mantiene el pulso con JobTracker. Por lo tanto, JobTracker guarda la información macro de todo el clúster. Mientras la tarea de reducción obtenga la posición de salida del mapa correspondiente de JobTracker, está bien.

En este punto, se analiza el final del mapa. Entonces, ¿qué es exactamente Shuffle? El significado chino de Shuffle es "barajar". Si lo miramos de esta manera: los datos generados por un mapa se dividen en diferentes tareas de reducción a través de la partición del proceso hash, ¿es un proceso de barajar los datos? Ja ja.

Reducir lado:

1) Reducir recibirá datos de diferentes tareas del mapa, y se ordenan los datos de cada mapa. Si la cantidad de datos recibidos por el lado reducido es bastante pequeña, se almacena directamente en la memoria (el tamaño del búfer está controlado por la propiedad mapred.job.shuffle.input.buffer.percent, que representa el porcentaje de espacio de almacenamiento dinámico utilizado para este propósito), si la cantidad de datos Si se supera un cierto porcentaje del tamaño del búfer (determinado por mapred.job.shuffle.merge.percent), los datos se fusionan y se escriben en el disco.

2) A medida que aumenta el número de archivos de escritura de desbordamiento, los subprocesos de fondo los fusionarán en un archivo ordenado más grande. Esto se hace para ahorrar tiempo para fusiones posteriores. De hecho, no importa en el lado del mapa o en el lado reducido, MapReduce realiza repetidamente operaciones de clasificación y fusión, y ahora finalmente comprende por qué algunas personas dicen: la clasificación es el alma del hadoop.

3) Se generarán muchos archivos intermedios (escritos en el disco) durante el proceso de fusión, pero MapReduce hará que los datos escritos en el disco sean lo menos posible, y el resultado de la última fusión no se escribe en el disco, sino que se ingresa directamente a la función de reducción .

En este punto, el principio de funcionamiento de MapReduce finalmente se analiza, pero continuaré estudiando en profundidad, por favor preste atención a mi blog de seguimiento relacionado con hadoop.

Publicado 27 artículos originales · elogiado 0 · visitas 689

Supongo que te gusta

Origin blog.csdn.net/Mr_ye931/article/details/105547729
Recomendado
Clasificación