Come posso risolvere gli errori dei processi EMR quando tento di connettermi al Catalogo dati Glue?
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:
- Attiva la condivisione delle chiavi se l'account AWS chiamante si trova nella stessa regione del Catalogo dati.
- Per l'accesso multiregionale, crea una chiave multiregionale da condividere con altri account.
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.
Contenuto pertinente
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata 10 mesi fa
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata 2 anni fa