Este tópico descreve os rótulos de nó do YARN, seu uso e problemas comuns.
Contexto
Os rótulos de nó do YARN particionam os nós do NodeManager. Como cada nó aceita apenas um rótulo, use esses rótulos para dividir um cluster YARN em conjuntos disjuntos de nós. Por padrão, os nós pertencem à partição DEFAULT (partition="", uma string vazia).
As partições podem ser de dois tipos:
Partição exclusiva: somente contêineres que solicitam essa partição são agendados em seus nós.
Partição não exclusiva: contêineres que solicitam essa partição, a partição DEFAULT ou nenhuma partição são agendados em seus nós se houver recursos ociosos.
O Capacity Scheduler é o único agendador compatível com agendamento baseado em partições por meio de rótulos de nó. Configure o agendador ou use o parâmetro node-label-expression do mecanismo de computação para atribuir contêineres de uma fila às partições acessíveis.
Para obter mais informações sobre rótulos de nó, consulte YARN Node Labels.
Limitações
Este tópico aplica-se a versões do EMR anteriores ao EMR-5.11.1 e EMR-3.45.1, desde que o parâmetro
yarn.node-labels.configuration-typeno arquivoyarn-site.xmlesteja definido comocentralized.As versões 5.11.1 e posteriores do EMR, bem como as versões 3.45.1 e posteriores, permitem gerenciar partições do YARN no console do EMR. Para obter mais informações, consulte Gerenciar partições do YARN no console do EMR.
Procedimento
Ativar rótulos de nó no console
No console do EMR, acesse a página de configuração do serviço YARN. Na aba yarn-site.xml, adicione as propriedades a seguir. Salve a configuração e reinicie o ResourceManager para aplicar as alterações.
|
Chave |
Valor |
Descrição |
|
yarn.node-labels.enabled |
true |
Ativa o recurso de rótulos de nó. |
|
yarn.node-labels.fs-store.root-dir |
/tmp/node-labels |
No modo de configuração |
Este tópico aborda o modo
centralizedpara explicar os princípios de funcionamento do mapeamento de rótulos de nó. As versões 5.11.1 e posteriores do EMR, bem como as versões 3.45.1 e posteriores, usamyarn.node-labels.configuration-type=distributedpor padrão. Nessas versões, gerencie as partições do YARN diretamente no console do EMR, sem os comandos manuais descritos neste tópico. Para obter mais informações, consulte Gerenciar partições do YARN no console do EMR. Para outros requisitos, consulte a documentação oficial da comunidade Hadoop.Se você definir a propriedade yarn.node-labels.fs-store.root-dir com um caminho sem esquema (em vez de uma URL completa), o YARN usará o sistema de arquivos padrão especificado por
fs.defaultFS. A configuração será equivalente a${fs.defaultFS}/tmp/node-labels. No EMR, o sistema de arquivos padrão geralmente é o HDFS.
Adicionar rótulos de nó e mapear nós usando comandos
Para atribuir partições automaticamente aos nós do NodeManager em um grupo de nós elástico durante o scale-out, adicione o comando replaceLabelsOnNode a um script de bootstrap desse grupo de nós após criar as partições. O script executa depois que os componentes do nó iniciam.
Exemplos de comandos:
# Run commands as the default YARN administrator: hadoop
sudo su - hadoop
# Add partitions
yarn rmadmin -addToClusterNodeLabels "DEMO"
yarn rmadmin -addToClusterNodeLabels "CORE"
# List the YARN nodes
yarn node -list
# Map specific nodes to a partition
yarn rmadmin -replaceLabelsOnNode "core-1-1.c-XXX.cn-hangzhou.emr.aliyuncs.com=DEMO"
yarn rmadmin -replaceLabelsOnNode "core-1-2.c-XXX.cn-hangzhou.emr.aliyuncs.com=DEMO"
Após a execução bem-sucedida dos comandos, verifique os resultados na interface web do ResourceManager.
Na página Nodes do ResourceManager, a coluna Node Labels dos dois nós principais (core-1-1 e core-1-2) exibe DEMO, e o Node State é RUNNING. Isso indica que o mapeamento entre nó e rótulo está ativo.
Na página Node Labels, a tabela mostra três rótulos de nó adicionados:
<DEFAULT_PARTITION>,COREeDEMO. O Label Type deles é Exclusive Partition.
Na página Nodes do ResourceManager, a coluna Node Labels dos dois nós principais (core-1-1 e core-1-2) exibe DEMO, e o Node State é RUNNING. Isso indica que o mapeamento entre nó e rótulo está ativo.
Na página Node Labels, a tabela mostra três rótulos de nó adicionados:
<DEFAULT_PARTITION>,COREeDEMO. O Label Type deles é Exclusive Partition.
Na página Nodes do ResourceManager, a coluna Node Labels dos dois nós principais (core-1-1 e core-1-2) exibe DEMO, e o Node State é RUNNING. Isso indica que o mapeamento entre nó e rótulo está ativo.
Na página Node Labels, a tabela mostra três rótulos de nó adicionados:
<DEFAULT_PARTITION>,COREeDEMO. O Label Type deles é Exclusive Partition.
Configurar partições de fila
Para utilizar o Capacity Scheduler, certifique-se de que a propriedade yarn.resourcemanager.scheduler.class no arquivo yarn-site.xml esteja definida como org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler.
No arquivo capacity-scheduler.xml, use as propriedades a seguir para configurar as partições acessíveis e a capacidade de uma fila. Substitua <queue-path> pelo caminho da fila e <label> pelo nome da partição. Para a partição DEFAULT, utilize as propriedades padrão capacity ou maximum-capacity.
|
Parâmetro |
Valor |
Descrição |
|
yarn.scheduler.capacity.<queue-path>.accessible-node-labels |
Lista de partições separadas por vírgulas. |
Especifica a lista de partições acessíveis para a fila. |
|
yarn.scheduler.capacity.<queue-path>.accessible-node-labels.<label>.capacity |
Para regras de valor, consulte yarn.scheduler.capacity.<queue-path>.capacity. |
Define a capacidade de recursos da fila na partição acessível especificada. Importante
Para entrar em vigor, também configure a capacidade de todas as filas ancestrais. |
|
yarn.scheduler.capacity.<queue-path>.accessible-node-labels.<label>.maximum-capacity |
Para regras de valor, consulte yarn.scheduler.capacity.<queue-path>.maximum-capacity. O valor padrão é 100. |
Define a capacidade máxima de recursos que a fila pode utilizar na partição acessível especificada. |
|
yarn.scheduler.capacity.<queue-path>.default-node-label-expression |
Nome de uma partição. O padrão é uma string vazia, que representa a partição DEFAULT. |
Define a partição padrão para solicitações de contêineres em jobs enviados a esta fila sem uma partição especificada. |
Para que uma fila específica tenha capacidade real de recursos maior que 0, configure a capacidade da mesma partição em todas as suas filas ancestrais. O valor padrão do parâmetro
yarn.scheduler.capacity.<queue-path>.accessible-node-labels.<label>.capacityé 0. Portanto, definayarn.scheduler.capacity.root.accessible-node-labels.<label>.capacity=100para que as filas filhas possam ter capacidade diferente de zero na partição. Teoricamente, qualquer valor maior que 0 é suficiente, mas configurar um valor menor que 100 reduz a capacidade real calculada para as filas filhas e tem pouca utilidade prática. Se a configuração de capacidade de uma fila ancestral estiver ausente e assumir o padrão 0, a capacidade real calculada para a fila de destino nessa partição também será 0.-
Depois que
yarn.scheduler.capacity.root.accessible-node-labels.<label>.capacityfor definido com um valor maior que 0, aplica-se a mesma regra da propriedade regularyarn.scheduler.capacity.<queue-path>.capacity: a soma dos valores decapacitypara a mesma partição em todas as filas filhas diretas deve ser igual a 100.Exemplo de configuração:
<configuration> <!-- Add node label properties in XML --> <property> <!-- Allow the default queue to access the DEMO partition (required) --> <name>yarn.scheduler.capacity.root.default.accessible-node-labels</name> <value>DEMO</value> </property> <property> <!-- Set the DEMO partition capacity on all ancestor queues of the default queue (required) --> <name>yarn.scheduler.capacity.root.accessible-node-labels.DEMO.capacity</name> <value>100</value> </property> <property> <!-- Set the DEMO partition capacity for the default queue (required) --> <name>yarn.scheduler.capacity.root.default.accessible-node-labels.DEMO.capacity</name> <value>100</value> </property> <property> <!-- Optional: set the maximum capacity for the default queue in the DEMO partition. The default is 100. --> <name>yarn.scheduler.capacity.root.default.accessible-node-labels.DEMO.maximum-capacity</name> <value>100</value> </property> <property> <!-- Optional: set the default partition for container requests of jobs submitted to the default queue. The default is the DEFAULT partition "" --> <name>yarn.scheduler.capacity.root.default.default-node-label-expression</name> <value>DEMO</value> </property> <configuration>
Após editar e salvar a configuração, use a operação refreshQueues do ResourceManager na aba Status da página de serviço do YARN para atualizar dinamicamente a configuração do agendador. Verifique se o job executa conforme esperado. Após o sucesso do job, valide o resultado na interface web do ResourceManager. Quando a configuração entrar em vigor, na página Scheduler do ResourceManager, será possível visualizar que a Partition: DEMO possui recursos alocados (memory:26214, vCores:16). A estrutura da fila é Queue: root > Queue: default. Isso indica que a partição DEMO e suas configurações de capacidade de fila foram aplicadas.
A maioria dos mecanismos de computação (exceto o Tez) também oferece suporte a rótulos de nó por meio de parâmetros de envio de job, não abordados neste tópico.
|
Mecanismo |
Parâmetro |
Descrição |
|
MapReduce |
mapreduce.job.node-label-expression |
Partição padrão usada por todos os contêineres do job. |
|
mapreduce.job.am.node-label-expression |
Partição usada pelo ApplicationMaster. |
|
|
mapreduce.map.node-label-expression |
Partição usada pelas tarefas map. |
|
|
mapreduce.reduce.node-label-expression |
Partição usada pelas tarefas reduce. |
|
|
Spark |
spark.yarn.am.nodeLabelExpression |
Partição usada pelo ApplicationMaster. |
|
spark.yarn.executor.nodeLabelExpression |
Partição usada pelo Executor. |
|
|
Flink |
yarn.application.node-label |
Partição padrão usada por todos os contêineres do job. |
|
yarn.taskmanager.node-label |
Partição usada pelo TaskManager. Compatível com Flink 1.15.0 e posterior, correspondente ao EMR-3.44.0 (3.x) e EMR-5.10.0 (5.x). |
Perguntas frequentes
Armazenamento de dados de rótulos de nó em clusters HA
Sim. Em um cluster de alta disponibilidade (HA), o ResourceManager é implantado em vários nós. Por padrão, o Hadoop open-source armazena dados de rótulos de nó em um diretório local, como file:///tmp/hadoop-yarn-${user}/node-labels/. Após um failover, o novo ResourceManager ativo não consegue ler os dados de rótulos de nó armazenados localmente no nó anterior. Portanto, defina yarn.node-labels.fs-store.root-dir com um caminho de armazenamento distribuído, como /tmp/node-labels ou ${fs.defaultFS}/tmp/node-labels. No EMR, o sistema de arquivos padrão é o HDFS. Para obter detalhes, consulte Procedimento.
Para um caminho distribuído personalizado, garanta que o serviço de sistema de arquivos esteja íntegro e que o usuário hadoop tenha permissões de leitura e escrita. Caso contrário, o ResourceManager falhará ao iniciar.
Especificação da porta do NodeManager
Em um cluster EMR, cada nó executa no máximo um processo NodeManager, portanto, especificar uma porta é desnecessário. Se você especificar uma porta incorreta ou aleatória, o comando replaceLabelsOnNode falhará ao mapear o nó para a partição. Execute yarn node -list -showDetails para visualizar a partição atual de um nó.
Casos de uso para rótulos de nó
Na maioria dos casos, rótulos de nó são desnecessários em um cluster EMR. Muitas métricas no Hadoop YARN open-source não consideram partições e relatam status apenas para a partição DEFAULT, o que aumenta a complexidade operacional. O agendamento baseado em partições também pode reduzir a utilização geral de recursos e levar ao desperdício. Os casos de uso típicos incluem isolamento de jobs em lote e jobs de streaming por partição, fixação de jobs críticos em nós não elásticos e acomodação de diferentes tipos de instância em partições separadas para evitar desequilíbrio de recursos.
Documentação relacionada
Para gerenciar nós do cluster por partição, consulte Usar rótulos de nó para particionar nós.