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
DROPautorisationDESCRIBEALTER, 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.setde 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 utilisant
spark.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