View a markdown version of this page

Utilisation de Lake Formation avec les groupes de travail Athena Spark - Amazon Athena

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.

Utilisation de Lake Formation avec les groupes de travail Athena Spark

Avec la version finale d'Apache Spark version 3.5, vous pouvez tirer parti AWS Lake Formation de AWS Glue Data Catalog où le rôle d'exécution de session dispose d'autorisations complètes sur les tables. Cette fonctionnalité vous permet de lire et d'écrire dans des tableaux protégés par Lake Formation depuis vos sessions interactives Athena Spark. Consultez les sections suivantes pour en savoir plus sur Lake Formation et comment l'utiliser avec Athena Spark.

Étape 1 : Activer l'accès complet à la table dans Lake Formation

Pour utiliser le mode Full Table Access (FTA), vous devez autoriser Athena Spark à 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.

Étape 1.1 : Enregistrer les emplacements des données dans Lake Formation en utilisant le rôle défini par l'utilisateur

Vous devez utiliser un rôle défini par l'utilisateur pour enregistrer les emplacements des données. AWS Lake Formation Consultez la section Exigences relatives aux rôles utilisés pour enregistrer des emplacements pour plus de détails.

Étape 2 : Configuration des autorisations IAM pour le rôle d'exécution de la session

Pour accéder en lecture ou en écriture aux données sous-jacentes, outre les autorisations Lake Formation, le rôle d'exécution a besoin de 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 AWS Glue l'API et accéder à Lake Formation.

Étape 2.1 : Configuration des autorisations de Lake Formation

  • Les tâches Spark qui lisent les données de S3 nécessitent SELECT l'autorisation de Lake Formation.

  • Les tâches Spark dont write/delete les données stockées dans S3 nécessitent ALL (SUPER) l'autorisation de Lake Formation.

  • Les tâches Spark qui interagissent avec le catalogue de AWS Glue données nécessitent une DROP autorisation DESCRIBEALTER, le cas échéant.

Étape 3 : Initialiser une session Spark pour un accès complet à la table à l'aide de Lake Formation

Conditions préalables

AWS Glue Le catalogue de données 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 AWS Glue catalogue en tant que métastore :

{ "spark.hadoop.glue.catalogid": "ACCOUNT_ID", "spark.hadoop.hive.metastore.client.factory.class": "com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory", "spark.hadoop.hive.metastore.glue.catalogid": "ACCOUNT_ID", "spark.sql.catalogImplementation": "hive" }

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 des AWS Lake Formation informations d'identification.

Hive

{ "spark.hadoop.fs.s3.credentialsResolverClass": "com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver", "spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject": "true", "spark.hadoop.fs.s3.folderObject.autoAction.disabled": "true", "spark.sql.catalog.skipLocationValidationOnCreateTable.enabled": "true", "spark.sql.catalog.createDirectoryAfterTable.enabled": "true", "spark.sql.catalog.dropDirectoryBeforeTable.enabled": "true" }

Apache Iceberg

{ "spark.sql.extensions": "io.delta.sql.DeltaSparkSessionExtension", "spark.sql.catalog.spark_catalog": "org.apache.iceberg.spark.SparkSessionCatalog", "spark.sql.catalog.spark_catalog.warehouse": "s3://your-bucket/warehouse/", "spark.sql.catalog.spark_catalog.client.region": "REGION", "spark.sql.catalog.spark_catalog.catalog-impl": "org.apache.iceberg.aws.glue.GlueCatalog", "spark.sql.catalog.spark_catalog.glue.account-id": "ACCOUNT_ID", "spark.sql.catalog.spark_catalog.glue.lakeformation-enabled": "true" }

Tableaux Amazon S3

{ "spark.sql.extensions": "io.delta.sql.DeltaSparkSessionExtension", "spark.sql.catalog.{catalogName}": "org.apache.iceberg.spark.SparkCatalog", "spark.sql.catalog.{catalogName}.warehouse": "arn:aws:s3tables:{region}:{accountId}:bucket/{bucketName}", "spark.sql.catalog.{catalogName}.catalog-impl": "org.apache.iceberg.aws.glue.GlueCatalog", "spark.sql.catalog.{catalogName}.glue.id": "{accountId}:s3tablescatalog/{bucketName}", "spark.sql.catalog.{catalogName}.glue.lakeformation-enabled": "true", "spark.sql.catalog.{catalogName}.client.region": "REGION", "spark.sql.catalog.{catalogName}.glue.account-id": "ACCOUNT_ID" }

Delta Lake

{ "spark.sql.extensions": "io.delta.sql.DeltaSparkSessionExtension", "spark.sql.catalog.spark_catalog": "org.apache.spark.sql.delta.catalog.DeltaCatalog", "spark.hadoop.fs.s3.credentialsResolverClass": "com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver", "spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject": "true", "spark.hadoop.fs.s3.folderObject.autoAction.disabled": "true", "spark.sql.catalog.skipLocationValidationOnCreateTable.enabled": "true", "spark.sql.catalog.createDirectoryAfterTable.enabled": "true", "spark.sql.catalog.dropDirectoryBeforeTable.enabled": "true" }

Considérations et restrictions

  • L'accès complet aux tables est pris en charge pour les tables Hive, Iceberg, Amazon S3 Tables et Delta. Les tables Hudi ne prennent pas en charge l'accès complet aux tables.

  • Pour ajouter de nouveaux catalogues à une session active, utilisez spark.conf.set les nouvelles configurations de catalogue.

  • Les configurations du catalogue sont immuables. Si vous souhaitez mettre à jour la configuration d'un catalogue, créez un nouveau catalogue à l'aide despark.conf.set.

  • Ajoutez uniquement les catalogues dont vous avez besoin à la session Spark.

  • Pour modifier le catalogue par défaut : spark.catalog.setCurrentCatalog("s3tablesbucket")

  • Si le nom de votre catalogue contient des caractères spéciaux-, tels que, échappez-les dans votre requête, par exemple :

    SELECT sales_amount as nums FROM `my-s3-tables-bucket`.`s3namespace`.`daily_sales` LIMIT 100