Todos os produtos
Search
Central de documentação

E-MapReduce:Partition nodes using Node Labels

Última atualização: Jul 20, 2026

Os Node Labels do YARN permitem particionar nós para isolar fisicamente diferentes tipos de jobs durante o agendamento. Crie Node Labels com base nos requisitos do seu negócio e nos tipos de nó disponíveis.

Informações básicas

No YARN, filas e Node Labels são duas estratégias fundamentais para gerenciamento e agendamento de recursos, cada uma com um propósito distinto.

  • A fila é um método lógico de particionamento de recursos que permite alocar os recursos computacionais de um cluster para diferentes grupos de usuários ou aplicações com base em proporções predefinidas. Isso garante que equipes ou cargas de trabalho distintas recebam uma parte justa dos recursos, mesmo em um ambiente de cluster compartilhado.

  • Os Node Labels permitem marcar nós específicos em um cluster e tomar decisões de alocação de recursos mais granulares com base nessas tags. Esse recurso é essencial para aplicações que exigem características de hardware específicas, como GPUs ou nós com alta capacidade de memória.

Combine filas e Node Labels para obter um gerenciamento de recursos e agendamento de jobs mais flexível.

Estratégias comuns de particionamento incluem a categorização por tipo de carga de trabalho (como sincronização de dados, batch ou jobs em tempo real) ou por tipo de instância (como nós otimizados para CPU, otimizados para memória ou acelerados por GPU).

Pré-requisitos

  • Você criou um cluster com o service YARN ativado. Para mais informações, consulte Crie um cluster.

  • O agendador YARN do cluster deve ser o Capacity Scheduler. Atualmente, apenas o Capacity Scheduler oferece suporte ao agendamento baseado em partições com Node Labels.

Exemplo

Cenário

Uma organização divide as filas do cluster em uma fila de data warehouse (warehouse) e uma fila de análise de dados (analysis) com base nas necessidades de recursos da equipe. Ela também particiona os recursos do cluster em duas partições: batch e streaming. A equipe de data warehouse utilizará 60% dos recursos da partição batch e 70% dos recursos da partição streaming. A equipe de análise de dados usará 30% dos recursos da partição batch e 20% dos recursos da partição streaming. Para recursos sem rótulo, a fila warehouse recebe 60% e a fila analysis recebe 30%, com 10% reservados para outras necessidades. O diagrama a seguir ilustra esse particionamento.

image

Este exemplo demonstra como combinar filas e labels para isolar fisicamente jobs offline de outras cargas de trabalho. As etapas a seguir utilizam um cluster Data Lake EMR-5.16.0. O procedimento é semelhante para outros tipos de cluster.

Etapa 1: Edite filas de recursos

  1. Faça login no console do EMR on ECS. Na coluna Actions do cluster desejado, clique em Services. Em seguida, clique em YARN.

  2. Na página do service YARN, clique na aba Edit Resource Queue e, depois, clique em Manage Queues.

  3. Na página Manage Child Queues, adicione a fila warehouse e a fila analysis.

    • Defina a Queue Capacity da fila warehouse como 60% e a Queue Capacity da fila analysis como 30%. Os 10% restantes são alocados para a fila padrão. O Status de todas as filas deve estar definido como Enabled.

    • A página exibirá o seguinte layout.

      A página Edit Resource Queue mostra que o agendador atual é o capacity-scheduler. Sob a fila root, existem três subfilas: analysis (Queue Capacity 30%, Max. Capacity 100%), warehouse (Queue Capacity 60%, Max. Capacity 100%) e default (Queue Capacity 10%, Max. Capacity 100%). O status das três filas é Running. Um rótulo Not Effective Yet aparece ao lado do service YARN na parte superior da página, indicando que as alterações de configuração ainda não foram implantadas.

  4. Clique em Not Effective Yet. Na caixa de diálogo Configurations to Take Effect, clique em refresh_queues para aplicar a configuração da fila.

    Na tabela Custom Effective Configuration, localize a linha correspondente ao componente ResourceManager e ao arquivo de configuração capacity-scheduler.xml.

