Comment puis-je résoudre les problèmes liés à l'échec des tâches EMR lorsque je tente de me connecter au catalogue de données Glue ?

Lecture de 4 minute(s)
0

Mes tâches Amazon EMR ne peuvent pas se connecter au catalogue de données AWS Glue.

Brève description

Amazon EMR utilise le catalogue de données comme métastore permanent lors de l'utilisation d'Apache Spark, d’Apache Hive ou Presto/Trino. Vous pouvez partager le catalogue de données entre différents clusters, services, applications ou comptes AWS.

Cependant, la connexion au catalogue de données peut échouer pour les raisons suivantes :

  • Autorisations insuffisantes pour accéder au catalogue de données Glue.
  • Autorisations insuffisantes pour les objets Amazon Simple Storage Service (Amazon S3) spécifiés comme emplacement de la table.
  • Autorisations insuffisantes pour le service AWS Key Management Service (AWS KMS) pour les objets chiffrés.
  • Autorisations insuffisantes dans AWS Lake Formation.
  • Configuration des paramètres du cluster EMR manquante ou incorrecte.
  • Formatage de requête incorrect.

Résolution

Le profil d'instance EC2 ne dispose pas des autorisations suffisantes pour le catalogue de données ou le compartiment S3

Pour accéder au catalogue de données à partir du même compte ou de plusieurs comptes, les rôles suivants doivent disposer d'autorisations sur les actions AWS Glue et sur le compartiment S3 :

  • Le profil d’instance Amazon Elastic Compute Cloud (Amazon EC2).
  • Le rôle AWS Identity and Access Management (IAM) qui appelle le catalogue de données.

Si des autorisations sont manquantes, une erreur similaire à l’erreur suivante s'affiche :

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

Pour résoudre les problèmes liés à l'accès au catalogue de données à partir du même compte, vérifiez les autorisations relatives au profil d'instance ou à l'utilisateur IAM.

Pour résoudre les problèmes lors de l'accès à plusieurs comptes du catalogue de données, vérifiez toutes les autorisations relatives au compte appelant et à sa configuration. Puis, vérifiez que l'accès S3 intercompte est fourni.

Le profil d'instance EC2 ne dispose pas des autorisations AWS KMS nécessaires

Si le catalogue de données est chiffré à l'aide d'une clé gérée par le client, le profil d'instance EC2 doit disposer des autorisations nécessaires pour accéder à la clé. Si des autorisations sont manquantes, il se peut qu'une erreur similaire à la suivante s'affiche. L'erreur apparaît dans votre console EMR si vous utilisez le shell Spark, la CLI Hive ou la CLI Presto/Trino. L'erreur apparaît dans vos journaux de conteneur si vous soumettez votre code par programmation.

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))

Pour éviter l'erreur précédente, ajoutez les autorisations AWS KMS nécessaires pour autoriser l'accès à la clé.

Si le compte AWS qui appelle le service n'est pas le même que celui sur lequel se trouve le catalogue de données, procédez comme suit :

  • Activez le partage de clés si le compte AWS appelant se trouve dans la même région que le catalogue de données.
  • Pour un accès multi-région, créez une clé multi-régions à partager avec d'autres comptes.

Le profil d'instance n'a pas accès à AWS Lake Formation ou les tables Glue ne disposent pas des autorisations requises

Lorsque les autorisations du catalogue de données sont gérées ou enregistrées dans AWS Lake Formation, le rôle doit disposer d’autorisations Lake Formation sur l'objet. Si les autorisations Lake Formation ne sont pas disponibles sur le rôle, l'erreur suivante peut s'afficher :

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)

Pour résoudre l'erreur précédente, ajoutez les autorisations requises au rôle de profil d'instance EC2. Aussi, accordez des autorisations aux tables Glue ou à la base de données, ainsi que les autorisations de table.

Le cluster EMR ne présente pas les configurations correctes ou la chaîne de requête est incorrecte

Si les autorisations sont correctes, mais que la configuration est incorrecte, l'erreur suivante s'affiche sur le shell Spark lorsque vous tentez d'accéder à Glue entre plusieurs comptes :

An error occurred (EntityNotFoundException) when calling the GetTables operation: Database db-name not found.

ou

org.apache.spark.sql.AnalysisException: Table or view not found: acct-id/db.table-name line 2 pos 14

Pour résoudre cette erreur, ajoutez tous les paramètres nécessaires pour les configurations respectives.


AWS OFFICIEL
AWS OFFICIELA mis à jour il y a 2 ans