Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.
Accès complet à la table Lake Formation pour Amazon EMR sur EC2
Avec les versions 7.8.0 et supérieures d'Amazon EMR, vous pouvez tirer parti de AWS Lake Formation avec Glue Data Catalog, où le rôle d'exécution des tâches dispose d'autorisations complètes sur les tables sans les limites d'un contrôle d'accès précis. Cette fonctionnalité vous permet de lire et d'écrire dans des tables protégées par Lake Formation depuis votre Amazon EMR sur EC2 Spark batch et des jobs interactifs. Consultez les sections suivantes pour en savoir plus sur Lake Formation et comment l'utiliser avec Amazon EMR sur EC2.
Utiliser Lake Formation avec un accès complet à la table
Vous pouvez accéder aux tableaux du catalogue Glue Data protégés par AWS Lake Formation depuis Amazon EMR sur les jobs EC2 Spark ou les sessions interactives dans lesquelles le rôle d'exécution de la tâche dispose d'un accès complet aux tables. Il n'est pas nécessaire d'activer AWS Lake Formation sur l'application Amazon EMR on EC2. Lorsqu'une tâche Spark est configurée pour un accès complet aux tables (FTA), les informations d'identification AWS Lake Formation sont utilisées pour les données read/write S3 des tables enregistrées par AWS Lake Formation, tandis que les informations d'identification du rôle d'exécution de la tâche seront utilisées pour read/write les tables non enregistrées auprès de AWS Lake Formation.
Important
N'activez pas AWS Lake Formation pour un contrôle d'accès précis. Une tâche ne peut pas exécuter simultanément l'accès complet aux tables (FTA) et le contrôle Fine-Grained d'accès (FGAC) sur le même cluster ou la même application EMR.
Étape 1 : Activer l'accès complet à la table dans Lake Formation
Pour utiliser le mode Full Table Access (FTA), vous devez autoriser les moteurs de requêtes tiers à accéder aux données sans la validation des balises de session IAM dans AWS Lake Formation. Pour l’activer, suivez les étapes de la section Intégration des applications pour un accès complet aux tables.
Note
Lorsque vous accédez à des tableaux multicomptes, l'accès complet aux tableaux doit être activé à la fois dans les comptes des producteurs et des consommateurs. De la même manière, lors de l'accès à des tableaux interrégionaux, ce paramètre doit être activé à la fois dans les régions productrices et consommatrices.
Étape 2 : configurer des autorisations IAM pour le rôle d’exécution des tâches
Pour accéder en lecture ou en écriture aux données sous-jacentes, outre les autorisations Lake Formation, un rôle d'exécution de tâche nécessite l'autorisation lakeformation:GetDataAccess IAM. Avec cette autorisation, Lake Formation accède à la demande d'informations d'identification temporaires pour accéder aux données.
Voici un exemple de politique expliquant comment fournir des autorisations IAM pour accéder à un script dans Amazon S3, télécharger des journaux vers S3, autoriser l'API AWS Glue et accéder à Lake Formation.
Étape 2.1 Configurer les autorisations de Lake Formation
Les tâches Spark qui lisent des données depuis S3 nécessitent l'autorisation Lake Formation SELECT.
Les tâches Spark dont write/delete les données se trouvent dans S3 nécessitent l'autorisation Lake Formation ALL (SUPER).
Les tâches Spark qui interagissent avec le catalogue Glue Data nécessitent les autorisations DESCRIBE, ALTER, DROP, selon les besoins.
Pour plus d'informations, reportez-vous à la section Octroi d'autorisations sur les ressources du catalogue de données.
Étape 3 : Initialiser une session Spark pour un accès complet à la table à l'aide de Lake Formation
Conditions préalables
AWS Le catalogue de données Glue doit être configuré en tant que métastore pour accéder aux tables de Lake Formation.
Définissez les paramètres suivants pour configurer le catalogue Glue en tant que métastore :
--conf spark.sql.catalogImplementation=hive --conf spark.hive.metastore.client.factory.class=com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory
Pour plus d'informations sur l'activation du catalogue de données pour Amazon EMR sur EC2, consultez la section Configuration de Metastore pour Amazon EMR sur EC2.
Pour accéder aux tables enregistrées auprès de AWS Lake Formation, les configurations suivantes doivent être définies lors de l'initialisation de Spark afin de configurer Spark afin qu'il utilise les informations d'identification AWS Lake Formation.
-
spark.hadoop.fs.s3.credentialsResolverClass=com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver: configurez le système de fichiers EMR (EMRFS) ou EMR S3A pour utiliser les informations d'identification S3 de Lake Formation pour les tables enregistrées par AWS Lake Formation. Si la table n’est pas enregistrée, utilisez les informations d’identification du rôle d’exécution de la tâche. -
spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=trueetspark.hadoop.fs.s3.folderObject.autoAction.disabled=true: configurez EMRFS pour utiliser le type de contenu header application/x -directory au lieu du suffixe $folder$ lors de la création de dossiers S3. Cela est obligatoire lors de la lecture des tables Lake Formation, car les informations d'identification Lake Formation ne permettent pas de lire les dossiers de tables avec le suffixe $folder$. -
spark.sql.catalog.skipLocationValidationOnCreateTable.enabled=true: configurez Spark pour ignorer la validation de l’emplacement vide de la table avant sa création. Cela est nécessaire pour les tables enregistrées par Lake Formation, car les informations d'identification Lake Formation permettant de vérifier l'emplacement vide ne sont disponibles qu'après la création de la table Glue Data Catalog. Sans cette configuration, les informations d’identification du rôle d’exécution de la tâche valideront l’emplacement de la table vide. -
spark.sql.catalog.createDirectoryAfterTable.enabled=true: configurez Spark pour créer le dossier Amazon S3 après la création de la table dans le métastore Hive. Cela est obligatoire pour les tables enregistrées par Lake Formation, car les informations d'identification Lake Formation permettant de créer le dossier S3 ne sont disponibles qu'après la création de la table Glue Data Catalog. -
spark.sql.catalog.dropDirectoryBeforeTable.enabled=true: configurez Spark pour supprimer le dossier S3 avant la suppression de la table dans le métastore Hive. Cela est nécessaire pour les tables enregistrées par Lake Formation, car les informations d'identification Lake Formation permettant de supprimer le dossier S3 ne sont pas disponibles après la suppression de la table du catalogue de données Glue. -
spark.sql.catalog.<catalog>.glue.lakeformation-enabled=true: configurez le catalogue Iceberg pour utiliser les informations d'identification S3 de AWS Lake Formation pour les tables enregistrées dans Lake Formation. Si la table n’est pas enregistrée, utilisez les informations d’identification d’environnement par défaut.
Configurer le mode d'accès complet aux tables dans SageMaker Unified Studio
Pour accéder aux tables enregistrées à Lake Formation à partir de sessions Spark interactives dans des JupyterLab blocs-notes, utilisez le mode d'autorisation de compatibilité. Utilisez la commande magique %%configure pour configurer votre configuration Spark. Choisissez la configuration en fonction de votre type de table :
Remplacez les espaces réservés :
S3_DATA_LOCATION: le chemin de votre bucket S3REGION: AWS région (par exemple, us-est-1)ACCOUNT_ID: votre identifiant AWS de compte
Note
Vous devez définir ces configurations avant d’exécuter des opérations Spark dans votre bloc-notes.
Opérations prises en charge
Ces opérations utiliseront les informations d'identification de AWS Lake Formation pour accéder aux données du tableau.
CREATE TABLE
ALTER TABLE
INSERT INTO
INSERT OVERWRITE
UPDATE
MERGE INTO
DELETE FROM
ANALYZE TABLE
REPAIR TABLE
DROP TABLE
Requêtes de source de données Spark
Écritures de source de données Spark
Note
Les opérations non répertoriées ci-dessus continueront à utiliser les autorisations IAM pour accéder aux données de la table.
Considérations
Si une table Hive est créée à l'aide d'une tâche pour laquelle l'accès complet à la table n'est pas activé et qu'aucun enregistrement n'est inséré, les lectures ou écritures suivantes à partir d'une tâche avec accès complet à la table échoueront. En effet, EMR Spark sans accès complet à la table ajoute le
$folder$suffixe au nom du dossier de la table. Pour résoudre cela, vous pouvez procéder comme suit :Insérez au moins une ligne dans la table à partir d’une tâche pour laquelle FTA n’est pas activé.
Configurez la tâche pour laquelle FTA n'est pas activé pour ne pas utiliser de
$folder$suffixe dans le nom du dossier dans S3. Cela peut être réalisé en configurantspark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=truepour Spark.Créez un dossier S3 à l'emplacement de la table à l'
s3://path/to/table/table_nameaide de la console AWS S3 ou de l'interface de ligne de commande AWS S3.
L'accès complet aux tables est pris en charge avec le système de fichiers EMR (EMRFS) à partir de la version 7.8.0 d'Amazon EMR et avec le système de fichiers S3A à partir de la version 7.10.0 d'Amazon EMR.
L'accès complet aux tables est pris en charge pour les tables Hive, Iceberg, Delta et Hudi.
Considérations relatives à la prise en charge de Hudi FTA Write :
Les écritures Hudi FTA nécessitent d'être utilisées HoodieCredentialedHadoopStorage pour la vente d'informations d'identification lors de l'exécution de la tâche. Définissez la configuration suivante lors de l'exécution des tâches Hudi :
hoodie.storage.class=org.apache.spark.sql.hudi.storage.HoodieCredentialedHadoopStorageLa prise en charge de l'écriture Full Table Access (FTA) pour Hudi est disponible à partir de la version 7.12 d'Amazon EMR.
La prise en charge de l'écriture Hudi FTA ne fonctionne actuellement qu'avec les configurations Hudi par défaut. Les paramètres Hudi personnalisés ou autres que ceux par défaut peuvent ne pas être entièrement pris en charge et peuvent entraîner un comportement inattendu.
Le clustering pour les tables Hudi Merge-On-Read (MOR) n'est pas pris en charge pour le moment en mode d'écriture FTA.
Les tâches faisant référence à des tables avec des règles de contrôle Fine-Grained d'accès à la formation des lacs (FGAC) ou des vues du catalogue de données Glue échoueront. Pour interroger une table avec des règles FGAC ou une vue du catalogue de données Glue, vous devez utiliser le mode FGAC. Vous pouvez activer le mode FGAC en suivant les étapes décrites dans la AWS documentation : Utilisation d'Amazon EMR sur EC2 avec AWS Lake Formation pour un contrôle d'accès précis.
L’accès complet aux tables ne prend pas en charge Spark Streaming.
Lorsque vous écrivez Spark DataFrame dans une table Lake Formation, seul le mode APPEND est pris en charge pour les tables Hive et Iceberg :
df.write.mode("append").saveAsTable(table_name)La création de tables externes nécessite des autorisations IAM.
Comme Lake Formation met temporairement en cache les informations d'identification dans une tâche Spark, une tâche par lots Spark ou une session interactive en cours d'exécution peut ne pas refléter les modifications d'autorisation.
Vous devez utiliser un rôle défini par l'utilisateur et non un rôle lié à un service : exigences de Lake Formation pour les rôles.
Support d'écriture Hudi FTA - Opérations prises en charge
Le tableau suivant indique les opérations d'écriture prises en charge pour les tables Hudi Copy-On-Write (COW) et Merge-On-Read (MOR) en mode Accès complet aux tables :
| Type de table | Opération | Commande SQL Write | Statut |
|---|---|---|---|
| VACHE | INSERT | INSÉRER DANS LE TABLEAU | Pris en charge |
| VACHE | INSERT | INSÉRER DANS LE TABLEAU - PARTITION (statique, dynamique) | Pris en charge |
| VACHE | INSERT | INSERT OVERWRITE | Pris en charge |
| VACHE | INSERT | INSERT OVERWRITE - PARTITION (statique, dynamique) | Pris en charge |
| UPDATE | UPDATE | TABLEAU DE MISE À JOUR | Pris en charge |
| VACHE | UPDATE | TABLEAU DE MISE À JOUR - Modifier la partition | Non pris en charge |
| DELETE | DELETE | SUPPRIMER DU TABLEAU | Pris en charge |
| ALTER | ALTER | MODIFIER LA TABLE - RENOMMER EN | Non pris en charge |
| VACHE | ALTER | MODIFIER LA TABLE - DÉFINIR LES PROPRIÉTÉS DU TABLEAU | Pris en charge |
| VACHE | ALTER | MODIFIER LA TABLE -- DÉSACTIVER LES PROPRIÉTÉS DU TABLEAU | Pris en charge |
| VACHE | ALTER | MODIFIER LA TABLE - MODIFIER LA COLONNE | Pris en charge |
| VACHE | ALTER | MODIFIER LA TABLE - AJOUTER DES COLONNES | Pris en charge |
| VACHE | ALTER | MODIFIER LA TABLE - AJOUTER UNE PARTITION | Pris en charge |
| VACHE | ALTER | MODIFIER LA TABLE - SUPPRIMER UNE PARTITION | Pris en charge |
| VACHE | ALTER | ALTER TABLE - RÉCUPÉRER DES PARTITIONS | Pris en charge |
| VACHE | ALTER | RÉPARER LES PARTITIONS DE SYNCHRONISATION DES TABLES | Pris en charge |
| DROP | DROP | DROP TABLE | Pris en charge |
| VACHE | DROP | TABLE DE DÉPÔT - PURGE | Pris en charge |
| CREATE | CREATE | CRÉER UN TABLEAU - Géré | Pris en charge |
| VACHE | CREATE | CRÉER UNE TABLE - PARTITIONNER PAR | Pris en charge |
| VACHE | CREATE | CRÉER UNE TABLE SI ELLE N'EXISTE PAS | Pris en charge |
| VACHE | CREATE | CREATE TABLE LIKE | Pris en charge |
| VACHE | CREATE | CREATE TABLE AS SELECT | Pris en charge |
| CREATE | CREATE | CRÉER UN TABLEAU avec EMPLACEMENT - Tableau externe | Non pris en charge |
| DATAFRAME (INSÉRER) | DATAFRAME (INSÉRER) | enregistrer AsTable.Overwrite | Pris en charge |
| VACHE | DATAFRAME (INSÉRER) | enregistrer AsTable.Append | Non pris en charge |
| VACHE | DATAFRAME (INSÉRER) | enregistrer AsTable.Ignore | Pris en charge |
| VACHE | DATAFRAME (INSÉRER) | enregistrer AsTable.ErrorIfExists | Pris en charge |
| VACHE | DATAFRAME (INSÉRER) | save AsTable - Tableau externe (chemin) | Non pris en charge |
| VACHE | DATAFRAME (INSÉRER) | enregistrer (chemin) - DF v1 | Non pris en charge |
| MOR | INSERT | INSÉRER DANS LE TABLEAU | Pris en charge |
| MOR | INSERT | INSÉRER DANS LE TABLEAU - PARTITION (statique, dynamique) | Pris en charge |
| MOR | INSERT | INSERT OVERWRITE | Pris en charge |
| MOR | INSERT | INSERT OVERWRITE - PARTITION (statique, dynamique) | Pris en charge |
| UPDATE | UPDATE | TABLEAU DE MISE À JOUR | Pris en charge |
| MOR | UPDATE | TABLEAU DE MISE À JOUR - Modifier la partition | Non pris en charge |
| DELETE | DELETE | SUPPRIMER DU TABLEAU | Pris en charge |
| ALTER | ALTER | MODIFIER LA TABLE - RENOMMER EN | Non pris en charge |
| MOR | ALTER | MODIFIER LA TABLE - DÉFINIR LES PROPRIÉTÉS DU TABLEAU | Pris en charge |
| MOR | ALTER | MODIFIER LA TABLE -- DÉSACTIVER LES PROPRIÉTÉS DU TABLEAU | Pris en charge |
| MOR | ALTER | MODIFIER LA TABLE - MODIFIER LA COLONNE | Pris en charge |
| MOR | ALTER | MODIFIER LA TABLE - AJOUTER DES COLONNES | Pris en charge |
| MOR | ALTER | MODIFIER LA TABLE - AJOUTER UNE PARTITION | Pris en charge |
| MOR | ALTER | MODIFIER LA TABLE - SUPPRIMER UNE PARTITION | Pris en charge |
| MOR | ALTER | ALTER TABLE - RÉCUPÉRER DES PARTITIONS | Pris en charge |
| MOR | ALTER | RÉPARER LES PARTITIONS DE SYNCHRONISATION DES TABLES | Pris en charge |
| DROP | DROP | DROP TABLE | Pris en charge |
| MOR | DROP | TABLE DE DÉPÔT - PURGE | Pris en charge |
| CREATE | CREATE | CRÉER UN TABLEAU - Géré | Pris en charge |
| MOR | CREATE | CRÉER UNE TABLE - PARTITIONNER PAR | Pris en charge |
| MOR | CREATE | CRÉER UNE TABLE SI ELLE N'EXISTE PAS | Pris en charge |
| MOR | CREATE | CREATE TABLE LIKE | Pris en charge |
| MOR | CREATE | CREATE TABLE AS SELECT | Pris en charge |
| CREATE | CREATE | CRÉER UN TABLEAU avec EMPLACEMENT - Tableau externe | Non pris en charge |
| DATAFRAME (BOULEVERSÉ) | DATAFRAME (BOULEVERSÉ) | enregistrer AsTable.Overwrite | Pris en charge |
| MOR | DATAFRAME (BOULEVERSÉ) | enregistrer AsTable.Append | Non pris en charge |
| MOR | DATAFRAME (BOULEVERSÉ) | enregistrer AsTable.Ignore | Pris en charge |
| MOR | DATAFRAME (BOULEVERSÉ) | enregistrer AsTable.ErrorIfExists | Pris en charge |
| MOR | DATAFRAME (BOULEVERSÉ) | save AsTable - Tableau externe (chemin) | Non pris en charge |
| MOR | DATAFRAME (BOULEVERSÉ) | enregistrer (chemin) - DF v1 | Non pris en charge |
| DATAFRAME (SUPPRIMER) | DATAFRAME (SUPPRIMER) | enregistrer AsTable.Append | Non pris en charge |
| MOR | DATAFRAME (SUPPRIMER) | save AsTable - Tableau externe (chemin) | Non pris en charge |
| MOR | DATAFRAME (SUPPRIMER) | enregistrer (chemin) - DF v1 | Non pris en charge |
| DATAFRAME (BULK_INSERT) | DATAFRAME (BULK_INSERT) | enregistrer AsTable.Overwrite | Pris en charge |
| MOR | DATAFRAME (BULK_INSERT) | enregistrer AsTable.Append | Non pris en charge |
| MOR | DATAFRAME (BULK_INSERT) | enregistrer AsTable.Ignore | Pris en charge |
| MOR | DATAFRAME (BULK_INSERT) | enregistrer AsTable.ErrorIfExists | Pris en charge |
| MOR | DATAFRAME (BULK_INSERT) | save AsTable - Tableau externe (chemin) | Non pris en charge |
| MOR | DATAFRAME (BULK_INSERT) | enregistrer (chemin) - DF v1 | Non pris en charge |