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 alla tabella di Lake Formation per EMR Serverless
Con le versioni 7.8.0 e successive di Amazon EMR, puoi sfruttare AWS Lake Formation with 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 dal batch EMR Serverless Spark e dai lavori interattivi. Consulta le seguenti sezioni per saperne di più su Lake Formation e su come utilizzarlo con EMR Serverless.
Utilizzo di Lake Formation con accesso completo ai tavoli
È possibile accedere alle tabelle del catalogo Glue Data protette da AWS Lake Formation dai job EMR Serverless Spark o dalle sessioni interattive in cui il ruolo di runtime del job ha accesso completo alla tabella. Non è necessario abilitare AWS Lake Formation sull'applicazione EMR Serverless. Quando un job Spark è configurato per Full Table Access (FTA), le credenziali di AWS Lake Formation vengono utilizzate per i dati read/write S3 per le tabelle registrate di AWS Lake Formation, mentre le credenziali del ruolo di runtime del lavoro verranno utilizzate per le read/write tabelle non registrate con Lake Formation. AWS
Importante
Non abilitare AWS Lake Formation per il 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.
Passaggio 1: abilitare l'accesso completo alla tabella in Lake Formation
Per utilizzare la modalità Full Table Access (FTA), devi 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 alle tabelle tra account diversi, è necessario abilitare l'accesso completo alla tabella sia negli account produttore che in quelli consumer. Allo stesso modo, quando si accede alle tabelle interregionali, questa impostazione deve essere abilitata sia nelle regioni produttrici che in quelle di consumo.
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 dell'API AWS Glue e l'autorizzazione per accedere a Lake Formation.
Passaggio 2.1 Configurare i permessi di Lake Formation
I job Spark che leggono dati da S3 richiedono l'autorizzazione Lake Formation SELECT.
Spark fa in modo che write/delete i dati in S3 richiedano l'autorizzazione Lake Formation ALL (SUPER).
I lavori Spark che interagiscono con il catalogo Glue Data richiedono l'autorizzazione DESCRIBE, ALTER, DROP, a seconda dei casi.
Per ulteriori 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.
Imposta 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 di Data Catalog per EMR Serverless, fare riferimento alla configurazione Metastore per EMR Serverless.
Per accedere alle tabelle registrate con AWS Lake Formation, è necessario impostare le seguenti configurazioni durante l'inizializzazione di Spark per configurare Spark per utilizzare le credenziali di Lake Formation AWS .
-
spark.hadoop.fs.s3.credentialsResolverClass=com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver: Configurare EMR Filesystem (EMRFS) o EMR S3A per utilizzare le credenziali di Lake Formation S3 per le tabelle registrate di Lake AWS Formation. 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: configurano EMRFS per utilizzare l'applicazione di intestazione di tipo di contenuto/directory x invece del suffisso $folder$ durante la creazione di cartelle S3. Questo è necessario per leggere le tabelle di Lake Formation, poiché le credenziali di Lake Formation non consentono la lettura delle cartelle delle 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 di 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. Questo è necessario per le tabelle registrate di 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 di 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 di AWS Lake Formation S3 per le tabelle registrate di Lake Formation. Se la tabella non è registrata, usare le credenziali di ambiente predefinite.
Configura la modalità di accesso completo alla tabella in Unified Studio SageMaker
Per accedere alle tabelle registrate di Lake Formation dalle sessioni interattive di Spark nei JupyterLab notebook, utilizza la modalità di autorizzazione alla compatibilità. Usa il comando magic %%configure per configurare la configurazione di Spark. Scegliere la configurazione in base al tipo di tabella:
Sostituire i segnaposto:
S3_DATA_LOCATION: Il percorso del tuo bucket S3REGION: 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 cui non è abilitato l'accesso completo alla tabella e non viene inserito alcun record, le letture o scritture successive 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 lavoro che non ha FTA abilitato in modo che non utilizzi il
$folder$suffisso nel nome della cartella in S3. Ciò si può ottenere impostando la configurazionespark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=truedi Spark.Crea una cartella S3 nella posizione della tabella
s3://path/to/table/table_nameutilizzando la console AWS S3 o la CLI AWS S3.
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 su Hudi FTA Write Support:
Le scritture Hudi FTA richiedono l'utilizzo HoodieCredentialedHadoopStorage per la vendita di credenziali durante l'esecuzione del lavoro. Imposta la seguente configurazione durante l'esecuzione dei job Hudi:
hoodie.storage.class=org.apache.spark.sql.hudi.storage.HoodieCredentialedHadoopStorageIl supporto di scrittura Full Table Access (FTA) per Hudi è disponibile a partire dalla release 7.12 di Amazon EMR.
Il supporto di 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 le tabelle Hudi Merge-On-Read (MOR) non è supportato a questo punto in modalità di scrittura FTA.
I lavori che fanno riferimento alle tabelle con le regole Lake Formation Fine-Grained Access Control (FGAC) o Glue Data Catalog Views avranno esito negativo. Per interrogare una tabella con regole FGAC o Glue Data Catalog View, è necessario utilizzare la modalità FGAC. È possibile abilitare la modalità FGAC seguendo i passaggi descritti nella AWS documentazione: Utilizzo di EMR Serverless with Lake AWS Formation per un controllo granulare degli accessi.
L'accesso completo alla tabella non supporta Spark Streaming.
Quando si scrive Spark DataFrame su una tabella Lake Formation, è 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 lavoro Spark, un processo batch Spark o una sessione interattiva 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 per i ruoli di Lake Formation.
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:
| Tipo tabella | Operation | Comando di scrittura SQL | Status |
|---|---|---|---|
| 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 TABELLA - IMPOSTA TBLPROPERTIES | Supportata |
| MUCCA | ALTER | ALTER TABLE - ANNULLA TBLPROPERTIES | Supportata |
| MUCCA | ALTER | ALTERA TABELLA - MODIFICA COLONNA | Supportata |
| MUCCA | ALTER | ALTERA TABELLA - AGGIUNGI COLONNE | Supportata |
| MUCCA | ALTER | ALTER TABLE - AGGIUNGI UNA PARTIZIONE | Supportata |
| MUCCA | ALTER | ALTERA TABELLA - ELIMINA LA PARTIZIONE | Supportata |
| MUCCA | ALTER | ALTER TABLE - RECUPERA LE PARTIZIONI | Supportata |
| MUCCA | ALTER | RIPARA LE PARTIZIONI DI SINCRONIZZAZIONE DELLE TABELLE | Supportata |
| DROP | DROP | DROP TABLE | Supportata |
| MUCCA | DROP | DROP TABLE - PURGE | Supportata |
| CREATE | CREATE | CREATE TABLE - 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 LOCATION - Tabella esterna | Non supportato |
| DATAFRAME (INSERIRE) | DATAFRAME (INSERIRE) | saveAsTable.Sovrascrivi | Supportata |
| MUCCA | DATAFRAME (INSERISCI) | saveAsTable.Aggiungi | Non supportato |
| MUCCA | DATAFRAME (INSERISCI) | saveAsTable.Ignora | Supportata |
| MUCCA | DATAFRAME (INSERISCI) | saveAsTable.ErrorIfExists | Supportata |
| MUCCA | DATAFRAME (INSERISCI) | saveAsTable - Tabella esterna (Path) | Non supportato |
| MUCCA | DATAFRAME (INSERISCI) | salva (percorso) - DF v1 | Non supportato |
| ALTRO | INSERT | INSERT INTO TABLE | Supportata |
| MOR | INSERT | INSERISCI NELLA TABELLA - PARTIZIONE (statica, dinamica) | Supportata |
| ALTRO | INSERT | INSERT OVERWRITE | Supportata |
| MOR | 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 TABELLA - IMPOSTA TBLPROPERTIES | Supportata |
| ALTRO | ALTER | MODIFICA TABELLA - ANNULLA TBLPROPERTIES | Supportata |
| ALTRO | ALTER | MODIFICA TABELLA - MODIFICA COLONNA | Supportata |
| ALTRO | ALTER | ALTERA TABELLA - AGGIUNGI COLONNE | Supportata |
| - ALTRO | ALTER | ALTER TABLE - 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 DELLE TABELLE | Supportata |
| DROP | DROP | DROP TABLE | Supportata |
| ALTRO | DROP | DROP TABLE - PURGE | Supportata |
| CREATE | CREATE | CREATE TABLE - Gestito | Supportata |
| ALTRO | CREATE | CREA TABELLA - PARTIZIONA PER | Supportata |
| - ALTRO | CREATE | CREA UNA TABELLA SE NON ESISTE | Supportata |
| ALTRO | CREATE | CREATE TABLE LIKE | Supportata |
| MOR | CREATE | CREATE TABLE AS SELECT | Supportata |
| CREATE | CREATE | CREA TABELLA con LOCATION - Tabella esterna | Non supportato |
| DATAFRAME (UPSERT) | DATAFRAME (UPSERT) | saveAsTable.Sovrascrivi | Supportata |
| ALTRO | DATAFRAME (SCONVOLTO) | saveAsTable.Aggiungi | Non supportato |
| ALTRO | DATAFRAME (SCONVOLTO) | saveAsTable.Ignora | Supportata |
| DI PIÙ | DATAFRAME (SCONVOLTO) | saveAsTable.ErrorIfExists | Supportata |
| PIÙ | DATAFRAME (SCONVOLTO) | saveAsTable - Tabella esterna (Path) | Non supportato |
| - ALTRO | DATAFRAME (SCONVOLTO) | salva (percorso) - DF v1 | Non supportato |
| DATAFRAME (ELIMINA) | DATAFRAME (ELIMINA) | saveAsTable.Aggiungi | Non supportato |
| ALTRO | DATAFRAME (ELIMINA) | saveAsTable - Tabella esterna (Path) | Non supportato |
| - ALTRO | DATAFRAME (ELIMINA) | salva (percorso) - DF v1 | Non supportato |
| DATAFRAME (BULK_INSERT) | DATAFRAME (BULK_INSERT) | saveAsTable.Sovrascrivi | Supportata |
| ALTRO | DATAFRAME (BULK_INSERT) | saveAsTable.Aggiungi | Non supportato |
| ALTRO | DATAFRAME (BULK_INSERT) | saveAsTable.Ignora | Supportata |
| DI PIÙ | DATAFRAME (BULK_INSERT) | saveAsTable.ErrorIfExists | Supportata |
| ALTRO | DATAFRAME (BULK_INSERT) | saveAsTable - Tabella esterna (Path) | Non supportato |
| - ALTRO | DATAFRAME (BULK_INSERT) | salva (percorso) - DF v1 | Non supportato |