Como soluciono o erro “Falha no comando com o código de saída” no AWS Glue?
Meu trabalho do AWS Glue falha e gera o erro “Falha no comando com o código de saída”.
Breve descrição
“Falha no comando com o código de saída X” é uma mensagem de erro genérica apresentada quando o aplicativo AWS Glue é encerrado. Esse erro ocorre quando uma ou mais das seguintes condições são verdadeiras:
- O driver ou executor na tarefa do AWS Glue ficou sem memória.
- O script da tarefa tem problemas relacionados ao código.
- A função AWS Identity and Access Management (AWS IAM) não tem as permissões necessárias para acessar o caminho do script.
Para investigar melhor esse erro, revise os logs e métricas do Amazon CloudWatch.
Resolução
A tarefa do AWS Glue Spark falha com o erro “Falha no comando com o código de saída 1” e os logs do CloudWatch mostram o erro “java.lang.OutOfMemoryError: Espaço de pilha Java”
Esse erro do AWS Glue indica que um driver ou processo executor na tarefa está ficando sem memória. Para verificar se um driver ou executor está causando a exceção de falta de memória (OOM), revise as métricas do CloudWatch para glue.driver.jvm.heap.usage e glue.executorID.heap.usage. Para obter mais informações, consulte Monitoramento do AWS Glue usando métricas do Amazon CloudWatch.
Para solucionar uma exceção de OOM causada pelo driver, consulte Como resolvo o erro “java.lang.OutOfMemoryError: Java heap space” em uma tarefa do AWS Glue Spark? e depurando uma exceção de OOM do driver.
Para solucionar uma exceção de OOM causada por executores, consulte Depurar uma exceção de OOM de executor.
Os executores falham com “Falha no comando com o código de saída 1"
Esse erro ocorre quando você cancela uma tarefa do AWS Glue. Esse erro também ocorre quando você desliga os executores subitamente e o driver é encerrado. Consulte os logs do CloudWatch para o AWS Glue para obter mais detalhes sobre o erro.
A tarefa do Spark no AWS Glue versão 0.9/1.0 falha com o erro “Command failed with exit code 1” e os logs do CloudWatch mostram o erro “Container killed by YARN for exceeding memory limits”
Observação: As tarefas do spark no AWS Glue versão 1.0chegaram ao fim do suporte. Atualize para o Glue 2.0 ou superior para melhorar o desempenho.
Esse erro do AWS Glue indica que o executor está causando uma exceção de OOM. Para solucionar esse erro, consulte Depurar uma exceção OOM do executor.
A tarefa do Python Shell no AWS Glue falha com o erro “Command failed with exit code 1”
Esse erro indica que o perfil do IAM do AWS Glue não tem permissão para acessar o script do AWS Glue a partir do caminho do Amazon Simple Storage Service (Amazon S3). Analise as permissões que o perfil do IAM do AWS Glue deve ter para acessar o caminho de localização do script. Em seguida, anexe essas permissões ao perfil do IAM.
A tarefa do AWS Glue falha com o erro “Command failed with exit code 1” e não inicia
Verifique os logs de tarefa do CloudWatch para ver se há erros relacionados ao Amazon S3. Nos logs, você pode receber um erro semelhante ao seguinte:
com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied' Request ID: xxxxxxxxxxxxx)
Esse erro ocorre quando o perfil do IAM do AWS Glue não tem permissão para acessar o script ETL do AWS Glue a partir do caminho do Amazon S3. Analise as permissões que o perfil do IAM do AWS Glue deve ter para acessar o caminho de localização do script. Em seguida, anexe essas permissões ao perfil do IAM.
Ocasionalmente, a tarefa do AWS Glue falha com “Command failed with exit code 10”, e os logs do CloudWatch mostram um erro, mesmo com as permissões corretas do bucket do IAM e do S3
com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied' Request ID: xxxxxxxxxxxxx)
Esse erro do AWS Glue ocorre nas versões 3.0 ou 4.0 do AWS Glue. Esse erro ocorre quando você está usando a configuração de segurança do AWS Glue, mas a política de bucket do S3 nega o se:putObject não criptografado.
Para resolver esse problema, execute job.init() no início do script para que a configuração de segurança do AWS Glue entre em vigor. Se você iniciar a sessão do Spark antes de job.init(), as propriedades de configuração de segurança do Spark serão substituídas e o erro ocorrerá.
Veja o exemplo a seguir:
job = Job(glueContext) job.init(args["JOB_NAME"], args) #Use one of the following depending on whether Spark configuration is being set or not spark = glueContext.spark_session spark = glueContext.spark_session.builder.enableHiveSupport().config("hive.exec.dynamic.partition","true").config("hive.exec.dynamic.partition.mode", "nonstrict").getOrCreate()
Para obter mais informações sobre a configuração de segurança do AWS Glue, consulte Criptografia de dados escritos por crawlers, tarefas e endpoints de desenvolvimento.
A tarefa do AWS Glue falha com o erro “Command failed with exit code X” e os arquivos JAR são passados para a tarefa
Você pode observar um dos seguintes erros nos logs do CloudWatch:
“Exception in thread "main" java.lang.NoSuchMethodError”
"Exception in thread "main” java.lang.ExceptionInInitializerError”
Esses erros indicam um conflito de dependência do JAR ou conflito de versão do Spark. Verifique se há conflito no executável JAR e nos arquivos JAR extras que são passados na tarefa. Se você estiver passando vários arquivos JAR, remova um arquivo JAR por vez e execute novamente a tarefa do AWS Glue. Dessa forma, você pode isolar o arquivo que está causando o problema.
Informações relacionadas
Monitoramento de tarefas usando a interface web do Apache Spark
Conteúdo relevante
- AWS OFICIALAtualizada há 2 anos