Wie kann ich EMR-Auftrags-Fehler beheben, die beim Versuch, eine Verbindung zum Glue Datenkatalog herzustellen, auftreten?
Meine Amazon-EMR-Aufträge können keine Verbindung zum AWS-Glue-Datenkatalog herstellen.
Kurzbeschreibung
Amazon EMR verwendet den Datenkatalog als persistenten Metastore, wenn Apache Spark, Apache Hive oder Presto/Trino verwendet wird. Sie können den Datenkatalog über verschiedene Cluster, Dienste, Anwendungen oder AWS-Konten verteilt nutzen.
Die Verbindung zum Datenkatalog kann jedoch aus den folgenden Gründen fehlschlagen:
- Unzureichende Berechtigungen für den Glue-Datenkatalog.
- Unzureichende Berechtigungen für die Amazon Simple Storage Service (Amazon S3)-Objekte, die als Tabellenspeicherort angegeben wurden.
- Unzureichende Berechtigungen für den AWS Key Management Service (AWS KMS) für verschlüsselte Objekte.
- Unzureichende Berechtigungen in AWS Lake Formation.
- Fehlende oder falsche Konfiguration der EMR-Clusterparameter.
- Falsche Abfrageformatierung.
Auflösung
Das EC2-Instance-Profil verfügt nicht über ausreichende Berechtigungen für den Datenkatalog oder den S3-Bucket
Um von demselben Konto oder kontoübergreifend auf den Datenkatalog zuzugreifen, müssen die folgenden Personen über Berechtigungen für AWS-Glue-Aktionen und für den S3-Bucket verfügen:
- Die Instance-Profilrolle von Amazon Elastic Compute Cloud (Amazon EC2).
- Die AWS Identity and Access Management (IAM)-Rolle, die den Datenkatalog aufruft.
Wenn die Berechtigungen fehlen, sehen Sie eine Fehlermeldung ähnlich der folgenden:
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
Um Probleme beim Zugriff auf den Datenkatalog von demselben Konto aus zu beheben, überprüfen Sie die Berechtigungen für das Instance-Profil oder den IAM-Benutzer.
Um Probleme beim kontenübergreifenden Zugriff auf den Datenkatalog zu beheben, überprüfen Sie alle Berechtigungen für das aufrufende Konto und die Konfiguration. Stellen Sie anschließend sicher, dass kontoübergreifender S3-Zugriff bereitgestellt wird.
Das EC2-Instance-Profil verfügt nicht über die erforderlichen AWS-KMS-Berechtigungen
Wenn der Datenkatalog mit einem vom Kunden verwalteten Schlüssel verschlüsselt ist, muss das EC2-Instance-Profil über die erforderlichen Berechtigungen für den Zugriff auf den Schlüssel verfügen. Wenn die Berechtigungen fehlen, sehen Sie eine Fehlermeldung ähnlich der folgenden. Der Fehler wird in Ihrer EMR-Konsole angezeigt, wenn Sie Spark Shell, Hive CLI oder Presto/Trino CLI verwenden. Der Fehler wird in Ihren Container-Protokollen angezeigt, wenn Sie Ihren Code programmgesteuert senden.
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))
Um den vorherigen Fehler zu vermeiden, fügen Sie die erforderlichen AWS-KMS-Berechtigungen hinzu, um den Zugriff auf den Schlüssel zu ermöglichen.
Wenn das AWS-Konto, das den Service aufruft, nicht dasselbe Konto ist, auf dem der Datenkatalog vorhanden ist, gehen Sie wie folgt vor:
- Aktivieren Sie die Schlüsselfreigabe, wenn sich das aufrufende AWS-Konto in derselben Region wie der Datenkatalog befindet.
- Für den Zugriff auf mehrere Regionen erstellen Sie einen Schlüssel für mehrere Regionen, den Sie mit anderen Konten teilen können.
Das Instance-Profil hat keinen Zugriff auf AWS Lake Formation oder die Glue-Tabellen verfügen nicht über die erforderlichen Berechtigungen
Wenn Datenkatalogberechtigungen in AWS Lake Formation verwaltet oder registriert werden, muss die Rolle über Lake-Formation-Berechtigungen für das Objekt verfügen. Wenn Lake-Formation-Berechtigungen für die Rolle fehlen, wird möglicherweise der folgende Fehler angezeigt:
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)
Um den vorherigen Fehler zu beheben, fügen Sie der EC2-Instance-Profil-Rolle die erforderlichen Berechtigungen hinzu. Zudem gewähren Sie den Glue-Tabellen oder der Datenbank zusammen mit den Tabellenberechtigungen diese Berechtigungen.
Der EMR-Cluster hat nicht die richtigen Konfigurationen oder die Abfragezeichenfolge ist falsch
Wenn die Berechtigungen korrekt sind, die Konfiguration jedoch falsch ist, wird auf Spark-Shell der folgende Fehler angezeigt, wenn Sie versuchen, über mehrere Konten hinweg auf Glue zuzugreifen:
An error occurred (EntityNotFoundException) when calling the GetTables operation: Database db-name not found.
oder
org.apache.spark.sql.AnalysisException: Table or view not found: acct-id/db.table-name line 2 pos 14
Um diesen Fehler zu beheben, fügen Sie alle notwendigen Parameter für die jeweiligen Konfigurationen hinzu.

Relevanter Inhalt
- AWS OFFICIALAktualisiert vor einem Monat
- AWS OFFICIALAktualisiert vor 2 Monaten
- AWS OFFICIALAktualisiert vor 3 Monaten