Etapa 2: Crie partições de nós

  1. Clique na aba Partitions e, em seguida, clique em Add Partition para adicionar a partição streaming.

    • Na caixa de diálogo Add Partition, especifique o Partition name, selecione um Partition Type e escolha os Associated Node Groups.

      Parâmetro

      Descrição

      Partition Name

      Neste exemplo, o nome da partição é streaming.

      Partition Type

      Selecione exclusive neste cenário. Essa opção garante que apenas containers solicitando uma partição correspondente sejam agendados nestes nós.

      Associated Node Groups

      A partição streaming está associada ao grupo emr-task-3 neste caso. Esse grupo consiste em instâncias otimizadas para memória, adequadas para jobs em tempo real que armazenam grandes volumes de dados intermediários com baixa latência. Atribua grupos de nós conforme as características do seu negócio e os tipos de instância de nó.

  2. Repita as etapas para adicionar a partição batch. O resultado final será o seguinte.

    Após criar as partições, a página Partitions lista três entradas: DEFAULT_PARTITION (Accessible Queues: all, Node Group: emr-core, Partition Type: Exclusive), streaming (Accessible Queues: root e root.default, Node Group: emr-task-3, Partition Type: Exclusive) e batch (Accessible Queues: root e root.default, Node Groups: emr-task-1 e emr-task-2, Partition Type: Exclusive). Um indicador de status laranja Not Effective Yet aparece na barra de navegação superior. Clique em Deploy and Take Effect para aplicar a configuração.

  3. Depois de adicionar as partições, clique em Not Effective Yet. Na caixa de diálogo Configurations to Take Effect, clique em refresh_labels para concluir a configuração da partição de nós.

    Na seção Custom Effective Configuration, o arquivo de configuração para o componente ResourceManager é node-labels.xml.

  4. Quando a configuração entrar em vigor, visualize os Total Resources de cada partição.

    Por exemplo, os recursos totais da partição streaming aparecem como <memory:4096, vCores:8>, enquanto os recursos totais da partição batch são exibidos como <memory:8192, vCores:16>.

Etapa 3: Ative o gerenciamento de associação partição-fila

  1. Na página Edit Resource Queue, selecione as partições batch e streaming sequencialmente e clique em Enable Partition-queue Association Management.

  2. Na caixa de diálogo Enable Partition-queue Association Management, configure a Queue Capacity para cada fila dentro das partições.

    • Para a partição batch, defina a Queue Capacity da fila analysis como 30%, a Queue Capacity da fila warehouse como 60%, e a Queue Capacity da fila default como 10%.

    • Na partição streaming, configure a Queue Capacity da fila analysis para 20%, a Queue Capacity da fila warehouse para 70%, e a Queue Capacity da fila default para 10%.

    Nota

    Neste exemplo, todas as filas têm permissão para executar em todas as partições. Em uma configuração real, defina a capacidade de uma fila específica em uma partição como 0 para garantir que apenas jobs das filas designadas executem naquela partição.

  3. Após configurar a associação partição-fila, clique em Not Effective Yet. Na caixa de diálogo Configurations to Take Effect, clique em refresh_queues para aplicar as alterações.

  4. Verifique se as partições de nós estão ativas na interface web do YARN.

    • Página Node Labels

      A tabela nesta página inclui as colunas Label Name, Label Type, Num Of Active NMs e Total Resources. Ela exibe três registros: <DEFAULT_PARTITION> (Exclusive Partition, 2 active NMs, resources: memory:8192, vCores:16), batch (Exclusive Partition, 2 active NMs, resources: memory:8192, vCores:16) e streaming (Exclusive Partition, 1 active NM, resources: memory:4096, vCores:8).

    • Página Scheduler

      Na seção Application Queues da página Scheduler, três partições estão configuradas: DEFAULT_PARTITION (<memory:8192, vCores:16>), Partition: batch (<memory:8192, vCores:16>) e Partition: streaming (<memory:4096, vCores:8>). Tanto a partição de node label batch quanto a streaming contêm a fila root com as subfilas default, warehouse e analysis. O tipo de Scheduler é Capacity Scheduler, com Minimum Allocation de <memory:32, vCores:1> e Maximum Allocation de <memory:4096, vCores:8>.

