View a markdown version of this page

Utilizzo di Lake Formation con i gruppi di lavoro Athena Spark - Amazon Athena

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Utilizzo di Lake Formation con i gruppi di lavoro Athena Spark

Con la versione di rilascio di Apache Spark versione 3.5, puoi sfruttare AWS Glue Data Catalog in cui il ruolo AWS Lake Formation di esecuzione della sessione dispone di autorizzazioni complete per la tabella. Questa funzionalità consente di leggere e scrivere su tabelle protette da Lake Formation dalle sessioni interattive di Athena Spark. Consulta le sezioni seguenti per saperne di più su Lake Formation e su come usarlo con Athena Spark.

Passaggio 1: abilita l'accesso completo alla tabella in Lake Formation

Per utilizzare la modalità Full Table Access (FTA), devi consentire ad Athena Spark di accedere ai dati senza la convalida del tag di sessione IAM. AWS Lake Formation Per abilitarli, seguire i passaggi descritti in Integrazione delle applicazioni per l'accesso completo alla tabella.

Fase 1.1: Registrazione delle posizioni dei dati in Lake Formation utilizzando un ruolo definito dall'utente

È necessario utilizzare un ruolo definito dall'utente per registrare le posizioni dei dati in AWS Lake Formation. Per i dettagli, consulta Requisiti per i ruoli utilizzati per registrare le posizioni.

Fase 2: Configurazione delle autorizzazioni IAM per il ruolo di esecuzione della sessione

Per l'accesso in lettura o scrittura ai dati sottostanti, oltre alle autorizzazioni di Lake Formation, il ruolo di esecuzione richiede l'autorizzazione lakeformation:GetDataAccess IAM. Con questa autorizzazione, Lake Formation concede la richiesta di credenziali temporanee per accedere ai dati.

Di seguito è riportato un esempio di policy su come fornire le autorizzazioni IAM per accedere a uno script in Amazon S3, caricare i log su S3, le autorizzazioni AWS Glue API e l'autorizzazione per accedere a Lake Formation.

Fase 2.1: Configurazione delle autorizzazioni di Lake Formation

  • I lavori Spark che leggono i dati da S3 richiedono l'autorizzazione di Lake Formation. SELECT

  • I lavori Spark in cui write/delete i dati in S3 richiedono l'autorizzazione di Lake Formation. ALL (SUPER)

  • I lavori Spark che interagiscono con AWS Glue Data Catalog richiedono DESCRIBE l'DROPautorizzazione ALTER appropriata.

Passaggio 3: inizializza una sessione Spark per l'accesso completo alla tabella utilizzando Lake Formation

Prerequisiti

AWS Glue Data Catalog deve essere configurato come metastore per accedere alle tabelle di Lake Formation.

Impostate le seguenti impostazioni per configurare il AWS Glue catalogo come metastore:

{ "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" }

Per accedere alle tabelle registrate con AWS Lake Formation, è necessario impostare le seguenti configurazioni durante l'inizializzazione di Spark per configurare Spark per l'utilizzo delle credenziali. AWS Lake Formation

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" }

Tabelle di 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" }

Considerazioni e limitazioni

  • L'accesso completo alle tabelle è supportato per le tabelle Hive, Iceberg, Amazon S3 e Delta. Le tabelle Hudi non supportano l'accesso completo alle tabelle.

  • Per aggiungere nuovi cataloghi a una sessione attiva, usa spark.conf.set le nuove configurazioni del catalogo.

  • Le configurazioni del catalogo sono immutabili. Se desideri aggiornare la configurazione di un catalogo, crea un nuovo catalogo utilizzando. spark.conf.set

  • Aggiungi solo i cataloghi necessari alla sessione di spark.

  • Per modificare il catalogo predefinito: spark.catalog.setCurrentCatalog("s3tablesbucket")

  • Se hai caratteri speciali nel nome del tuo catalogo, - esegui l'escape nella tua query, ad esempio:

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