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 du catalogue AWS Lake Formation de AWS Glue données dans lequel 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 sur des tables protégées par Lake Formation lors de vos sessions interactives Athena Spark. Consultez les sections suivantes pour en savoir plus sur Lake Formation et sur son utilisation 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 validation du tag de session IAM. 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 à l'aide d'un rôle défini par l'utilisateur

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

É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 de 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 des données depuis S3 nécessitent l'SELECTautorisation de Lake Formation.

  • Spark Jobs dont write/delete les données dans S3 nécessitent l'ALL (SUPER)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 : Initialisation d'une session Spark pour un accès complet à la table à l'aide de Lake Formation

Conditions préalables

AWS GlueLe 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 SparkAWS Lake Formation, les configurations suivantes doivent être définies lors de l'initialisation de Spark afin que Spark utilise les 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" }

Tables 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 et Delta. Les tables Hudi ne permettent pas un accès complet aux tables.

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

  • Les configurations du catalogue sont immuables. Si vous souhaitez mettre à jour une configuration de catalogue, créez un nouveau catalogue en utilisantspark.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-, évitez-les dans votre requête, comme :

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