Cómo optimizar el algoritmo de programación de tareas de Hadoop
En primer lugar, el clúster de Hadoop se basa en un único servidor. Solo un nodo de servidor es responsable de programar los trabajos de todo el clúster. El principal trabajo específico es segmentar trabajos con grandes cantidades de datos y. especifique qué nodos trabajadores realizan el trabajo de mapa, qué nodos trabajadores reducen el trabajo, se comunican con los nodos trabajadores y reciben sus señales de latido, sirven como entradas de acceso de usuarios, etc. En segundo lugar, cada nodo trabajador del clúster es equivalente a un órgano que ejecuta trabajos específicos asignados por el nodo maestro. Estos nodos se dividen en dos categorías. Una categoría recibe trabajos fragmentados y realiza trabajos de mapeo. La otra categoría es responsable de contabilizar el trabajo cartográfico realizado previamente de acuerdo con reglas acordadas.
El rastreador de tareas envía periódicamente una señal de latido al rastreador de trabajos ejecutando un bucle simple. La señal de latido le dice a JobTracker si TaskTracker está activo y TaskTracker indica si está listo. El rastreador de tareas indica si una nueva tarea está lista para ejecutarse. Una vez que TaskTracker está listo para aceptar una tarea, JobTracker selecciona y asigna la tarea de la lista de prioridades de tareas. La ejecución de una tarea de Mapa o Reducción está determinada por la ranura de tarea del TaskTracker. El programador de tareas predeterminado primero llenará los espacios de tareas de Mapa inactivos antes de procesar las tareas de Reducción. Por lo tanto, el rastreador de trabajos asigna una tarea de Mapa al rastreador de tareas si cumple con el requisito de tener al menos un espacio de tarea libre; de lo contrario, se selecciona una tarea de Reducir para ello. El primer paso de Task Tracker para ejecutar una tarea es localizar el archivo de la tarea copiando el archivo JAR de la tarea desde el sistema de archivos ****-enjoyment. El segundo paso es que TaskTracker cree una nueva carpeta local para la tarea y extraiga los archivos de la tarea en ese directorio. El tercer paso es que el rastreador de tareas cree una nueva instancia de TaskRunner para ejecutar la tarea.
El esquema de programación predeterminado de la plataforma Hadoop es JobQueueTaskScheduler, que es una estrategia de programación que ejecuta tareas en el orden en que llegan. Este método es relativamente simple. Como nodo de control maestro, JobTracker solo necesita seleccionar los trabajos que se ejecutarán en el orden en que llegan. Por supuesto, esto tiene algunas desventajas, porque la plataforma Hadoop ejecuta de forma predeterminada trabajos en todo el clúster, por lo que si un trabajo de ejecución prolongada ingresa al período de ejecución, provocará que una gran cantidad de otros trabajos no se ejecuten durante un largo período. tiempo. Este tipo de trabajo de larga duración y baja prioridad provocará un bloqueo grave del trabajo, lo que hará que la eficiencia operativa de la plataforma sea baja. La solución proporcionada por la plataforma Hadoop para este mecanismo FIFO (First INAnd First Out) es llamar al método SetJobPriority() para lograr una programación equilibrada estableciendo el nivel de peso del trabajo.
Fair Scheduler es un programador "justo" cuyo objetivo es permitir que cada usuario utilice de manera justa la potencia informática del clúster Hadoop. Cuando solo se ejecuta un trabajo, obtiene los recursos de todo el clúster. A medida que se envían más trabajos a la tabla de trabajos, la plataforma Hadoop asigna de manera justa períodos de inactividad en el clúster a cada trabajo que debe ejecutarse. Incluso si algunos trabajos tardan mucho en ejecutarse, la plataforma aún tiene la capacidad de completar esos trabajos a corto plazo en un tiempo razonable [3]. El programador justo admite la preferencia de recursos. Cuando un grupo de recursos no recibe un disfrute justo dentro de un cierto período de tiempo, cancelará los recursos excesivos que ha obtenido y asignará estos recursos liberados a esos recursos.
El programador de capacidad en la plataforma Hadoop es aportado por Yahoo. En el programador, se configuran tres objetos granulares: colas, trabajos y tareas.
En la estrategia, la plataforma puede tener varias colas de trabajos. Después de enviar cada cola de trabajos, se obtendrá una cierta cantidad de recursos de TaskTracker. El proceso de programación específico es el siguiente.
(1) Seleccione la cola y ordénela de pequeña a grande según el uso del grupo de recursos hasta que encuentre un trabajo adecuado.
(2) Seleccione un trabajo. En la cola seleccionada actualmente, ordénelo según la hora de envío del trabajo y la prioridad de peso del trabajo, y seleccione el trabajo apropiado. Por supuesto, al seleccionar un trabajo, también debe considerar si el trabajo seleccionado excede el límite de recursos actual y si la memoria en el grupo de recursos es suficiente para satisfacer las necesidades de las tareas del trabajo.
(3) Seleccione tareas y seleccione las tareas apropiadas según el uso de recursos del nodo local.
Aunque la plataforma Hadoop viene con múltiples programadores, las tres soluciones de programación anteriores son difíciles de satisfacer las complejas necesidades de aplicaciones de la empresa. Por lo tanto, como usuario personalizado de la plataforma, normalmente necesitarás desarrollar tu propio programador. El programador de Hadoop se carga y se llama en JobTracker, por lo que el desarrollo de un programador personalizado debe comprender el mecanismo interno del archivo de clase JobTracker. Como componente central de la plataforma Hadoop, JobTracker monitorea el funcionamiento de todo el clúster y gestiona la programación de recursos. Cada rastreador de tareas informa a JobTracker información básica sobre las máquinas que administra a través de latidos cada 3 segundos, incluido el uso de memoria, la memoria restante y la cantidad de ranuras libres [5]. [5] Una vez que JobTracker encuentra un intervalo de tiempo inactivo, llama al método AssignTask en el programador para asignar tareas a TaskTracker.