Come faccio a risolvere l'errore "Comando fallito con codice di uscita" in AWS Glue?

5 minuti di lettura
0

Il mio processo AWS Glue non riesce e genera l'errore "Comando fallito con codice di uscita".

Breve descrizione

"Comando fallito con codice di uscita X" è un messaggio di errore generico che viene restituito quando l'applicazione AWS Glue viene chiusa. Questo errore si verifica quando una o più delle seguenti condizioni sono vere:

  • La memoria del driver o dell'esecutore del processo AWS Glue è esaurita.
  • Il job script presenta problemi relativi al codice.
  • Il ruolo AWS Identity and Access Management (AWS IAM) non dispone delle autorizzazioni necessarie per accedere al percorso dello script.

Per esaminare ulteriormente questo errore, consulta i log e le metriche di Amazon CloudWatch.

Risoluzione

Il processo di AWS Glue Spark fallisce con l'errore "Comando fallito con codice di uscita 1" e i log di CloudWatch mostrano l'errore "java.lang.OutOfMemoryError: Spazio heap Java"

Questo errore AWS Glue indica che un driver o un processo esecutivo del processo sta esaurendo la memoria. Per verificare se un driver o un esecutore sta causando l'eccezione di esaurimento della memoria (OOM), esamina le metriche di CloudWatch per glue.driver.jvm.heap.usage e glue.executorId.heap.usage. Per ulteriori informazioni, consulta Monitoraggio di AWS Glue utilizzando i parametri di Amazon CloudWatch.

Per risolvere un'eccezione OOM causata dal driver, vedi Come faccio a risolvere il "java.lang.OutOfMemoryError": Errore "Java heap space" in un job di AWS Glue Spark? ed eseguire il debug di un'eccezione OOM del driver.

Per risolvere un'eccezione OOM causata dagli esecutori, consulta Debug di un'eccezione OOM dell'esecutore.

Gli esecutori falliscono con "Comando fallito con codice di uscita 1"

Questo errore si verifica quando annulli un processo AWS Glue. Questo errore si verifica anche quando si spengono forzatamente gli esecutori e il driver viene terminato. Consulta i log di CloudWatch per AWS Glue per maggiori dettagli sull'errore.

Il processo di AWS Glue versione 0.9/1.0 di Spark fallisce con l'errore "Comando fallito con codice di uscita 1" e i log di CloudWatch mostrano l'errore "Container killed by YARN for exceeding memory limits"

Nota: I lavori di AWS Glue versione 1.0 di Spark hanno raggiunto la fine del supporto. Esegui l'upgrade a Glue 2.0 o versioni successive per migliorare le prestazioni.

Questo errore AWS Glue indica che l'esecutore sta causando un'eccezione OOM. Per risolvere questo errore, consulta Debug di un'eccezione OOM dell'esecutore.

Il processo di AWS Glue Python Shell fallisce con l'errore "Comando fallito con codice di uscita 1"

Questo errore indica che il ruolo IAM di AWS Glue non è autorizzato ad accedere allo script AWS Glue dal percorso Amazon Simple Storage Service (Amazon S3). Controlla le autorizzazioni che il ruolo IAM di AWS Glue deve avere per accedere al percorso di posizione dello script. Quindi, associa queste autorizzazioni al ruolo IAM.

Il processo AWS Glue fallisce con l'errore "Comando fallito con codice di uscita 1" e non viene avviato

Controlla i log dei processi di CloudWatch per verificare la presenza di errori relativi ad Amazon S3. Nei log, potresti ricevere un errore simile al seguente:

com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied' Request ID: xxxxxxxxxxxxx)

Questo errore si verifica quando il ruolo IAM di AWS Glue non è autorizzato ad accedere allo script ETL di AWS Glue dal percorso Amazon S3. Controlla le autorizzazioni che il ruolo IAM di AWS Glue deve avere per accedere al percorso di posizione dello script. Quindi, associa queste autorizzazioni al ruolo IAM.

Il job di AWS Glue occasionalmente fallisce con "Command failed with exit code 10" e i log di CloudWatch mostrano un errore, anche con le autorizzazioni dei bucket IAM e S3 corrette

com.amazonaws.services.s3.model.AmazonS3Exception: Access Denied (Service: Amazon S3; Status Code: 403; Error Code: AccessDenied' Request ID: xxxxxxxxxxxxx)

Questo errore di AWS Glue si verifica nelle versioni 3.0 o 4.0 di AWS Glue. Questo errore si verifica quando utilizzi la configurazione di sicurezza di AWS Glue, ma la policy del bucket S3 nega il se:PutObject non crittografato.

Per risolvere questo problema, esegui job.init() all'inizio dello script per rendere effettiva la configurazione di sicurezza di AWS Glue. Se avvii la sessione di Spark prima di job.init(), le proprietà di configurazione di sicurezza di Spark vengono sovrascritte e si verifica l'errore.

Guarda il seguente esempio:

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()

Per ulteriori informazioni sulla configurazione di sicurezza di AWS Glue, consulta Crittografia dei dati scritti da crawler, job ed endpoint di sviluppo.

Il processo AWS Glue fallisce con l'errore "Comando fallito con codice di uscita X" e i file JAR vengono passati al processo

È possibile che si verifichi uno dei seguenti errori nei log di CloudWatch:

"Eccezione nel thread "main" java.lang.NoSuchMethodError"

"Eccezione nel thread "main" java.lang.ExceptionInInInitializerError"

Questi errori indicano un conflitto di dipendenza JAR o un conflitto di versione di Spark. Verificare che l'eseguibile JAR e i file JAR aggiuntivi passati nel job non siano in conflitto. Se stai passando più file JAR, rimuovi un file JAR alla volta ed esegui nuovamente il job AWS Glue. In questo modo, puoi isolare il file che causa il problema.


Informazioni correlate

Monitoraggio dei processi utilizzando l'interfaccia utente web di Apache Spark

Perché il mio processo ETL di AWS Glue fallisce e viene visualizzato l'errore "Container killed by YARN for exceeding memory limits”?

AWS UFFICIALE
AWS UFFICIALEAggiornata 3 anni fa