Wie kann ich EMR-Auftrags-Fehler beheben, die beim Versuch, eine Verbindung zum Glue Datenkatalog herzustellen, auftreten?

Lesedauer: 4 Minute
0

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.


AWS OFFICIAL
AWS OFFICIALAktualisiert vor einem Jahr