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.
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
Faça login no console do EMR on ECS. Na coluna Actions do cluster desejado, clique em Services. Em seguida, clique em YARN.
Na página do service YARN, clique na aba Edit Resource Queue e, depois, clique em Manage Queues.
-
Na página Manage Child Queues, adicione a fila
warehousee a filaanalysis.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.
-
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
-
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
exclusiveneste 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
streamingestá associada ao grupoemr-task-3neste 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ó.
-
-
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.
-
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. -
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
Na página Edit Resource Queue, selecione as partições
batchestreamingsequencialmente e clique em Enable Partition-queue Association Management.-
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 filaanalysiscomo 30%, a Queue Capacity da filawarehousecomo 60%, e a Queue Capacity da filadefaultcomo 10%.Na partição
streaming, configure a Queue Capacity da filaanalysispara 20%, a Queue Capacity da filawarehousepara 70%, e a Queue Capacity da filadefaultpara 10%.
NotaNeste 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.
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.
-
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.
-
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 -
Em ambientes de produção, faça upload do arquivo JAR do job para enviar um job Spark. Este exemplo utiliza
spark-submitpara 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.jarParâ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.NotaSe 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.
Na interface web do cluster YARN, verifique se o job SparkLR enviado para a fila
warehouseestá executando na partiçãobatch.
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.nodeLabelExpressionestá 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
ACCEPTEDao enviar um job Spark viaspark-submit?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.
-
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 = <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>; Ajuste a proporção de recursos do AM na página de configuração do service YARN. Localize o arquivo
capacity_scheduler.xmle modifique o valor do item de configuraçãoyarn.scheduler.capacity.maximum-am-resource-percent. Por exemplo, altere de 0.25 para 0.5.
NotaAjuste a porcentagem padrão de recursos do AM definida por
yarn.scheduler.capacity.maximum-am-resource-percentconforme 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.