Funciones de código abierto mejoradas de Yarn
Programación de tareas basada en prioridades
En el mecanismo nativo de programación de recursos de Yarn, si todos los recursos del clúster de Hadoop están ocupados por los trabajos de MapReduce enviados anteriormente, los trabajos enviados más tarde se mantendrán en estado pendiente hasta que se ejecuten todos los trabajos en ejecución y se liberen los recursos.
El clúster MRS proporciona el mecanismo de programación de prioridades de tareas. Con esta función, puede definir trabajos de diferentes prioridades. Los trabajos de alta prioridad pueden adelantarse a los recursos liberados de trabajos de baja prioridad aunque los trabajos de alta prioridad se envíen más tarde. Los trabajos de baja prioridad que no se inician se suspenderán a menos que los trabajos de alta prioridad se completen y se liberen recursos, entonces se puedan iniciar correctamente.
Esta característica permite que los servicios controlen los trabajos informáticos de manera más flexible, logrando así una mayor utilización de los recursos del clúster.
La reutilización de contenedores entra en conflicto con la programación de prioridades de tareas. Si se habilita la reutilización de contenedores, se están ocupando recursos y la programación de prioridades de tareas no tiene efecto.
Control de permisos de Yarn
El mecanismo de permiso de Hadoop Yarn se implementa a través de ACL. A continuación se describe cómo conceder diferentes controles de permisos a diferentes usuarios:
- Admin ACL
Se especifica un administrador de O&M para el clúster YARN. yarn.admin.acl determina la ACL Admin. El administrador del clúster O&M puede acceder a la interfaz de usuario web de ResourceManager y operar nodos de NodeManager, colas y NodeLabel, pero no puede enviar tareas.
- Queue ACL
Para facilitar la gestión de usuarios en el clúster, los usuarios o grupos de usuarios se dividen en varias colas a las que pertenece cada usuario y grupo de usuarios. Cada cola contiene permisos para enviar y gestionar aplicaciones (por ejemplo, terminar cualquier aplicación).
Funciones de código abierto:
Actualmente, Yarn admite los siguientes roles para los usuarios:
- Administrador de Clúster O&M
- Administrador de colas
- Usuario común
Sin embargo, las APIs (como la interfaz de usuario web, la API de REST y la API de Java) proporcionado por Yarn no admite el control de permisos específicos de función. Por lo tanto, todos los usuarios tienen el permiso para acceder a la información de la aplicación y del clúster, que no cumple con los requisitos de aislamiento en el escenario de multitenant.
Esta es una función mejorada.
En el modo de seguridad, la gestión de permisos se mejora para las API, como la interfaz de usuario web, la API de REST y la API de Java proporcionada por Yarn. El control de permisos se puede realizar en función de los roles de usuario.
Los permisos basados en roles son los siguientes:
- Administrador de clúster O&M: realiza operaciones de gestión en el clúster de Yarn, como acceder a la interfaz de usuario web ResourceManager, actualizar colas, configurar NodeLabel y realizar conmutación activa/en espera.
- Administrador de colas: tiene el permiso para modificar y ver colas gestionadas por el clúster Yarn.
- Usuario común: tiene el permiso para modificar y ver las aplicaciones autoenviadas en el clúster de Yarn.
Principio del programador Superior (autodesarrollado)
Superior Scheduler es un motor de programación diseñado para el sistema de gestión de recursos distribuidos Hadoop Yarn. Es un programador de alto rendimiento y de nivel empresarial diseñado para grupos de recursos convergentes y requisitos de servicio de inquilinos múltiples.
Superior Scheduler logra todas las funciones de programadores de código abierto, Fair Scheduler y Capacity Scheduler. En comparación con los programadores de código abierto, Superior Scheduler está mejorado en la política de programación de recursos multitenant empresarial, el aislamiento de recursos y el uso compartido entre los usuarios de un inquilino, el rendimiento de planificación, el uso de recursos del sistema y la escalabilidad del clúster. Superior Scheduler está diseñado para reemplazar a los programadores de código abierto.
Al igual que Fair Scheduler de código abierto y Capacity Scheduler, Superior Scheduler sigue la API del complemento de programador de Yarn para interactuar con el ResourceManager de Yarn para ofrecer funcionalidades de programación de recursos. Figura 1 muestra el diagrama general del sistema.
En Figura 1, Superior Scheduler consta de los siguientes módulos:
- Superior Scheduler Engine es un motor de programación de alto rendimiento con políticas de programación ricas.
- El complemento de Superior Yarn Scheduler funciona como un puente entre el Yarn ResourceManager y Superior Scheduler Engine e interactúa con Yarn ResourceManager.
El principio de programación de los programadores de código abierto es que los recursos coinciden con los trabajos basados en los latidos de los nodos informáticos. Específicamente, cada nodo informático envía periódicamente mensajes de latidos al ResourceManager de Yarn para notificar el estado del nodo e inicia el programador para asignar trabajos al propio nodo. En este mecanismo de programación, el período de programación depende del latido del corazón. Si aumenta la escala del clúster, puede producirse un cuello de botella en la escalabilidad del sistema y el rendimiento de programación. Además, debido a que los recursos coinciden con los trabajos, la precisión de programación de un programador de código abierto es limitada. Por ejemplo, la afinidad de datos es aleatoria y el sistema no admite políticas de programación basadas en carga. Es posible que el programador no tome la mejor decisión debido a la falta de la vista global de recursos al seleccionar trabajos.
Superior Scheduler adopta múltiples mecanismos de programación. Hay subprocesos de programación dedicados en Superior Scheduler, separando los latidos con la programación y la prevención de tormentas de latidos del sistema. Además, Superior Scheduler hace coincidir los trabajos con los recursos, proporcionando a cada trabajo programado una vista global de recursos y aumentando la precisión de la programación. En comparación con el programador de código abierto, Superior Scheduler sobresale en rendimiento del sistema, uso de recursos y afinidad de datos.
Aparte del rendimiento y la utilización mejorados del sistema, Superior Scheduler proporciona las siguientes características de programación principales:
- Varios grupos de recursos
Varios grupos de recursos ayudan a dividir lógicamente los recursos del clúster y compartirlos entre varios tenants o colas. La división de grupos de recursos admite recursos heterogéneos. Los grupos de recursos se pueden dividir exactamente de acuerdo con los requisitos sobre el aislamiento de recursos de la aplicación. Puede configurar más políticas para diferentes colas en un grupo.
- Programación multitenant (reserve, min, share y max) en cada grupo de recursos
Superior Scheduler proporciona una política flexible de programación jerárquica multitenant. Se pueden configurar diferentes políticas para diferentes tenants o colas que pueden acceder a diferentes grupos de recursos. En la siguiente figura se enumeran las políticas admitidas:
Tabla 1 Descripción de la política Nombre
Descripción
reserve
Esta política se utiliza para reservar recursos para un tenant. Aunque tenant no tiene trabajos disponibles, otro tenant no puede usar el recurso reservado. El valor puede ser un porcentaje o un valor absoluto. Si se configuran tanto el porcentaje como el valor absoluto, el porcentaje se calcula automáticamente en un valor absoluto y se utiliza el valor mayor. El valor predeterminado de reserve es 0. En comparación con el método de especificar un grupo de recursos dedicado y hosts, la política reserve proporciona una función de reserva flotante flexible. Además, debido a que no se especifican hosts específicos, se mejora la afinidad de los datos para el cálculo y se evita el impacto de los hosts defectuosos.
min
Esta política permite la preferencia de recursos mínimos. Otros tenants pueden usar estos recursos, pero el tenant actual tiene la prioridad de usarlos. El valor puede ser un porcentaje o un valor absoluto. Si se configuran tanto el porcentaje como el valor absoluto, el porcentaje se calcula automáticamente en un valor absoluto y se utiliza el valor mayor. El valor predeterminado es 0.
share
Esta política se utiliza para los recursos compartidos que no se pueden anular. Para usar estos recursos, el tenant actual debe esperar a que otros tenants completen trabajos y liberen recursos. El valor puede ser un porcentaje o un valor absoluto.
max
Esta política se utiliza para el máximo de recursos que se pueden utilizar. El tenant no puede obtener más recursos que el valor máximo permitido. El valor puede ser un porcentaje o un valor absoluto. Si se configuran tanto el porcentaje como el valor absoluto, el porcentaje se calcula automáticamente en un valor absoluto y se utiliza el valor mayor. Por valor predeterminado, no hay ninguna restricción en los recursos.
Figura 3 muestra la política de asignación de recursos del tenant.
En la figura anterior, Total indica el número total de recursos, no la política de programación.
En comparación con los programadores de código abierto, Superior Scheduler soporta tanto el porcentaje como el valor absoluto de los tenants para asignar recursos, abordando de manera flexible los requisitos de programación de recursos de los tenants de nivel empresarial. Por ejemplo, los recursos se pueden asignar de acuerdo con el valor absoluto de los tenants de nivel 1, evitando el impacto causado por los cambios de escala de clúster. Sin embargo, los recursos se pueden asignar de acuerdo con el porcentaje de asignación de subtenants, mejorando los usos de recursos en el tenant de nivel 1.
- Programación de recursos heterogénea y multidimensional
Superior Scheduler admite las siguientes funciones, excepto la programación de CPU y memoria:
- Las etiquetas de nodo se pueden usar para identificar atributos multidimensionales de nodos como GPU_ENABLED y SSD_ENABLED y se pueden programar basándose en estas etiquetas.
- Los grupos de recursos se pueden utilizar para agrupar recursos del mismo tipo y asignarlos a tenants o colas específicos.
- Programación justa de múltiples usuarios en un tenant
En un leaf tenant, varios usuarios pueden usar la misma cola para enviar trabajos. En comparación con los programadores de código abierto, Superior Scheduler admite la configuración de políticas flexibles de uso compartido de recursos entre diferentes usuarios en un mismo tenant. Por ejemplo, los usuarios VIP pueden configurarse con mayor ponderación de acceso a recursos.
- Programación con conocimiento de localidad de datos
Superior Scheduler adopta la política de programación de trabajo a nodo. Es decir, Superior Scheduler intenta programar trabajos especificados entre nodos disponibles para que el nodo seleccionado sea adecuado para los trabajos especificados. Al hacerlo, el programador tendrá una vista general del clúster y los datos. La localización está asegurada si existe la oportunidad de colocar las tareas más cerca de los datos. El programador de código abierto utiliza la política de programación de nodo a trabajo para hacer coincidir los trabajos apropiados con un nodo determinado.
- Reserva dinámica de recursos durante la programación de container
En un entorno informático heterogéneo y diversificado, algunos containers necesitan más recursos o múltiples recursos. Por ejemplo, el trabajo Spark puede requerir una gran memoria. Cuando tales containers compiten con containers que requieren menos recursos, los containers que requieren más recursos pueden no obtener recursos suficientes dentro de un período razonable. Los programadores de código abierto asignan recursos a trabajos, lo que puede provocar una reserva de recursos no razonable para estos trabajos. Este mecanismo conduce al desperdicio de recursos generales del sistema. Superior Scheduler difiere de los programadores de código abierto en los siguientes aspectos:
- Coincidencia basada en requisitos: Superior Scheduler programa los trabajos a los nodos y selecciona los nodos apropiados para reservar recursos para mejorar el tiempo de inicio de los contenedores y evitar el desperdicio.
- Reequilibrio de tenant: cuando la lógica de reserva está habilitada, los programadores de código abierto no cumplen con la política de uso compartido configurada. Superior Scheduler utiliza diferentes métodos. En cada período de programación, Superior Scheduler recorre todos los tenants e intenta equilibrar los recursos según la política de multitenant. Además, el programador superior intenta cumplir con todas las políticas (reserve, min y share) para liberar recursos reservados y dirigir los recursos disponibles a otros containers que deben obtener recursos bajo diferentes tenants.
- Control dinámico del estado de la cola (Open/Closed/Active/Inactive)
Se admiten varios estados de cola, lo que ayuda a los administradores de clústeres de MRS a gestionar y mantener varios tenants.
- Estado abierto (Open/Closed): si el estado es Open de forma predeterminada, se aceptan las aplicaciones enviadas a la cola. Si el estado es Closed, no se acepta ninguna aplicación.
- Estado activo (Active/Inactive): si el estado es Active de forma predeterminada, los recursos se pueden programar y asignar a las aplicaciones en el tenant. Los recursos no se programarán en colas en estado Inactive.
- Motivo pendiente de solicitud
Si la solicitud no se ha iniciado, indique las razones pendientes del trabajo.
Tabla 2 describe el resultado de la comparación de programadores de código abierto de Superior Scheduler y Yarn.
Programación |
Programador de código abierto de Yarn |
Superior Scheduler |
---|---|---|
Programación multitenant |
En clústeres homogéneos, se puede seleccionar Capacity Scheduler o Fair Scheduler y el clúster no es compatible con Fair Scheduler. Capacity Scheduler admite la programación por porcentaje y Fair Scheduler admite la programación por valor absoluto. |
|
Programación con conocimiento de localidad de datos |
La política de planificación de nodo a trabajo reduce la tasa de éxito de la localización de datos y potencialmente afecta al rendimiento de la ejecución de la aplicación. |
job-to-node scheduling policy puede conocer la ubicación de los datos con mayor precisión, y la tasa de aciertos del trabajo de la programación de localización de datos es mayor. |
Programación equilibrada basada en la carga de hosts |
No compatible |
Se puede lograr una programación equilibrada cuando Superior Scheduler considera la carga del host y la asignación de recursos durante la programación. |
Programación justa de múltiples usuarios en un tenant |
No compatible |
Soporta palabras clave default y others. |
Razón de espera de trabajo |
No compatible |
Las razones de espera de trabajo ilustran por qué un trabajo necesita esperar. |
En conclusión, Superior Scheduler es un programador de alto rendimiento con varias políticas de programación y es mejor que Capacity Scheduler en términos de funcionalidad, rendimiento, uso de recursos y escalabilidad.
Aislamiento duro de CPU
Yarn no puede controlar estrictamente los recursos de CPU utilizados por cada container. Cuando se usa el subsistema de CPU, un container puede ocupar recursos excesivos. Por lo tanto, CPUset se utiliza para controlar la asignación de recursos.
Para resolver este problema, los recursos de CPU se asignan a cada contenedor basándose en la relación de núcleos virtuales (vCores) a núcleos físicos. Si un container requiere un núcleo físico completo, el container lo tiene. Si un container necesita solamente algunos núcleos físicos, varios recipientes pueden compartir el mismo núcleo físico. La siguiente figura muestra un ejemplo de la cuota de CPU. La proporción dada de vCores a núcleos físicos es 2:1.
Función de código abierto mejorada: Optimización del rendimiento de reinicio
En general, el ResourceManager recuperado puede obtener aplicaciones en ejecución y completadas. Sin embargo, un gran número de aplicaciones completadas puede causar problemas tales como un arranque lento y un largo tiempo de ResourceManagers de conmutación/reinicio de HA.
Para acelerar el inicio, obtenga la lista de aplicaciones sin terminar antes de iniciar ResourceManagers. En este caso, la aplicación completada continúa siendo recuperada en el subproceso asíncrono de fondo. La siguiente figura muestra cómo se inicia la recuperación de ResourceManager.