¿Cómo resolver el problema de la biblioteca MapReduce de R?
Todo comienza desde el programa de usuario en la parte superior, que se vincula a la biblioteca MapReduce e implementa las funciones de Map y Reduce más básicas. La secuencia de ejecución está marcada numéricamente en la figura.
1. La biblioteca MapReduce primero divide el archivo de entrada del programa de usuario en M partes (M está definida por el usuario), cada parte suele tener entre 16 MB y 64 MB y se divide en divisiones 0 ~ 4 como se muestra en el lado izquierdo de la figura; Luego use fork para copiar el proceso del usuario a otras máquinas en el clúster.
2. Una copia del programa de usuario se denomina programa principal y el resto se denomina trabajadores. El programa principal es responsable de programar y asignar trabajos (Asignar trabajos o Reducir trabajos) a los trabajadores inactivos. El número de trabajadores puede ser especificado por el usuario.
3. El trabajador asignado al trabajo de mapa comienza a leer los datos de entrada correspondientes a la división. El número de trabajos de mapa está determinado por M, y la división corresponde a pares clave-valor; a partir de los datos de entrada, cada par clave-valor se pasa como parámetro a la función de mapa, y los pares clave-valor intermedios generados por la función de mapa se almacenan en caché en la memoria.
4. Los pares clave-valor intermedios almacenados en caché se escribirán periódicamente en el disco local y se dividirán en regiones R. El tamaño de la región lo definirá el usuario. a Reducir trabajo; estas claves intermedias La ubicación del par de valores se informa al controlador maestro, que es responsable de reenviar la información al Reducir Trabajador. El programa maestro notificará al trabajador que distribuye el trabajo de reducción de la ubicación de la partición de la que es responsable (debe haber varias ubicaciones, porque los pares clave-valor intermedios generados por cada trabajo de mapa se pueden asignar a todas las particiones diferentes de R). Cuando Reduce Worker lee Al tomar todos los pares clave-valor intermedios de los que es responsable, primero los clasifica para que los pares clave-valor con el mismo valor clave se agrupen. La clasificación es necesaria porque diferentes claves pueden asignarse a la misma partición, que es el mismo trabajo de Reducir (con una cantidad menor de particiones).
6. El trabajador de reducción itera sobre los pares clave-valor intermedios ordenados y, para cada clave única, pasa la clave y el valor asociado a la función de reducción, que genera una salida que se agrega al archivo de salida de la partición. .
7. Cuando se completan todos los trabajos de Map y Reduce, el programa principal activa el programa de usuario real y la llamada a la función MapReduce devuelve el código del programa de usuario.
Una vez completadas todas las ejecuciones, la salida de MapReduce se colocará en los archivos de salida de la partición R (un archivo para cada trabajo de Reducción). Por lo general, los usuarios no necesitan fusionar estos archivos R, sino pasarlos como entrada a otro programa MapReduce para su procesamiento. Durante todo el proceso, los datos de entrada provienen del sistema de archivos distribuido subyacente (GFS), los datos intermedios se colocan en el sistema de archivos local y los datos de salida finales se escriben en el sistema de archivos distribuido subyacente (GFS). Además, también debemos prestar atención a la diferencia entre los trabajos de mapa/reducción y las funciones de mapa/reducción: los trabajos de mapa procesan una partición de datos de entrada y es posible que necesiten llamar a la función de mapa varias veces para procesar cada par clave-valor de entrada; El procesamiento del trabajo de reducción es el par clave-valor intermedio de una partición, durante el cual la función de reducción debe llamarse una vez para cada valor de clave diferente, y el trabajo de reducción eventualmente corresponderá a un archivo de salida.