Come posso risolvere gli errori dei processi EMR quando tento di connettermi al Catalogo dati Glue?

4 minuti di lettura
0

I miei processi Amazon EMR non possono connettersi al Catalogo dati AWS Glue.

Breve descrizione

Amazon EMR utilizza il Catalogo dati come meta store persistente quando si utilizza Apache Spark, Apache Hive o Presto/Trino. Puoi condividere il Catalogo dati tra diversi cluster, servizi, applicazioni o account AWS.

Tuttavia, la connessione al Catalogo dati potrebbe non riuscire per i seguenti motivi:

  • Autorizzazioni insufficienti per il Catalogo dati Glue.
  • Autorizzazioni insufficienti per gli oggetti Amazon Simple Storage Service (Amazon S3) specificati come posizione della tabella.
  • Autorizzazioni insufficienti al Servizio di gestione delle chiavi AWS (AWS KMS) per oggetti crittografati.
  • Autorizzazioni insufficienti in AWS Lake Formation.
  • Configurazione dei parametri del cluster EMR mancante o errata.
  • Formattazione dell'interrogazione non corretta.

Risoluzione

Il profilo dell'istanza EC2 non dispone di autorizzazioni sufficienti per il catalogo dati o il bucket S3

Per accedere al Catalogo dati dallo stesso account o da più account, i seguenti devono disporre delle autorizzazioni per le azioni AWS Glue e per il bucket S3:

  • Il profilo dell'istanza Amazon Elastic Compute Cloud (Amazon EC2).
  • Il ruolo di AWS Identity and Access Management (IAM) che chiama il Catalogo dati.

Se mancano le autorizzazioni, viene visualizzato un errore simile al seguente:

Unable to verify existence of default database: com.amazonaws.services.glue.model.AccessDeniedException: 
User: arn:aws:sts::Acct-id:assumed-role/Role/instance-id is not authorized to perform: glue:GetDatabase on resource: arn:aws:glue:region:Acct-id:catalog because no identity-based policy allows the glue:GetDatabase action 
(Service: AWSGlue; Status Code: 400; Error Code: AccessDeniedException; Request ID: request-id; Proxy: null

Per risolvere i problemi relativi all'accesso al Catalogo dati dallo stesso account, controlla le autorizzazioni per il profilo dell'istanza o l'utente IAM.

Per risolvere i problemi relativi all'accesso agli account incrociati del Catalogo dati, controlla tutte le autorizzazioni per l'account chiamante e la configurazione. Quindi, verifica che sia fornito l'accesso S3 tra account.

Il profilo dell'istanza EC2 non dispone delle autorizzazioni AWS KMS necessarie

Se il Catalogo dati è crittografato utilizzando una chiave gestita dal cliente, il profilo dell'istanza EC2 deve disporre delle autorizzazioni necessarie per accedere alla chiave. Se mancano le autorizzazioni, potresti visualizzare un errore simile al seguente. L'errore viene visualizzato nella console EMR se si utilizza spark-shell, Hive CLI o Presto/Trino CLI. L'errore viene visualizzato nei log dei container se invii il codice in modo programmatico.

Caused by: MetaException(message:User: arn:aws:sts::acct-id:assumed-role/Role/instance-id is not authorized to perform: kms:GenerateDataKey on resource: arn:aws:kms:region:acct-id:key/fe90458f-beba-460e-8cae-25782ea9f8b3 because no identity-based policy allows the kms:GenerateDataKey action (Service: AWSKMS; Status Code: 400; Error Code: AccessDeniedException; Request ID: request-id; Proxy: null) 
(Service: AWSGlue; Status Code: 400; Error Code: GlueEncryptionException; Request ID: request-id; Proxy: null))

Per evitare l'errore precedente, aggiungi le autorizzazioni AWS KMS necessarie per consentire l'accesso alla chiave.

Se l'account AWS che chiama il servizio non è lo stesso account in cui è presente il catalogo dati, procedi come segue:

Il profilo dell'istanza non ha accesso ad AWS Lake Formation oppure le tabelle Glue non dispongono delle concessioni richieste

Quando le autorizzazioni di Catalogo dati sono gestite o registrate in AWS Lake Formation, il ruolo deve disporre delle autorizzazioni Lake Formation sull'oggetto. Se nel ruolo mancano le autorizzazioni di Lake Formation, potresti visualizzare il seguente errore:

pyspark.sql.utils.AnalysisException: Unable to verify existence of default database: com.amazonaws.services glue.model.AccessDeniedException: 
Insufficient Lake Formation permission(s) on default (Service: AWSGlue; Status Code: 400; Error Code: AccessDeniedException; Request ID: request-id; Proxy: null)

Per risolvere l'errore precedente, aggiungi le concessioni richieste al ruolo del profilo dell'istanza EC2. Inoltre, fornisci concessioni alle tabelle Glue o al database insieme alle autorizzazioni per le tabelle.

Il cluster EMR non ha le configurazioni corrette o la stringa di query non è corretta

Se le autorizzazioni sono corrette, ma la configurazione non è corretta, viene visualizzato il seguente errore su spark-shell quando si tenta di accedere a Glue tra account:

An error occurred (EntityNotFoundException) when calling the GetTables operation: Database db-name not found.

oppure

org.apache.spark.sql.AnalysisException: Table or view not found: acct-id/db.table-name line 2 pos 14

Per risolvere questo errore, aggiungete tutti i parametri necessari per le rispettive configurazioni.


AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa