Estos contenidos se han traducido de forma automática para su comodidad, pero Huawei Cloud no garantiza la exactitud de estos. Para consultar los contenidos originales, acceda a la versión en inglés.
Actualización más reciente 2023-04-14 GMT+08:00

Principios básicos de YARN

La comunidad de código abierto de Apache presenta el marco de gestión de recursos unificado YARN para compartir clústeres de Hadoop, mejorar su escalabilidad y confiabilidad, y eliminar un cuello de botella de rendimiento de JobTracker en el marco de MapReduce inicial.

La idea fundamental de YARN es dividir las dos funcionalidades principales del JobTracker: la gestión de recursos y la programación/monitorización de trabajos, en daemons separados. La idea es tener un ResourceManager global (RM) y un ApplicationMaster por aplicación (AM).

Una aplicación es un solo trabajo en el sentido clásico de trabajos de MapReduce o un gráfico acíclico dirigido (DAG) de trabajos.

Arquitectura

ResourceManager es la esencia de la estructura en capas de YARN. Esta entidad controla un clúster completo y gestiona la asignación de aplicaciones a los recursos informáticos subyacentes. El ResourceManager asigna cuidadosamente varios recursos (computación, memoria, ancho de banda, etc.) a los NodeManagers subyacentes (agentes por nodo de YARN). ResourceManager también trabaja con ApplicationMasters para asignar recursos, y trabaja con NodeManagers para iniciar y supervisar sus aplicaciones subyacentes. En este contexto, el ApplicationMaster ha tomado parte del papel del TaskTracker anterior, y el ResourceManager ha tomado el papel del JobTracker.

ApplicationMaster gestiona cada instancia de una aplicación que se ejecuta en YARN. ApplicationMaster negocia recursos desde ResourceManager y trabaja con NodeManagers para supervisar la ejecución de contenedores y el uso de recursos (asignación de recursos de memoria y CPU).

El NodeManager gestiona cada nodo de un clúster de YARN. El NodeManager proporciona servicios por nodo en un clúster, desde la supervisión de la gestión de un contenedor a lo largo de su ciclo de vida hasta la supervisión de los recursos y el seguimiento del estado de sus nodos. MRv1 gestiona la ejecución de las tareas Map y Reduce a través de ranuras, mientras que NodeManager gestiona contenedores abstractos, que representan recursos por nodo disponibles para una aplicación en particular.

Figura 1 Arquitectura

Tabla 1 describe los componentes mostrados en Figura 1.

Tabla 1 Descripción de la arquitectura

Nombre

Descripción

Client

Cliente de un YARN application. Puede enviar una tarea a ResourceManager y consultar el estado operativo de una application mediante el cliente.

ResourceManager(RM)

RM gestiona y asigna de forma centralizada todos los recursos del clúster. Recibe información de informes de recursos de cada nodo (NodeManager) y asigna recursos a aplicaciones basándose en los recursos recopilados de acuerdo con una política especificada.

NodeManager(NM)

NM es el agente en cada nodo de YARN. Gestiona el nodo informático en el clúster Hadoop, establece comunicación con ResourceManger; monitoriza el ciclo de vida de containers; monitoriza el uso de recursos como la memoria y la CPU de cada container; rastrea el estado del nodo y gestiona los registros y servicios auxiliares utilizados por diferentes aplicaciones.

ApplicationMaster(AM)

AM (App Mstr en la figura anterior) es responsable de todas las tareas a través del ciclo de vida de un application. Las tareas incluyen las siguientes: Negociar con un planificador RM para obtener un recurso; asignar adicionalmente los recursos obtenidos a tareas internas (asignación secundaria de recursos); comunicarse con el NM para iniciar o detener tareas; supervisar el estado de ejecución de todas las tareas; y volver a aplicar recursos para las tareas para reiniciar las tareas cuando las tareas no se ejecuten.

Container

Una abstracción de recursos en YARN. Encapsula recursos multidimensionales (incluyidos solo memoria y CPU) en un nodo determinado. Cuando ApplicationMaster se aplica a recursos de ResourceManager, ResourceManager devuelve recursos a ApplicationMaster en un container. YARN asigna un container para cada tarea y la tarea solo puede usar los recursos encapsulados en el container.

En YARN, programadores de recursos organizan los recursos mediante colas jerárquicas. Esto garantiza que los recursos se asignen y compartan entre las colas, mejorando así el uso de los recursos del clúster. El modelo de asignación de recursos básicos de Superior Scheduler es el mismo que el de Capacity Scheduler, como se muestra en la siguiente figura.

Un programador mantiene la información de la cola. Puede enviar solicitudes a una o más colas. Durante cada latido de NM, el programador selecciona una cola de acuerdo con una regla de planificación específica, selecciona una aplicación en la cola y, a continuación, asigna recursos a la aplicación. Si los recursos no se pueden asignar a la aplicación debido al límite de algunos parámetros, el programador seleccionará otra aplicación. Después de la selección, el programador procesa la solicitud de recursos de esta aplicación. El programador da prioridad a las solicitudes de recursos locales primero, luego para recursos en el mismo rack y, finalmente, para recursos de cualquier máquina.

