View a markdown version of this page

Accesso completo alle tabelle di Lake Formation per Amazon EMR su EC2 - Amazon EMR

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à.

Accesso completo alle tabelle di Lake Formation per Amazon EMR su EC2

Con le versioni 7.8.0 e successive di Amazon EMR, puoi sfruttare AWS Lake Formation con Glue Data Catalog, dove il ruolo di job runtime dispone di autorizzazioni complete per le tabelle senza le limitazioni del controllo granulare degli accessi. Questa funzionalità consente di leggere e scrivere su tabelle protette da Lake Formation da Amazon EMR su lavori batch e interattivi EC2 Spark. Consulta le sezioni seguenti per saperne di più su Lake Formation e su come utilizzarlo con Amazon EMR su EC2.

Utilizzo di Lake Formation con accesso completo alle tabelle

Puoi accedere alle tabelle del catalogo Glue Data protette di AWS Lake Formation da Amazon EMR su lavori EC2 Spark o sessioni interattive in cui il ruolo di runtime del lavoro ha accesso completo alle tabelle. Non è necessario abilitare AWS Lake Formation sull'applicazione Amazon EMR on EC2. Quando un job Spark è configurato per l'accesso completo alle tabelle (FTA), le credenziali di AWS Lake Formation vengono utilizzate per i dati read/write S3 per le tabelle registrate in AWS Lake Formation, mentre le credenziali del ruolo di runtime del lavoro verranno utilizzate per read/write le tabelle non registrate con Lake Formation. AWS

Importante

Non abilitate AWS Lake Formation per un controllo granulare degli accessi. Un job non può eseguire contemporaneamente Full Table Access (FTA) e Fine-Grained Access Control (FGAC) sullo stesso cluster o applicazione EMR.

Fase 1: Abilitare l'accesso completo alla tabella in Lake Formation

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

Nota

Quando si accede a tabelle con più account, è necessario abilitare l'accesso completo alle tabelle sia negli account produttore che in quello consumer. Allo stesso modo, quando si accede alle tabelle interregionali, questa impostazione deve essere abilitata sia nelle regioni di produttori che di consumatori.

Fase 2: Configurazione delle autorizzazioni IAM per il ruolo di runtime dei processi

Per l'accesso in lettura o scrittura ai dati sottostanti, oltre alle autorizzazioni di Lake Formation, un ruolo di job runtime 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 politica su come fornire le autorizzazioni IAM per accedere a uno script in Amazon S3, caricare i log su S3, le autorizzazioni API AWS Glue e l'autorizzazione per accedere a Lake Formation.

Passaggio 2.1 Configurare le autorizzazioni di Lake Formation

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

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

  • I lavori Spark che interagiscono con il catalogo Glue Data richiedono le autorizzazioni DESCRIBE, ALTER, DROP, a seconda dei casi.

Per maggiori informazioni, consulta Concessione delle autorizzazioni sulle risorse di Data Catalog.

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 catalogo Glue come metastore:

--conf spark.sql.catalogImplementation=hive --conf spark.hive.metastore.client.factory.class=com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory

Per ulteriori informazioni sull'attivazione del catalogo dati per Amazon EMR su EC2, consulta la configurazione del metastore per Amazon EMR su EC2.

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

Hive
‐‐conf spark.hadoop.fs.s3.credentialsResolverClass=com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver --conf spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=true --conf spark.hadoop.fs.s3.folderObject.autoAction.disabled=true --conf spark.sql.catalog.skipLocationValidationOnCreateTable.enabled=true --conf spark.sql.catalog.createDirectoryAfterTable.enabled=true --conf spark.sql.catalog.dropDirectoryBeforeTable.enabled=true
Iceberg
--conf spark.sql.catalog.spark_catalog=org.apache.iceberg.spark.SparkSessionCatalog --conf spark.sql.catalog.spark_catalog.warehouse=S3_DATA_LOCATION --conf spark.sql.catalog.spark_catalog.client.region=REGION --conf spark.sql.catalog.spark_catalog.type=glue --conf spark.sql.catalog.spark_catalog.glue.account-id=ACCOUNT_ID --conf spark.sql.catalog.spark_catalog.glue.lakeformation-enabled=true --conf spark.sql.catalog.dropDirectoryBeforeTable.enabled=true
Delta Lake
‐‐conf spark.hadoop.fs.s3.credentialsResolverClass=com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver --conf spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=true --conf spark.hadoop.fs.s3.folderObject.autoAction.disabled=true --conf spark.sql.catalog.skipLocationValidationOnCreateTable.enabled=true --conf spark.sql.catalog.createDirectoryAfterTable.enabled=true --conf spark.sql.catalog.dropDirectoryBeforeTable.enabled=true
Hudi
‐‐conf spark.hadoop.fs.s3.credentialsResolverClass=com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver --conf spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=true --conf spark.hadoop.fs.s3.folderObject.autoAction.disabled=true --conf spark.sql.catalog.skipLocationValidationOnCreateTable.enabled=true --conf spark.sql.catalog.createDirectoryAfterTable.enabled=true --conf spark.sql.catalog.dropDirectoryBeforeTable.enabled=true --conf spark.jars=/usr/lib/hudi/hudi-spark-bundle.jar --conf spark.sql.extensions=org.apache.spark.sql.hudi.HoodieSparkSessionExtension --conf spark.sql.catalog.spark_catalog=org.apache.spark.sql.hudi.catalog.HoodieCatalog --conf spark.serializer=org.apache.spark.serializer.KryoSerializer
  • spark.hadoop.fs.s3.credentialsResolverClass=com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver: configura EMR Filesystem (EMRFS) o EMR S3A per utilizzare le credenziali Lake Formation S3 per le tabelle registrate in Lake Formation. AWS Se la tabella non è registrata, utilizzare le credenziali del ruolo di runtime del processo.

  • spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=trueespark.hadoop.fs.s3.folderObject.autoAction.disabled=true: Configurare EMRFS per utilizzare il tipo di contenuto header -directory anziché il suffisso $folder$ durante la creazione di cartelle S3. application/x Ciò è necessario quando si leggono le tabelle di Lake Formation, poiché le credenziali di Lake Formation non consentono la lettura di cartelle di tabelle con il suffisso $folder$.

  • spark.sql.catalog.skipLocationValidationOnCreateTable.enabled=true: configura Spark per saltare la convalida del vuoto della posizione della tabella prima della creazione. Ciò è necessario per le tabelle registrate in Lake Formation, poiché le credenziali di Lake Formation per verificare la posizione vuota sono disponibili solo dopo la creazione della tabella Glue Data Catalog. Senza questa configurazione, le credenziali del ruolo di runtime del processo convalideranno la posizione della tabella vuota.

  • spark.sql.catalog.createDirectoryAfterTable.enabled=true: configura Spark per creare la cartella Amazon S3 dopo la creazione della tabella nel metastore Hive. Ciò è necessario per le tabelle registrate in Lake Formation, poiché le credenziali di Lake Formation per creare la cartella S3 sono disponibili solo dopo la creazione della tabella Glue Data Catalog.

  • spark.sql.catalog.dropDirectoryBeforeTable.enabled=true: configura Spark per eliminare la cartella S3 prima dell'eliminazione della tabella nel metastore Hive. Ciò è necessario per le tabelle registrate in Lake Formation, poiché le credenziali di Lake Formation per eliminare la cartella S3 non sono disponibili dopo l'eliminazione della tabella dal Glue Data Catalog.

  • spark.sql.catalog.<catalog>.glue.lakeformation-enabled=true: configura il catalogo Iceberg per utilizzare le credenziali S3 di AWS Lake Formation per le tabelle registrate in Lake Formation. Se la tabella non è registrata, usare le credenziali di ambiente predefinite.

Configura la modalità di accesso completo alle tabelle in Unified Studio SageMaker

Per accedere alle tabelle registrate di Lake Formation dalle sessioni interattive di Spark nei JupyterLab notebook, usa la modalità di autorizzazione alla compatibilità. Usa il comando magico %%configure per configurare la tua configurazione di Spark. Scegliere la configurazione in base al tipo di tabella:

For Hive tables
%%configure -f { "conf": { "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 } }
For Iceberg tables
%%configure -f { "conf": { "spark.sql.catalog.spark_catalog": "org.apache.iceberg.spark.SparkSessionCatalog", "spark.sql.catalog.spark_catalog.warehouse": "S3_DATA_LOCATION", "spark.sql.catalog.spark_catalog.client.region": "REGION", "spark.sql.catalog.spark_catalog.type": "glue", "spark.sql.catalog.spark_catalog.glue.account-id": "ACCOUNT_ID", "spark.sql.catalog.spark_catalog.glue.lakeformation-enabled": "true", "spark.sql.catalog.dropDirectoryBeforeTable.enabled": "true", } }
For Delta Lake tables
%%configure -f { "conf": { "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 } }
For Hudi tables
%%configure -f { "conf": { "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, "spark.jars": "/usr/lib/hudi/hudi-spark-bundle.jar", "spark.sql.extensions": "org.apache.spark.sql.hudi.HoodieSparkSessionExtension", "spark.sql.catalog.spark_catalog": "org.apache.spark.sql.hudi.catalog.HoodieCatalog", "spark.serializer": "org.apache.spark.serializer.KryoSerializer" } }

Sostituire i segnaposto:

  • S3_DATA_LOCATION: Il percorso del tuo bucket S3

  • REGION: AWS regione (ad es. us-east-1)

  • ACCOUNT_ID: L'ID del tuo account AWS

Nota

È necessario impostare queste configurazioni prima di eseguire qualsiasi operazione Spark sul notebook.

Operazioni supportate

Queste operazioni utilizzeranno le credenziali di AWS Lake Formation per accedere ai dati della tabella.

  • CREATE TABLE

  • ALTER TABLE

  • INSERT INTO

  • INSERT OVERWRITE

  • UPDATE

  • MERGE INTO

  • DELETE FROM

  • ANALYZE TABLE

  • REPAIR TABLE

  • DROP TABLE

  • Query su origini dati Spark

  • Scritture di origini dati Spark

Nota

Le operazioni non elencate sopra continueranno a utilizzare le autorizzazioni IAM per accedere ai dati delle tabelle.

Considerazioni

  • Se una tabella Hive viene creata utilizzando un lavoro per il quale non è abilitato l'accesso completo alla tabella e non viene inserito alcun record, le successive letture o scritture da un lavoro con accesso completo alla tabella avranno esito negativo. Questo perché EMR Spark senza accesso completo alla tabella aggiunge il $folder$ suffisso al nome della cartella della tabella. Per risolvere questo problema, è possibile procedere in questi modi:

    • Inserire almeno una riga nella tabella da un processo che non ha FTA abilitato.

    • Configura il job che non ha l'FTA abilitato in modo da non utilizzare il $folder$ suffisso nel nome della cartella in S3. Ciò si può ottenere impostando la configurazione spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=true di Spark.

    • Crea una cartella S3 nella posizione della tabella s3://path/to/table/table_name utilizzando la console S3 o la CLI AWS S3. AWS

  • L'accesso completo alla tabella è supportato con il file system EMR (EMRFS) a partire dalla versione 7.8.0 di Amazon EMR e con il file system S3A a partire dalla versione 7.10.0 di Amazon EMR.

  • L'accesso completo alle tabelle è supportato per le tabelle Hive, Iceberg, Delta e Hudi.

  • Considerazioni sul supporto per la scrittura di Hudi FTA:

    • Le scritture Hudi FTA richiedono l'utilizzo HoodieCredentialedHadoopStorage per la vendita delle credenziali durante l'esecuzione del lavoro. Imposta la seguente configurazione durante l'esecuzione dei lavori Hudi: hoodie.storage.class=org.apache.spark.sql.hudi.storage.HoodieCredentialedHadoopStorage

    • Il supporto alla scrittura Full Table Access (FTA) per Hudi è disponibile a partire dalla versione 7.12 di Amazon EMR.

    • Il supporto per la scrittura Hudi FTA attualmente funziona solo con le configurazioni Hudi predefinite. Le impostazioni Hudi personalizzate o non predefinite potrebbero non essere completamente supportate e potrebbero causare un comportamento imprevisto.

    • Il clustering per tabelle Hudi Merge-On-Read (MOR) non è supportato a questo punto in modalità di scrittura FTA.

  • I lavori che fanno riferimento a tabelle con regole Lake Formation Fine-Grained Access Control (FGAC) o Glue Data Catalog Views avranno esito negativo. Per interrogare una tabella con una regola FGAC o una vista del catalogo dati di Glue, è necessario utilizzare la modalità FGAC. Puoi abilitare la modalità FGAC seguendo i passaggi descritti nella AWS documentazione: Utilizzo di Amazon EMR su EC2 con Lake Formation per un controllo granulare degli accessi. AWS

  • L'accesso completo alla tabella non supporta Spark Streaming.

  • Quando si scrive Spark su una tabella Lake Formation, DataFrame è supportata solo la modalità APPEND per le tabelle Hive e Iceberg: df.write.mode("append").saveAsTable(table_name)

  • La creazione di tabelle esterne richiede le autorizzazioni IAM.

  • Poiché Lake Formation memorizza temporaneamente nella cache le credenziali all'interno di un job Spark, un job batch o una sessione interattiva di Spark attualmente in esecuzione potrebbero non riflettere le modifiche alle autorizzazioni.

  • È necessario utilizzare un ruolo definito dall'utente e non un ruolo collegato al servizio: requisiti di Lake Formation per i ruoli.

Hudi FTA Write Support - Operazioni supportate

La tabella seguente mostra le operazioni di scrittura supportate per le tabelle Hudi Copy-On-Write (COW) e Merge-On-Read (MOR) in modalità Full Table Access:

Operazioni di scrittura supportate da Hudi FTA
Tipo tabella Operation Comando SQL Write Stato
MUCCA INSERT INSERT INTO TABLE Supportata
MUCCA INSERT INSERISCI NELLA TABELLA - PARTIZIONE (statica, dinamica) Supportata
MUCCA INSERT INSERT OVERWRITE Supportata
MUCCA INSERT INSERT OVERWRITE - PARTIZIONE (statica, dinamica) Supportata
UPDATE UPDATE UPDATE TABLE Supportata
MUCCA UPDATE TABELLA DI AGGIORNAMENTO - Cambia partizione Non supportato
DELETE DELETE DELETE FROM TABLE Supportata
ALTER ALTER MODIFICA TABELLA - RINOMINA IN Non supportato
MUCCA ALTER MODIFICA LA TABELLA - IMPOSTA LE PROPRIETÀ DELLA TABELLA Supportata
MUCCA ALTER ALTERA TABELLA - PROPRIETÀ DELLA TABELLA NON IMPOSTATE Supportata
MUCCA ALTER MODIFICA TABELLA - MODIFICA COLONNA Supportata
MUCCA ALTER MODIFICA TABELLA - AGGIUNGI COLONNE Supportata
MUCCA ALTER MODIFICA TABELLA - AGGIUNGI PARTIZIONE Supportata
MUCCA ALTER ALTERA TABELLA - ELIMINA LA PARTIZIONE Supportata
MUCCA ALTER ALTER TABLE - RECUPERA LE PARTIZIONI Supportata
MUCCA ALTER RIPARARE LE PARTIZIONI DI SINCRONIZZAZIONE DELLE TABELLE Supportata
DROP DROP DROP TABLE Supportata
MUCCA DROP DROP TABLE - PURGE Supportata
CREATE CREATE CREA TABELLA - Gestito Supportata
MUCCA CREATE CREA TABELLA - PARTIZIONA PER Supportata
MUCCA CREATE CREA UNA TABELLA SE NON ESISTE Supportata
MUCCA CREATE CREATE TABLE LIKE Supportata
MUCCA CREATE CREATE TABLE AS SELECT Supportata
CREATE CREATE CREA TABELLA con POSIZIONE - Tabella esterna Non supportato
DATAFRAME (INSERIRE) DATAFRAME (INSERIRE) salva AsTable.Overwrite Supportata
MUCCA DATAFRAME (INSERTO) salva AsTable.Append Non supportato
MUCCA DATAFRAME (INSERTO) salva AsTable.Ignore Supportata
MUCCA DATAFRAME (INSERTO) salva AsTable.ErrorIfExists Supportata
MUCCA DATAFRAME (INSERTO) save AsTable - Tabella esterna (percorso) Non supportato
MUCCA DATAFRAME (INSERTO) salva (percorso) - DF v1 Non supportato
ALTRO INSERT INSERT INTO TABLE Supportata
DI PIÙ INSERT INSERISCI NELLA TABELLA - PARTIZIONE (statica, dinamica) Supportata
ALTRO INSERT INSERT OVERWRITE Supportata
DI PIÙ INSERT INSERT OVERWRITE - PARTIZIONE (statica, dinamica) Supportata
UPDATE UPDATE UPDATE TABLE Supportata
ALTRO UPDATE TABELLA DI AGGIORNAMENTO - Cambia partizione Non supportato
DELETE DELETE DELETE FROM TABLE Supportata
ALTER ALTER MODIFICA TABELLA - RINOMINA IN Non supportato
ALTRO ALTER MODIFICA LA TABELLA - IMPOSTA LE PROPRIETÀ DELLA TABELLA Supportata
ALTRO ALTER MODIFICA TABELLA - PROPRIETÀ DELLA TABELLA NON IMPOSTATE Supportata
ALTRO ALTER ALTERA TABELLA - MODIFICA COLONNA Supportata
ALTRO ALTER MODIFICA TABELLA - AGGIUNGI COLONNE Supportata
ALTRO ALTER ALTERA TABELLA - AGGIUNGI UNA PARTIZIONE Supportata
ALTRO ALTER ALTERA TABELLA - ELIMINA LA PARTIZIONE Supportata
ALTRO ALTER ALTER TABLE - RECUPERA LE PARTIZIONI Supportata
ALTRO ALTER RIPARA LE PARTIZIONI DI SINCRONIZZAZIONE DELLA TABELLA Supportata
DROP DROP DROP TABLE Supportata
ALTRO DROP DROP TABLE - PURGE Supportata
CREATE CREATE CREA TABELLA - Gestito Supportata
ALTRO CREATE CREA TABELLA - PARTIZIONA PER Supportata
ALTRO CREATE CREA UNA TABELLA SE NON ESISTE Supportata
ALTRO CREATE CREATE TABLE LIKE Supportata
DI PIÙ CREATE CREATE TABLE AS SELECT Supportata
CREATE CREATE CREA TABELLA con POSIZIONE - Tabella esterna Non supportato
DATAFRAME (UPSERT) DATAFRAME (UPSERT) salva AsTable.Overwrite Supportata
DI PIÙ DATAFRAME (UPSERT) salva AsTable.Append Non supportato
DI PIÙ DATAFRAME (UPSERT) salva AsTable.Ignore Supportata
DI PIÙ DATAFRAME (UPSERT) salva AsTable.ErrorIfExists Supportata
DI PIÙ DATAFRAME (UPSERT) save AsTable - Tabella esterna (percorso) Non supportato
ALTRO DATAFRAME (UPSERT) salva (percorso) - DF v1 Non supportato
DATAFRAME (ELIMINA) DATAFRAME (ELIMINA) salva AsTable.Append Non supportato
DI PIÙ DATAFRAME (ELIMINA) save AsTable - Tabella esterna (percorso) Non supportato
ALTRO DATAFRAME (ELIMINA) salva (percorso) - DF v1 Non supportato
DATAFRAME (BULK_INSERT) DATAFRAME (BULK_INSERT) salva AsTable.Overwrite Supportata
DI PIÙ DATAFRAME (BULK_INSERT) salva AsTable.Append Non supportato
DI PIÙ DATAFRAME (BULK_INSERT) salva AsTable.Ignore Supportata
DI PIÙ DATAFRAME (BULK_INSERT) salva AsTable.ErrorIfExists Supportata
DI PIÙ DATAFRAME (BULK_INSERT) save AsTable - Tabella esterna (percorso) Non supportato
ALTRO DATAFRAME (BULK_INSERT) salva (percorso) - DF v1 Non supportato