Etapa 4: Envie um job para uma partição

Após configurar as filas e labels do cluster, envie jobs para execução em filas e nós específicos.

  1. Faça login no nó mestre do cluster e acesse o diretório de instalação do Spark, por exemplo, /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
  2. Em ambientes de produção, faça upload do arquivo JAR do job para enviar um job Spark. Este exemplo utiliza spark-submit para o envio.

    ./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.jar

    Parâmetro

    Descrição

    class

    Classe principal da aplicação: org.apache.spark.examples.SparkLR.

    master

    Ambiente de execução do job: yarn.

    deploy-mode

    Local onde o driver é iniciado: cluster.

    driver-memory

    Quantidade de memória para o driver: 1g.

    executor-memory

    Quantidade de memória por executor: 2g.

    spark.yarn.am.nodeLabelExpression

    Expressão de label para nós onde o ApplicationMaster pode executar: batch.

    spark.yarn.executor.nodeLabelExpression

    Expressão de label para nós onde os executors podem executar: batch.

    queue

    Fila YARN específica para envio do job: warehouse.

    Nota

    Se você especificar apenas uma fila sem definir uma partição ao enviar um job, ele será enviado para a partição padrão da fila. Altere a partição padrão de uma fila na página Edit Resource Queue clicando em Edit na fila correspondente.

  3. Na interface web do cluster YARN, verifique se o job SparkLR enviado para a fila warehouse está executando na partição batch.

As filas YARN e as partições de nós fornecem, juntas, isolamento lógico e físico de recursos, evitando interferências entre jobs e garantindo a estabilidade de aplicações críticas.

Perguntas frequentes

  • Por que meu job Spark não executa na partição especificada ao usar spark-submit?

    • Verifique se o parâmetro spark.yarn.executor.nodeLabelExpression está incluído no comando de envio.

    • Confirme se as configurações nas páginas Partitions e Edit Resource Queue estão ativas.

  • Por que o status do job permanece como ACCEPTED ao enviar um job Spark via spark-submit?

    1. Confirme se a fila de destino possui recursos disponíveis. Caso contrário, aguarde a liberação de recursos por outros jobs antes de reenviar.

    2. Se a fila tiver recursos disponíveis, clique no ID do job na interface web do YARN para visualizar os detalhes e verificar a descrição em Diagnostics. Uma mensagem possível é: "Queue's AM resource limit exceeded". Isso indica que, embora a fila tenha recursos, os recursos do Application Master (AM) são insuficientes. Os recursos da fila são divididos entre o AM e os executors. Recursos do AM iniciam a aplicação principal, enquanto recursos dos executors processam tarefas. Portanto, ajuste a proporção de alocação de recursos da fila e aumente a parcela destinada ao AM para garantir o envio bem-sucedido de jobs Spark.

      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 = &lt;DEFAULT_PARTITION&gt;; AM Resource Request = &lt;memory:2048, vCores:1&gt;; Queue Resource Limit for AM = &lt;memory:2048, vCores:4&gt;; User
                     AM Resource Limit of the queue = &lt;memory:224, vCores:1&gt;; Queue AM Resource Usage = &lt;memory:896, vCores:1&gt;;
    3. Ajuste a proporção de recursos do AM na página de configuração do service YARN. Localize o arquivo capacity_scheduler.xml e modifique o valor do item de configuração yarn.scheduler.capacity.maximum-am-resource-percent. Por exemplo, altere de 0.25 para 0.5.

    Nota

    Ajuste a porcentagem padrão de recursos do AM definida por yarn.scheduler.capacity.maximum-am-resource-percent conforme seu caso de uso específico. Se o cluster processa frequentemente muitos jobs com pequenos volumes de dados, considere aumentar a porcentagem de recursos do AM.

Documentação relacionada

  • Para mais informações sobre os princípios de agendamento do YARN, consulte YARN schedulers.

  • Para detalhes sobre os princípios de partições de nós no YARN, consulte Use Node Labels.