Figura 2 Modelo de asignación de recursos

Principio

El nuevo marco de Hadoop MapReduce se denomina MRv2 o YARN. YARN consta de ResourceManager, ApplicationMaster y NodeManager.

  • ResourceManager es un gestor de recursos global que gestiona y asigna recursos en el sistema. ResourceManager se compone de Scheduler y Applications Manager.
    • El programador asigna recursos del sistema a todas las aplicaciones en ejecución según las restricciones, como la capacidad y la cola (por ejemplo, asigna una cierta cantidad de recursos para una cola y ejecuta un número específico de trabajos). Asigna recursos en función de la demanda de las aplicaciones, utilizándose el container como unidad de asignación de recursos. Funcionando como una unidad de asignación de recursos dinámicos, Container encapsula recursos de memoria, CPU, disco y red, limitando así el recurso consumido por cada tarea. Además, el programador es un componente conectable. Puede diseñar nuevos programadores según sea necesario. YARN proporciona varios programadores directamente disponibles, como Fair Scheduler y Capacity Scheduler.
    • Applications Manager gestiona todas las aplicaciones del sistema e implica enviar aplicaciones, negociar con programadores sobre recursos, habilitar y supervisar ApplicationMaster y reiniciar ApplicationMaster cuando falla el inicio.
  • NodeManager es el gestor de recursos y tareas de cada nodo. Por un lado, el NodeManager informa periódicamente a ResourceManager el uso de recursos del nodo local y el estado de ejecución de cada Container. Por otro lado, el NodeManager recibe y procesa solicitudes de ApplicationMaster para iniciar o detener Containers.
  • ApplicationMaster es responsable de todas las tareas durante el ciclo de vida de una aplicación, estos canales incluyen lo siguiente:
    • Negociar con el programador de RM para obtener recursos.
    • Asignar recursos a componentes internos (asignación secundaria de recursos).
    • Comunicar con NodeManager para iniciar o detener tareas.
    • Supervisar el estado de ejecución de todas las tareas y vuelver a solicitar recursos para las tareas cuando las tareas no se ejecuten para reiniciarlas.

Principio de Capacity Scheduler

Capacity Scheduler es un programador multiusuario. Asigna recursos por cola y establece los recursos mínimos/máximos que se pueden usar para cada cola. Además, el límite superior de uso de recursos se establece para cada usuario para evitar el abuso de recursos. Los recursos restantes de una cola se pueden compartir temporalmente con otras colas.

Capacity Scheduler admite múltiples colas. Configura una cierta cantidad de recursos para cada cola y adopta la política de programación de la cola primero en entrar primero en salir (FIFO). Para evitar que las aplicaciones de un usuario utilicen exclusivamente los recursos de una cola, Capacity Scheduler establece un límite en el número de recursos utilizados por los trabajos enviados por un usuario. Durante la programación, Capacity Scheduler calcula primero el número de recursos necesarios para cada cola y selecciona la cola que requiere el menor número de recursos. A continuación, asigna recursos según la prioridad del trabajo y el tiempo en que se envían los trabajos, así como el límite de recursos y memoria. Capacity Scheduler admite las siguientes características:

  • Capacidad garantizada: como administrador del clúster MRS, puede establecer los límites inferior y superior del uso de recursos para cada cola. Todas las aplicaciones enviadas a esta cola comparten los recursos.
  • Alta flexibilidad: temporalmente, los recursos restantes de una cola se pueden compartir con otras colas. Sin embargo, dichos recursos deben liberarse en caso de que se envíe una nueva aplicación a la cola. Esta asignación flexible de recursos ayuda a mejorar notablemente el uso de los recursos.
  • Multitenancy: Varios usuarios pueden compartir un clúster y varias aplicaciones pueden ejecutarse simultáneamente. Para evitar el uso exclusivo de recursos por una sola aplicación, usuario o cola, el administrador del clúster de MRS puede agregar varias restricciones (por ejemplo, limitar las tareas simultáneas de una sola aplicación).
  • Protección asegurada: Se proporciona una lista de ACL para cada cola para limitar estrictamente el acceso del usuario. Puede especificar los usuarios que pueden ver el estado de su aplicación o controlar las aplicaciones. Además, el administrador del clúster MRS puede especificar un administrador de colas y un administrador del sistema del clúster.
  • Actualización dinámica de los archivos de configuración: los administradores de clústeres MRS pueden modificar dinámicamente los parámetros de configuración para gestionar clústeres en línea.

Cada cola en Capacity Scheduler puede limitar el uso de recursos. Sin embargo, el uso de recursos de una cola determina su prioridad cuando se asignan recursos a colas, lo que indica que las colas con menor capacidad son competitivas. Si el rendimiento de un clúster es grande, la programación de retardo permite a una aplicación renunciar a la programación entre máquinas o entre bastidores, y solicitar la planificación local.