Meus trabalhos do Amazon EMR estão presos no estado Aceito e os logs mostram “WARN YarnScheduler: O trabalho inicial não aceitou nenhum recurso; verifique a interface do usuário do cluster para garantir que os trabalhadores estejam registrados e tenham recursos suficientes”.
Breve descrição
Os trabalhos do EMR ficam presos no estado Aceito se o cluster não tiver recursos suficientes para atender à solicitação de trabalho. Isso pode acontecer pelos seguintes motivos:
- O YARNMemoryAvailablePercentage é muito baixo e muitos dos contêineres estão pendentes.
- A aplicação não pode iniciar uma aplicação mestre devido à insuficiência de recursos nos nós principais. Isso pode ocorrer no Amazon EMR 5.19.0 e versões posteriores, excluindo o Amazon EMR da série 6.x.
- Os nós principais não estão íntegros.
- Um trabalho de EMR está consumindo todos os recursos.
Resolução
O cluster não tem recursos suficientes para atender à solicitação de trabalho
1. Conecte-se à interface do usuário do Resource Manager ou use o seguinte comando em qualquer nó para verificar os recursos:
yarn top 10
2. Verifique se os recursos usados são quase equivalentes ao total de recursos. Você também pode verificar as métricas do Amazon CloudWatch para YARNMemoryAvailablePercentage e MemoryAvailableMB.
4. Se necessário, adicione mais capacidade ao cluster. Você pode usar o EMR Managed Scaling ou o dimensionamento automático para adicionar ou reduzir automaticamente a capacidade com base na utilização de recursos.
Não há recursos suficientes nos nós principais.
No EMR 5.19.0 e versões posteriores, excluindo a série 6.0, o mestre da aplicação é executado no nó principal por padrão. Na série EMR 6.x, o mestre da aplicação pode ser executado nos nós principais e de tarefas.
Devido ao aumento do número de trabalhos enviados e ao menor número de nós principais, os nós principais não podem alocar outro contêiner mestre de aplicações. Portanto, o trabalho pode ficar paralisado mesmo que os nós da tarefa tenham memória suficiente. Se isso ocorrer, você poderá ver a seguinte mensagem nos logs do contêiner:
Application is Activated, waiting for resources to be assigned for AM. Last Node which was processed for the application : ip-xxxx:8041 ( Partition : [], Total resource :
<memory:516096, vCores:64>, Available resource : <memory:516096,vCores:64> ). Details : AM Partition = CORE ; Partition Resource =
<memory:516096, vCores:64> ; Queue's Absolute capacity = 100.0 % ; Queue's Absolute used capacity = 99.53497 % ; Queue's Absolute max capacity =100.0 %
Se isso ocorrer, encerre os trabalhos para liberar alguns recursos. Ou adicione mais nós principais ao cluster.
Além disso, você pode desativar as etiquetas YARN no Amazon EMR 5.x.
Os nós principais não estão íntegros
Se os nós principais ficarem sem espaço em disco e o ponto de montagem tiver uma utilização de disco acima de 90%, o Amazon EMR considerará o nó não íntegro. Novos contêineres não são programados em nós não íntegros. Se isso ocorrer, a seguinte mensagem aparecerá nos logs do controlador da instância primária. Os logs estão localizados em /emr/instance-controller/log.
Yarn unhealthy Reason : 1/4 local-dirs usable space is below configured utilization percentage/no more usable space [ /mnt/yarn : used space above threshold of 90.0% ] ; 1/1 log-dirs usable space
is below configured utilization percentage/no more usable space [ /var/log/hadoop-yarn/containers : used space above threshold of 90.0% ]
Para corrigir nós não íntegros, reduza o uso do disco removendo logs de contêineres antigos ou logs de eventos do Spark. Você também pode dimensionar dinamicamente o armazenamento com base na utilização do disco.
Um trabalho está consumindo todos os recursos ou os parâmetros do Spark estão configurados além dos limites do cluster
A alocação dinâmica do Spark é ativada por padrão no Amazon EMR. Se um trabalho do Spark não estiver configurado corretamente, ele poderá consumir todos os recursos do cluster. Por exemplo, você recebe esse erro se o limite máximo de executores (spark.dynamicAllocation.maxExecutors) não for alto o suficiente. Para trabalhos do Spark, ajuste as restrições de memória para evitar que um trabalho consuma todos os recursos do cluster.
A aceitação do trabalho falhará se a memória do executor ou a memória do driver forem maiores do que os parâmetros configurados pelo Yarn. Os parâmetros configurados pelo Yarn são yarn.scheduler.maximum-allocation-mb e yarn.nodemanager.resource.memory-mb. Se isso ocorrer, você verá uma mensagem de erro semelhante à seguinte:
22/01/03 20:05:05 INFO Client: Verifying our application has not requested more than the maximum memory capability of the cluster (24576
MB per container)
Exception in thread "main" java.lang.IllegalArgumentException: Required executor memory (49152),overhead (6144 MB), and PySpark memory (0 MB) is above the max threshold
(24576 MB) of this cluster! Please check the values of 'yarn.scheduler.maximum-allocation-mb' and/or 'yarn.nodemanager.resource.memory-mb'.
Para resolver isso, faça o seguinte: