Comment puis-je résoudre les échecs liés aux 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 en tant que méta-stockage persistant lors de l'utilisation d'Apache Spark, Apache Hive ou Presto/Trino. Vous pouvez partager le catalogue de données entre différents clusters, services, applications ou comptes AWS.

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

  • Autorisations insuffisantes sur le catalogue de données Glue.
  • Autorisations insuffisantes sur les objets Amazon Simple Storage Service (Amazon S3) spécifiés comme emplacement de la table.
  • Autorisations insuffisantes sur 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.

Solution

Le profil d'instance EC2 ne dispose pas d'autorisations suffisantes sur 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 éléments suivants doivent disposer d'autorisations pour accéder aux actions AWS Glue et au compartiment S3 :

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

Si les autorisations sont manquantes, une erreur semblable à ce qui suit 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 du profil d'instance ou de l'utilisateur IAM.

Pour résoudre les problèmes liés à l'accès intercompte au catalogue de données, vérifiez toutes les autorisations relatives au compte à l'origine de l'appel et à la configuration. Vérifiez ensuite 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 à cette clé. Si les autorisations sont manquantes, une erreur semblable à ce qui suit peut s'afficher. L'erreur apparaît dans votre console EMR si vous utilisez spark-Shell, ou les interfaces de la ligne de commande Hive ou Presto/Trino. L'erreur apparaît dans les journaux de vos conteneurs 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 appelant le service diffère de 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 multirégional, créez une clé multirégion à 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 nécessaires

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 le rôle ne dispose pas des autorisations Lake Formation, le message d'erreur suivant 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 nécessaires au rôle du profil d'instance EC2. Accordez également des autorisations aux tables Glue ou à la base de données ainsi que des autorisations relatives aux tables.

Le cluster EMR ne dispose pas des configurations correctes ou la chaîne de requête est incorrecte

Si les autorisations sont correctes, mais que la configuration ne l'est pas, l'erreur suivante s'affiche sur spark-shell lorsque vous tentez d'accéder à Glue entre 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 un an