Los Node Labels de YARN permiten particionar nodos para aislar físicamente distintos tipos de trabajos durante la programación. Puede crear Node Labels según sus requisitos empresariales y los tipos de nodo.
Contexto
En YARN, las colas y los Node Labels son dos estrategias clave para la gestión y programación de recursos, cada una con un propósito distinto.
Una cola es un método lógico para particionar recursos que permite asignar los recursos de cómputo de un clúster a diferentes grupos de usuarios o aplicaciones según proporciones predefinidas. Esto garantiza que los distintos equipos o cargas de trabajo reciban una parte equitativa de los recursos, incluso en un entorno de clúster compartido.
Los Node Labels permiten etiquetar nodos específicos en un clúster y tomar decisiones de asignación de recursos más granulares basadas en estas etiquetas. Esto resulta especialmente importante para aplicaciones que requieren características de hardware específicas, como GPU o nodos con alta capacidad de memoria.
Puede combinar colas y Node Labels para lograr una gestión de recursos y una programación de trabajos más flexibles.
Las estrategias de particionamiento comunes incluyen la categorización por tipo de carga de trabajo (como trabajos de sincronización de datos, por lotes o en tiempo real) o por tipo de instancia (como nodos optimizados para CPU, optimizados para memoria o acelerados por GPU).
Requisitos previos
Ha creado un clúster con el servicio YARN habilitado. Para obtener más información, consulte Create a cluster.
El programador de YARN del clúster debe ser Capacity Scheduler. Actualmente, solo Capacity Scheduler admite la programación basada en particiones con Node Labels.
Ejemplo
Escenario
Una organización divide las colas de su clúster en una cola de almacén de datos (warehouse) y una cola de análisis de datos (analysis) según las necesidades de recursos de cada equipo. También particiona los recursos del clúster en dos particiones: batch y streaming. El equipo de almacén de datos utilizará el 60 % de los recursos de batch y el 70 % de los recursos de streaming. El equipo de análisis de datos utilizará el 30 % de los recursos de batch y el 20 % de los recursos de streaming. Para los recursos sin etiqueta, se asigna el 60 % a la cola warehouse y el 30 % a la cola analysis, mientras que el 10 % restante se reserva para otras necesidades. El siguiente diagrama ilustra este particionamiento.
Este ejemplo muestra cómo combinar colas y etiquetas para aislar físicamente los trabajos sin conexión de otras cargas de trabajo. Los siguientes pasos utilizan un clúster Data Lake EMR-5.16.0. El procedimiento es similar para otros tipos de clúster.
Paso 1: Editar colas de recursos
Inicie sesión en la consola de EMR on ECS. En la columna Actions de su clúster objetivo, haga clic en Services. A continuación, haga clic en YARN.
En la página del servicio YARN, haga clic en la pestaña Edit Resource Queue y luego en Manage Queues.
-
En la página Manage Child Queues, agregue la cola
warehousey la colaanalysis.La Queue Capacity de la cola warehouse es del 60 %, y la Queue Capacity de la cola analysis es del 30 %. El 10 % restante se asigna a la cola predeterminada. El Status de todas las colas está establecido en Enabled.
-
La página ahora se muestra de la siguiente manera.
La página Edit Resource Queue muestra que el programador actual es capacity-scheduler. Bajo la cola root, hay tres subcolas: analysis (Queue Capacity 30 %, Max. Capacity 100 %), warehouse (Queue Capacity 60 %, Max. Capacity 100 %) y default (Queue Capacity 10 %, Max. Capacity 100 %). El estado de las tres colas es Running. Una etiqueta Not Effective Yet aparece junto al servicio YARN en la parte superior de la página, lo que indica que los cambios de configuración aún no se han desplegado.
-
Haga clic en Not Effective Yet. En el cuadro de diálogo Configurations to Take Effect, haga clic en refresh_queues para aplicar la configuración de la cola.
En la tabla Custom Effective Configuration, busque la fila correspondiente al componente ResourceManager y al archivo de configuración
capacity-scheduler.xml.
Paso 2: Crear particiones de nodos
-
Haga clic en la pestaña Partitions y luego en Add Partition para agregar la partición
streaming.-
En el cuadro de diálogo Add Partition, especifique el Partition name, seleccione un Partition Type y seleccione los Associated Node Groups.
Parámetro
Descripción
Partition Name
En este ejemplo, el nombre de la partición es
streaming.Partition Type
En este ejemplo, seleccione
exclusive. Esto garantiza que solo los contenedores que soliciten una partición coincidente se programen en estos nodos.Associated Node Groups
En este ejemplo, la partición
streamingestá asociada conemr-task-3. Este grupo de nodos consiste en instancias optimizadas para memoria, adecuadas para trabajos en tiempo real que almacenan grandes cantidades de datos intermedios con baja latencia. Asigne grupos de nodos según las características de su negocio y los tipos de instancia de nodo.
-
-
Repita los pasos para agregar la partición
batch. El resultado final es el siguiente.Después de crear las particiones, la página Partitions enumera tres particiones: DEFAULT_PARTITION (Accessible Queues: all, Node Group: emr-core, Partition Type: Exclusive), streaming (Accessible Queues: root y root.default, Node Group: emr-task-3, Partition Type: Exclusive) y batch (Accessible Queues: root y root.default, Node Groups: emr-task-1 y emr-task-2, Partition Type: Exclusive). Un indicador de estado naranja Not Effective Yet aparece en la barra de navegación superior. Debe hacer clic en Deploy and Take Effect para aplicar la configuración.
-
Después de agregar las particiones, haga clic en Not Effective Yet. En el cuadro de diálogo Configurations to Take Effect, haga clic en refresh_labels para completar la configuración de la partición de nodos.
En la sección Custom Effective Configuration, el archivo de configuración para el componente ResourceManager es
node-labels.xml. -
Una vez que la configuración surta efecto, podrá consultar los Total Resources de cada partición.
Por ejemplo, los recursos totales de la partición streaming se muestran como
<memory:4096, vCores:8>, y los recursos totales de la partición batch se muestran como<memory:8192, vCores:16>.
Paso 3: Habilitar la gestión de asociación entre particiones y colas
En la página Edit Resource Queue, seleccione las particiones
batchystreamingen secuencia, y luego haga clic en Enable Partition-queue Association Management.-
En el cuadro de diálogo Enable Partition-queue Association Management, configure la Queue Capacity para cada cola dentro de las particiones.
Para la partición
batch, establezca la Queue Capacity deanalysisen 30 %, la Queue Capacity dewarehouseen 60 %, y la Queue Capacity dedefaulten 10 %.Para la partición
streaming, establezca la Queue Capacity deanalysisen 20 %, la Queue Capacity dewarehouseen 70 %, y la Queue Capacity dedefaulten 10 %.
NotaEn este ejemplo, todas las colas tienen permiso para ejecutarse en todas las particiones. En una configuración real, puede establecer la capacidad de una cola específica en una partición en 0 para garantizar que solo los trabajos de las colas designadas se ejecuten en dicha partición.
Después de configurar la asociación entre particiones y colas, haga clic en Not Effective Yet. En el cuadro de diálogo Configurations to Take Effect, haga clic en refresh_queues para aplicar los cambios.
-
En la interfaz web de YARN, compruebe que las particiones de nodos estén activas.
-
Página Node Labels
La tabla en esta página incluye las columnas Label Name, Label Type, Num Of Active NMs y Total Resources. Muestra tres registros:
<DEFAULT_PARTITION>(Exclusive Partition, 2 active NMs, resources: memory:8192, vCores:16), batch (Exclusive Partition, 2 active NMs, resources: memory:8192, vCores:16) y streaming (Exclusive Partition, 1 active NM, resources: memory:4096, vCores:8). -
Página Scheduler
En la sección Application Queues de la página Scheduler, hay tres particiones configuradas: DEFAULT_PARTITION (
<memory:8192, vCores:16>), Partition: batch (<memory:8192, vCores:16>) y Partition: streaming (<memory:4096, vCores:8>). Tanto la partición de etiqueta de nodo batch como la streaming contienen la cola root con las subcolas default, warehouse y analysis. El tipo de Scheduler es Capacity Scheduler, con una asignación mínima de<memory:32, vCores:1>y una asignación máxima de<memory:4096, vCores:8>.
-
Paso 4: Enviar un trabajo a una partición
Después de configurar las colas y etiquetas del clúster, puede enviar trabajos para que se ejecuten en colas y nodos específicos.
-
Inicie sesión en el nodo maestro del clúster y vaya al directorio de instalación de Spark, por ejemplo,
/opt/apps/SPARK3/spark-3.3.1-hadoop3.2-1.1.1.cd /opt/apps/SPARK3/spark-3.3.1-hadoop3.2-1.1.1 -
En un entorno de producción, debe cargar el archivo JAR de su trabajo para enviar un trabajo de Spark. Este ejemplo utiliza
spark-submitpara enviar un trabajo../bin/spark-submit --class org.apache.spark.examples.SparkLR --master yarn --deploy-mode cluster --driver-memory 1g --executor-memory 2g --conf spark.yarn.am.nodeLabelExpression=batch --conf spark.yarn.executor.nodeLabelExpression=batch --queue=warehouse examples/jars/spark-examples_2.12-3.3.1.jarParámetro
Descripción
class
La clase principal de la aplicación:
org.apache.spark.examples.SparkLR.master
El entorno de ejecución para el trabajo:
yarn.deploy-mode
La ubicación donde se lanza el driver:
cluster.driver-memory
La cantidad de memoria para el driver:
1g.executor-memory
La cantidad de memoria por ejecutor:
2g.spark.yarn.am.nodeLabelExpression
La expresión de etiqueta para los nodos donde puede ejecutarse ApplicationMaster:
batch.spark.yarn.executor.nodeLabelExpression
La expresión de etiqueta para los nodos donde pueden ejecutarse los ejecutores:
batch.queue
La cola específica de YARN a la que se envía el trabajo:
warehouse.NotaSi solo especifica una cola y no especifica una partición al enviar un trabajo, este se envía a la partición predeterminada de la cola. Puede cambiar la partición predeterminada de una cola en la página Edit Resource Queue haciendo clic en Edit para esa cola.
En la interfaz web del clúster YARN, puede comprobar que el trabajo SparkLR enviado a la cola
warehousese está ejecutando en la particiónbatch.
Las colas de YARN y las particiones de nodos proporcionan conjuntamente aislamiento lógico y físico de recursos, lo que evita interferencias entre trabajos y garantiza la estabilidad de las aplicaciones críticas.
Preguntas frecuentes
-
Cuando envío un trabajo de Spark mediante
spark-submit, ¿por qué el trabajo no se ejecuta en la partición especificada?Compruebe si el parámetro
spark.yarn.executor.nodeLabelExpressionestá incluido en su comando de envío.Confirme que su configuración en las páginas Partitions y Edit Resource Queue esté activa.
-
Cuando envío un trabajo de Spark mediante
spark-submit, ¿por qué el estado del trabajo permanece comoACCEPTED?Confirme que la cola a la que se envió el trabajo tenga recursos disponibles. De lo contrario, espere a que otros trabajos liberen recursos antes de volver a enviar el trabajo.
-
Si la cola tiene recursos disponibles, haga clic en el ID del trabajo en la interfaz web de YARN para ver los detalles del trabajo y revise la descripción de Diagnostics. Es posible que vea un mensaje: "Queue's AM resource limit exceeded". Esto indica que, aunque la cola tiene recursos, los recursos del Application Master (AM) son insuficientes. Los recursos de una cola se asignan tanto al AM como a los ejecutores. Los recursos del AM se utilizan para lanzar la aplicación principal, mientras que los recursos de los ejecutores se usan para el procesamiento de tareas. Por lo tanto, debe ajustar la proporción de asignación de recursos de la cola y aumentar la proporción de recursos del AM para garantizar que los trabajos de Spark se puedan enviar correctamente.
Diagnostics: [Wed Dec 25 16:24:10 +0800 2024] Application is added to the scheduler and is not yet activated. Queue's AM resource limit exceeded. Details : AM Partition = <DEFAULT_PARTITION>; AM Resource Request = <memory:2048, vCores:1>; Queue Resource Limit for AM = <memory:2048, vCores:4>; User AM Resource Limit of the queue = <memory:224, vCores:1>; Queue AM Resource Usage = <memory:896, vCores:1>; Puede ajustar la proporción de recursos del AM en la página de configuración del servicio YARN. Busque el archivo
capacity_scheduler.xmly modifique el valor del elemento de configuraciónyarn.scheduler.capacity.maximum-am-resource-percent. Por ejemplo, cámbielo de 0.25 a 0.5.
NotaAjuste el porcentaje predeterminado de recursos del AM definido por
yarn.scheduler.capacity.maximum-am-resource-percentsegún su caso de uso específico. Por ejemplo, si su clúster procesa frecuentemente una gran cantidad de trabajos con volúmenes de datos pequeños, puede aumentar el porcentaje de recursos del AM.
Documentación relacionada
Para obtener más información sobre los principios de programación de YARN, consulte YARN schedulers.
Para obtener más información sobre los principios de las particiones de nodos de YARN, consulte Use Node Labels.