Proceso paralelo de Hadoop, qué mecanismo se utiliza para controlarlo
Solo necesita una línea de código para ejecutar un trabajo de MapReduce: JobClient.runJon(conf), cuatro entidades involucradas en la ejecución del trabajo:
1.JobClient escribe código y configura el trabajo , Enviar tarea.
2.JobTracker: inicializa trabajos, asigna trabajos y coordina la ejecución de trabajos. Este es un programa java, la clase principal es JobTracker.
3. TaskTracker: División de tareas después de ejecutar el trabajo, es decir, ejecutar tareas de Mapa o Reducir después de asignar datos.
?4. HDFS: guarda datos del trabajo, información de configuración, etc., y guarda los resultados del trabajo.
El proceso de ejecución general del trabajo Map/Reduce:
?Escritura de código----gt; configuración del trabajo?----gt??Envío del trabajo?----; gt; ?Asignación y ejecución de tareas de mapas?----gt; ?¿Procesamiento de resultados intermedios?----gt;?¿Reducir la asignación y ejecución de tareas?----gt;?Resultados de salida
Y para cada uno La ejecución de un trabajo, que incluye:
?Preparación de entrada? ----gt;?Ejecución del trabajo? ----gt;?Resultados de salida
Envío de trabajo JobClient:
?El método runJob de JobClient genera una instancia de Jobclient y llama a su método submitJob, y luego runJob inicia el ciclo y llama al bucle El método getTaskCompetionEvents obtiene la instancia de TaskCompletionEvent, sondea el progreso del trabajo cada segundo (las actualizaciones de progreso y estado se introducirán más adelante), escribe el progreso en la consola, muestra el contador del trabajo cuando se completa el trabajo y registra el error. a la consola si el trabajo falla.
Proceso de envío de trabajos con el método .submitJob:
1. Solicite un nuevo JobId de JobTracker.
2. Verifique la ruta relacionada con el trabajo, si la ruta es incorrecta, se devolverá un error.
3. Calcule los fragmentos de entrada del trabajo y su información de segmentación.
?4. Copie los recursos (archivos jar, archivos de configuración, etc.) necesarios para ejecutar el trabajo en el HDFS compartido y
copie varias copias (control de parámetros, valor predeterminado). es 10) Se accede mediante tasktracker y los sectores calculados se copian a HDFS.
?5. Llame al método submitJob() del objeto JobTracker para enviar realmente el trabajo, indicando al JobTracker que el trabajo está listo para su ejecución.
Job inicializa JobTracker:
?JobTracker recibe la llamada al método submitJob y coloca la llamada en una cola interna para su programación e inicialización por parte del programador de trabajos.
Cuando se programa una tarea, JobTracker creará un objeto JobInProgress que representa la tarea y encapsulará la información de la tarea y del registro en el objeto para rastrear el estado y el progreso de la tarea.
?El proceso de inicialización es la función del método initTasks del objeto JobInProgress.
Pasos de inicialización:
1. Lea la información de job.split correspondiente a la tarea desde HDFS para prepararse para la inicialización posterior.
?2. Crear e inicializar mapas y reducir tareas.
Determine la cantidad de tareas de mapa en función de la información de fragmentación de datos, luego genere un objeto TaskInProgress para cada tarea de mapa para procesar la fragmentación de datos y primero colóquelo en nonRunningMapCache para que JobTracker pueda asignar tareas. A continuación, utilice el método setNumReduceTasks() para establecer el número de tareas de restauración según la propiedad mapred.reduce.tasks en JobConf y luego cree tareas de mapa de la misma manera.
?3. Finalmente, cree dos tareas de inicialización para el mapa y reduzca la inicialización.
Distribución de tareas JobTracker:
Mensajería HeartBeat: El rastreador de tareas ejecuta un bucle simple que envía un latido al JobTracker a intervalos regulares. El latido le dice al JobTracker si está activo y actúa como un canal de mensajes para pasar información adicional (solicitudes de nuevas tareas). ) Como parte del latido, el rastreador de tareas indica si está listo para ejecutar una nueva tarea y, de ser así, el rastreador de trabajos le asigna una tarea.
Asigne el trabajo al que pertenece la tarea: antes de que el rastreador de trabajos asigne la tarea, debe determinar el trabajo al que pertenece la tarea. Más adelante se presentarán varios algoritmos de programación de trabajos. El valor predeterminado es un programador de trabajos de primero en entrar, primero en salir.
Asignación de tareas de mapa y reducción: el rastreador de tareas tiene un número fijo de espacios para tareas. El rastreador de tareas puede ejecutar múltiples tareas de Mapa y Reducción simultáneamente, pero la cantidad específica de ranuras está determinada por la cantidad de núcleos y el tamaño de la memoria del rastreador de tareas. Idealmente, estas tareas serán de datos locales, aunque posiblemente sean locales de rack; de lo contrario, serán tareas de restauración. La asignación de tareas de restauración es simple: el rastreador de trabajos simplemente selecciona la siguiente tarea de la lista de tareas de restauración para ejecutar y la ejecuta, independientemente de la localización de los datos.
TaskTracker de ejecución de tareas:
Cuando TaskTracker recibe una nueva tarea, necesita ejecutar la tarea localmente. El primer paso para ejecutar una tarea es localizar la configuración inyectada, los datos, los programas y otra información requerida por la tarea de localización a través de localizedJob.
?1. Datos localizados: copie job.split, job.jar (en el caché distribuido) del sistema de archivos ****-enjoyment y escriba la información de configuración de la tarea en job.xml. /p>
?2. Cree un nuevo directorio de trabajo local: tasktracker insertará el archivo job.jar en este directorio de trabajo.
3. Llame al método launchTaskForJob para publicar la tarea (se creará una nueva instancia de TaskRunner para ejecutar la tarea). Si es una tarea de Mapa, se habilitará MapTaskRunner. Se habilitará ReduceTaskRunner. TaskRunner permitirá que una nueva JVM ejecute cada tarea de Map/Reduce para evitar que el rastreador de tareas falle por razones de procedimiento, pero aún es posible reutilizar la JVM entre diferentes tareas; discutiremos la reutilización de las JVM de tareas más adelante.
?Para un solo Mapa, el proceso simple de ejecución de la tarea es:
?1. Asignar parámetros de ejecución de la tarea
?2. archivo temporal Información de la tarea (el proceso secundario es el proceso principal que ejecuta las tareas de mapa y reducción)
?3.3.3.3.