Wie kann ich EMR-Jobfehler beheben, wenn ich versuche, eine Verbindung zum Glue-Datenkatalog herzustellen?

Lesedauer: 4 Minute
0

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.


AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren