Red de Respuestas Legales - Consulta de información - Cómo optimizar el algoritmo de programación de tareas de Hadoop

Cómo optimizar el algoritmo de programación de tareas de Hadoop

Primero, se presenta el mecanismo de operación distribuida de trabajos bajo la plataforma Hadoop, y luego se analizan y comparan los cuatro programadores de tareas que vienen con la plataforma Hadoop. Finalmente, a partir del análisis del archivo de clase JobTracker, se señala el trabajo necesario para crear un programador de tareas personalizado.

En primer lugar, el clúster de Hadoop se basa en un único servidor y solo un nodo de servidor es responsable de programar el funcionamiento de todo el clúster. El principal trabajo específico es dividir los trabajos de big data, especificar qué nodos trabajadores realizan el trabajo de mapeo, qué nodos trabajadores realizan el trabajo de restauración, comunicarse con los nodos trabajadores y aceptar sus señales de latido, y servir como puntos de acceso de los usuarios. En segundo lugar, cada nodo trabajador en el clúster es equivalente a un órgano que ejecuta un trabajo específico asignado por el nodo maestro. Estos nodos se dividirán en dos tipos: uno es para recibir trabajos de partición y realizar trabajos de mapeo. El otro se encarga de contar el trabajo cartográfico previo según las reglas acordadas.

Task-Tracker envía periódicamente señales de latido a JobTracker ejecutando un bucle simple. Esta señal de latido le indicará al rastreador de tareas TaskTracker si todavía está activo y TaskTracker indicará si está listo.

Ejecutar nuevas tareas está bien. Una vez que TaskTracker esté listo para aceptar una tarea, JobTracker seleccionará un trabajo de la lista de prioridades de trabajo y lo asignará. La ejecución de una tarea de Mapa o una tarea de Reducción está determinada por la ranura de tarea del TaskTracker. El programador de tareas predeterminado llenará primero los espacios de tareas de Mapa inactivos antes de procesar las tareas de Reducción. Por lo tanto, si TaskTracker cumple con el requisito de tener al menos un espacio de tarea libre, JobTracker le asignará una tarea de Mapa; de lo contrario, seleccionará una tarea de Reducir. Cuando Tasktracker ejecuta una tarea, el primer paso es copiar el archivo JAR del trabajo desde el sistema de intercambio de archivos. para localizar archivos de tareas. El segundo paso es que TaskTracker cree una nueva carpeta local para la tarea y descomprima los archivos del trabajo en ese directorio. El tercer paso es que Task-Tracker crea 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 se ejecuta en el orden en que llegan las tareas. Este método es relativamente simple. Como nodo maestro, JobTracker solo selecciona los trabajos para ejecutar según el orden en que llegan. Por supuesto, esto tiene ciertos inconvenientes. Debido a que la plataforma Hadoop ejecuta trabajos en todo el clúster de forma predeterminada, si un trabajo que lleva mucho tiempo ingresa al período de ejecución, provocará que una gran cantidad de otros trabajos no se ejecuten durante mucho tiempo. Estos empleos de baja prioridad y de larga duración generan una grave congestión laboral. de. La solución de la plataforma Hadoop a este mecanismo FIFO (primero en entrar, primero en salir) es llamar al método SetJobPriority() para realizar una programación equilibrada estableciendo el nivel de peso del trabajo.

Fair Scheduler (Fair Scheduler) es un programador "justo" cuyo objetivo es permitir que cada usuario disfrute de manera justa de 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 aumenta el número de trabajos enviados a la lista de trabajos, la plataforma Hadoop asignará espacios de tiempo libres en el clúster a cada trabajo que deba ejecutarse de manera justa, de modo que incluso si algunos trabajos tardan mucho en ejecutarse, la plataforma aún tiene la capacidad de realizar esos trabajos de corta duración en un tiempo razonable[3]. El planificador justo admite la preferencia de recursos. Cuando un grupo de recursos no se utiliza de manera justa dentro de un cierto período de tiempo, terminará el exceso de recursos obtenidos por el grupo de recursos y entregará estos recursos liberados a aquellos grupos de recursos con recursos insuficientes.

El programador de capacidad en la plataforma Hadoop es aportado por Yahoo. En el programador, se configuran tres objetos granulares: colas, trabajos y tareas. Según esta estrategia, la plataforma puede tener varias colas de trabajos y cada cola de trabajos obtendrá una cierta cantidad de recursos de TaskTracker después del envío. 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. Lo encontré.

(2) Seleccione un trabajo y ordénelo en la cola seleccionada actualmente según el orden de tiempo de envío del trabajo y la prioridad del peso del trabajo. Por supuesto, al seleccionar un trabajo, 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 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, a menudo necesitarás desarrollar tu propio programador. El programador de Hadoop se carga y se llama en JobTracker. Por lo tanto, para desarrollar un programador personalizado, es necesario comprender los aspectos internos del archivo de clase JobTracker.

Como componente central de la plataforma Hadoop, JobTracker monitorea el funcionamiento de todo el clúster, administra y programa recursos. Cada Task-Tracker informa información básica sobre la máquina que administra al JobTracker a través de un latido cada 3 segundos, incluido el uso de la memoria, la memoria restante y la cantidad de ranuras libres [5].

Una vez que JobTracker encuentra un espacio libre, llamará al método AssignTask en el programador para asignar una tarea a TaskTracker.