Wie kann ich EMR-Jobfehler beheben, wenn ich versuche, eine Verbindung zum Glue-Datenkatalog herzustellen?
Meine Amazon EMR-Jobs können keine Verbindung zum AWS-Glue-Datenkatalog herstellen.
Kurzbeschreibung
Amazon EMR verwendet den Datenkatalog als persistenten Metaspeicher, wenn Apache Spark, Apache Hive oder Presto/Trino verwendet wird. Du kannst den Datenkatalog für verschiedene Cluster, Dienste, Anwendungen oder AWS-Konten gemeinsam 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)-Service für verschlüsselte Objekte.
- Unzureichende Berechtigungen in AWS Lake Formation.
- Fehlende oder falsche Konfiguration der EMR-Cluster-Parameter.
- Falsche Abfrageformatierung.
Lösung
Das EC2-Instanzprofil verfügt nicht über ausreichende Berechtigungen für den Datenkatalog oder den S3-Bucket
Um von demselben Konto oder kontoübergreifend auf den Datenkatalog zugreifen zu können, müssen die folgenden Personen über Berechtigungen für AWS Glue-Aktionen und den S3-Bucket verfügen:
- Das Amazon Elastic Compute Cloud (Amazon EC2)-Instance-Profil.
- Die Rolle AWS Identity and Access Management (IAM), die den Datenkatalog aufruft.
Wenn Berechtigungen fehlen, wird eine Fehlermeldung ähnlich der folgenden angezeigt:
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üfe die Berechtigungen für das Instance-Profil oder den IAM-Benutzer.
Um Probleme beim Zugriff auf die Cross-Konten des Datenkatalogs zu beheben, überprüfe alle Berechtigungen für das aufrufende Konto und die Konfiguration. Stelle dann sicher, dass der kontoübergreifende 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 Berechtigungen fehlen, wird möglicherweise ein Fehler ähnlich dem folgenden angezeigt. Der Fehler wird in deiner EMR-Konsole angezeigt, wenn du die Spark-Shell, die Hive CLI oder die Presto/Trino CLI verwendest. Der Fehler erscheint in deinen Container-Protokollen, wenn du deinen Code programmgesteuert einreichst.
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üge 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, gehe wie folgt vor:
- Aktiviere die Schlüsselfreigabe, wenn sich das aufrufende AWS-Konto in derselben Region wie der Datenkatalog befindet.
- Erstelle für den Zugriff über mehrere Regionen einen Schlüssel für mehrere Regionen, den du mit anderen Konten teilen kannst.
Das Instance-Profil hat keinen Zugriff auf AWS Lake Formation oder die Glue-Tabellen verfügen nicht über die erforderlichen Berechtigungen
Wenn Datenkatalog-Berechtigungen 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üge der EC2-Instance-Profilrolle die erforderlichen Grants hinzu. Und gewähre den Glue-Tabellen oder der Datenbank zusammen mit den Tabellenberechtigungen Grants.
Der EMR-Cluster hat nicht die richtigen Konfigurationen oder die Abfragezeichenfolge ist falsch
Wenn die Berechtigungen korrekt sind, aber die Konfiguration falsch ist, wird der folgende Fehler in der Spark-Shell angezeigt, wenn du versuchst, kontoübergreifend 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üge alle erforderlichen Parameter für die jeweiligen Konfigurationen hinzu.

Relevanter Inhalt
- AWS OFFICIALAktualisiert vor 6 Monaten
- AWS OFFICIALAktualisiert vor 4 Monaten
- AWS OFFICIALAktualisiert vor 3 Jahren