As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Acesso completo à tabela do Lake Formation para o EMR Serverless
Com as versões 7.8.0 e superiores do Amazon EMR, você pode aproveitar o Lake AWS Formation com o Glue Data Catalog, onde a função de tempo de execução do trabalho tem permissões completas de tabela sem as limitações do controle de acesso refinado. Esse recurso permite que você leia e grave em tabelas protegidas pelo Lake Formation a partir de trabalhos Spark em lote e interativos do EMR Sem Servidor. Consulte as seções a seguir para saber mais sobre o Lake Formation e como usá-lo com o EMR Sem Servidor.
Como usar o Lake Formation com acesso total à tabela
Você pode acessar as tabelas do catálogo do Glue Data protegidas pelo AWS Lake Formation a partir de trabalhos do EMR Serverless Spark ou sessões interativas em que a função de tempo de execução do trabalho tem acesso total à tabela. Você não precisa habilitar o AWS Lake Formation no aplicativo EMR Serverless. Quando um trabalho do Spark é configurado para Full Table Access (FTA), as credenciais do AWS Lake Formation são usadas para os dados do read/write S3 das tabelas registradas do AWS Lake Formation, enquanto as credenciais da função de tempo de execução do trabalho são usadas para read/write tabelas não registradas no Lake Formation. AWS
Importante
Não ative o AWS Lake Formation para um controle de acesso refinado. Um trabalho não pode executar simultaneamente o Acesso total à tabela (FTA) e o Controle de acesso refinado (FGAC) no mesmo cluster ou aplicação EMR.
Etapa 1: habilitar o acesso total à tabela no Lake Formation
Para usar o modo Full Table Access (FTA), você deve permitir que mecanismos de consulta de terceiros acessem dados sem a validação da tag de sessão do IAM no AWS Lake Formation. Para habilitar, siga as etapas em Application integration for full table access.
nota
Ao acessar tabelas entre contas, o acesso completo à tabela deve ser habilitado nas contas de produtor e consumidor. Da mesma forma, ao acessar tabelas entre regiões, essa configuração deve ser habilitada nas regiões produtora e consumidora.
Etapa 2: configurar permissões do IAM para o perfil de runtime do trabalho
Para acesso de leitura ou gravação aos dados subjacentes, além das permissões do Lake Formation, um perfil de runtime do trabalho precisa da permissão lakeformation:GetDataAccess do IAM. Com essa permissão, o Lake Formation concede a solicitação de credenciais temporárias para acessar os dados.
Confira a seguir um exemplo de política de como fornecer permissões do IAM para acesso a um script no S3, upload de logs no Amazon S3, permissões da API do AWS Glue e permissão para acessar o Lake Formation.
Etapa 2.1: configurar permissões do Lake Formation
Os trabalhos Spark que leem dados do S3 necessitam de permissão SELECT do Lake Formation.
O Spark faz com que write/delete os dados no S3 exijam a permissão Lake Formation ALL (SUPER).
Os trabalhos do Spark que interagem com o Catálogo de dados do Glue exigem as permissões DESCRIBE, ALTER, DROP, conforme apropriado.
Para obter mais informações, consulte Conceder permissões em recursos do Catálogo de dados.
Etapa 3: inicializar uma sessão do Spark para acesso total à tabela usando o Lake Formation
Pré-requisitos
AWS O Glue Data Catalog deve ser configurado como um metastore para acessar as tabelas do Lake Formation.
Defina as seguintes configurações para configurar o catálogo do Glue como umo metastore:
--conf spark.sql.catalogImplementation=hive --conf spark.hive.metastore.client.factory.class=com.amazonaws.glue.catalog.metastore.AWSGlueDataCatalogHiveClientFactory
Para obter mais informações sobre como habilitar o Catálogo de dados para o EMR Sem Servidor, consulte Configuração do metastore para o EMR Sem Servidor.
Para acessar tabelas registradas no AWS Lake Formation, as seguintes configurações precisam ser definidas durante a inicialização do Spark para configurar o Spark para usar as credenciais do Lake Formation AWS .
-
spark.hadoop.fs.s3.credentialsResolverClass=com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver: Configure o EMR Filesystem (EMRFS) ou o EMR S3A para usar as credenciais do Lake Formation S3 para tabelas registradas do Lake AWS Formation. Se a tabela não estiver registrada, use as credenciais do perfil de runtime do trabalho. -
spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=trueespark.hadoop.fs.s3.folderObject.autoAction.disabled=true: configure o EMRFS para usar o cabeçalho do tipo de conteúdo application/x-directory em vez do sufixo $folder$ ao criar pastas do S3. Isso é necessário ao ler tabelas do Lake Formation, pois as credenciais do Lake Formation não permitem a leitura de pastas de tabelas com o sufixo $folder$. -
spark.sql.catalog.skipLocationValidationOnCreateTable.enabled=true: configure o Spark para ignorar a validação da ausência do local da tabela antes da criação. Isso é necessário para tabelas registradas do Lake Formation, pois as credenciais do Lake Formation para verificar o local vazio só estão disponíveis após a criação da tabela do Catálogo de dados do Glue. Sem essa configuração, as credenciais do perfil de runtime do trabalho validarão o local da tabela vazia. -
spark.sql.catalog.createDirectoryAfterTable.enabled=true: configure o Spark para criar a pasta do Amazon S3 após a criação da tabela no metastore do Hive. Isso é necessário para tabelas registradas no Lake Formation, pois as credenciais do Lake Formation para criar a pasta do S3 só ficam disponíveis após a criação da tabela no Catálogo de dados do Glue. -
spark.sql.catalog.dropDirectoryBeforeTable.enabled=true: configure o Spark para encerrar a pasta do S3 antes da exclusão da tabela no metastore do Hive. Isso é necessário para tabelas registradas do Lake Formation, pois as credenciais do Lake Formation para encerrar a pasta do S3 não estão disponíveis após a exclusão da tabela do Catálogo de dados do Glue. -
spark.sql.catalog.<catalog>.glue.lakeformation-enabled=true: Configure o catálogo do Iceberg para usar as credenciais do AWS Lake Formation S3 para tabelas registradas do Lake Formation. Se a tabela não estiver registrada, use as credenciais de ambiente padrão.
Configurar o modo de acesso total à tabela no SageMaker Unified Studio
Para acessar as tabelas registradas do Lake Formation a partir de sessões interativas do Spark em JupyterLab notebooks, use o modo de permissão de compatibilidade. Use o comando mágico %%configure para definir sua configuração do Spark. Escolha a configuração com base no seu tipo de tabela:
Substitua os espaços reservados:
S3_DATA_LOCATION: caminho do bucket do S3REGION: AWS região (por exemplo, us-east-1)ACCOUNT_ID: ID AWS da sua conta
nota
Você precisa definir essas configurações antes de executar qualquer operação do Spark em seu caderno.
Operações com Suporte
Essas operações usarão as credenciais do AWS Lake Formation para acessar os dados da tabela.
CRIAR TABELA
ALTER TABLE
INSERT INTO
INSERT OVERWRITE
UPDATE
MERGE INTO
DELETE FROM
ANALYZE TABLE
REPAIR TABLE
DESCARTAR TABELA
Consultas de fontes de dados do Spark
Gravações na fonte de dados do Spark
nota
As operações não listadas acima continuarão usando as permissões do IAM para acessar os dados da tabela.
Considerações
Se uma tabela do Hive for criada usando um trabalho que não tem acesso total à tabela habilitado e nenhum registro for inserido, as leituras ou gravações subsequentes de um trabalho com acesso total à tabela falharão. Isso ocorre porque o EMR Spark sem acesso total à tabela adiciona o sufixo
$folder$ao nome da pasta da tabela. Para resolver isso, você tem as seguintes opções:Insira pelo menos uma linha na tabela diretamente de um trabalho no qual o FTA não esteja habilitado.
Configure o trabalho no qual o FTA não está habilitado para não usar o sufixo
$folder$no nome da pasta no S3. É possível fazer isso definindo a configuraçãospark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=truedo Spark.Crie uma pasta S3 no local da tabela
s3://path/to/table/table_nameusando o console do AWS S3 ou a CLI do AWS S3.
O acesso total à tabela é compatível com o sistema de arquivos do EMR (EMRFS) a partir da versão 7.8.0 do Amazon EMR e com o sistema de arquivos S3A a partir da versão 7.10.0 do Amazon EMR.
O Full Table Access é compatível com as tabelas Hive, Iceberg, Delta e Hudi.
Considerações sobre o Hudi FTA Write Support:
As gravações do Hudi FTA exigem o uso HoodieCredentialedHadoopStorage para venda de credenciais durante a execução do trabalho. Defina a seguinte configuração ao executar trabalhos do Hudi:
hoodie.storage.class=org.apache.spark.sql.hudi.storage.HoodieCredentialedHadoopStorageO suporte de gravação do Full Table Access (FTA) para Hudi está disponível a partir da versão 7.12 do Amazon EMR.
Atualmente, o suporte de gravação do Hudi FTA funciona apenas com as configurações padrão do Hudi. As configurações Hudi personalizadas ou não padrão podem não ser totalmente compatíveis e podem resultar em um comportamento inesperado.
O agrupamento para tabelas Hudi Merge-On-Read (MOR) não é suportado neste momento no modo de gravação FTA.
Os trabalhos que mencionam tabelas com regras de controle de acesso de alta granularidade (FGAC) do Lake Formation ou visualizações do catálogo de dados do Glue falharão. Para consultar uma tabela com regras de FGAC ou uma visualização do Catálogo de dados do Glue, você precisará usar o modo FGAC. Você pode ativar o modo FGAC seguindo as etapas descritas na AWS documentação: Usando o EMR Serverless com o Lake AWS Formation para um controle de acesso refinado.
O acesso total à tabela não é compatível com Spark Streaming.
Ao gravar o Spark DataFrame em uma tabela do Lake Formation, somente o modo APPEND é compatível com as tabelas Hive e Iceberg:
df.write.mode("append").saveAsTable(table_name)A criação de tabelas externas requer permissões do IAM.
Como o Lake Formation armazena temporariamente as credenciais em um trabalho Spark, um trabalho em lote do Spark ou uma sessão interativa em execução no momento pode não refletir as alterações de permissão.
Você deve usar um perfil definido pelo usuário e não um perfil vinculado ao serviço:Requisitos do Lake Formation para perfis.
Hudi FTA Write Support - Operações suportadas
A tabela a seguir mostra as operações de gravação suportadas para tabelas Hudi Copy-On-Write (COW) e Merge-On-Read (MOR) no modo Full Table Access:
| Tipo de tabela | Operation | Comando SQL Write | Status |
|---|---|---|---|
| VACA | INSERT | INSERT INTO TABLE | Compatível |
| VACA | INSERT | INSERIR NA TABELA - PARTIÇÃO (estática, dinâmica) | Compatível |
| VACA | INSERT | INSERT OVERWRITE | Compatível |
| VACA | INSERT | INSERIR SUBSTITUIÇÃO - PARTIÇÃO (estática, dinâmica) | Compatível |
| UPDATE | UPDATE | UPDATE TABLE | Compatível |
| VACA | UPDATE | TABELA DE ATUALIZAÇÃO - Alterar partição | Não suportado |
| DELETE | DELETE | DELETE FROM TABLE | Compatível |
| ALTER | ALTER | ALTERAR TABELA - RENOMEAR PARA | Não suportado |
| VACA | ALTER | ALTERE A TABELA - DEFINA AS PROPRIEDADES DA TABELA | Compatível |
| VACA | ALTER | ALTERAR TABELA - DESDEFINIR TBLPROPERTIES | Compatível |
| VACA | ALTER | ALTERAR TABELA - ALTERAR COLUNA | Compatível |
| VACA | ALTER | ALTERAR TABELA - ADICIONAR COLUNAS | Compatível |
| VACA | ALTER | ALTERAR TABELA - ADICIONAR PARTIÇÃO | Compatível |
| VACA | ALTER | ALTERAR TABELA - SOLTAR PARTIÇÃO | Compatível |
| VACA | ALTER | ALTERAR TABELA - RECUPERAR PARTIÇÕES | Compatível |
| VACA | ALTER | REPARAR PARTIÇÕES DE SINCRONIZAÇÃO DE TABELAS | Compatível |
| DROP | DROP | DESCARTAR TABELA | Compatível |
| VACA | DROP | TABELA SUSPENSA - PURGA | Compatível |
| CREATE | CREATE | CRIAR TABELA - Gerenciado | Compatível |
| VACA | CREATE | CRIAR TABELA - PARTICIONAR POR | Compatível |
| VACA | CREATE | CRIAR TABELA SE NÃO EXISTIR | Compatível |
| VACA | CREATE | CREATE TABLE LIKE | Compatível |
| VACA | CREATE | CRIAR TABELA COMO SELEÇÃO | Compatível |
| CREATE | CREATE | CRIAR TABELA com LOCALIZAÇÃO - Tabela externa | Não suportado |
| QUADRO DE DADOS (INSERIR) | QUADRO DE DADOS (INSERIR) | saveAsTable.Sobrescrever | Compatível |
| VACA | QUADRO DE DADOS (INSERIR) | saveAsTable.Anexar | Não suportado |
| VACA | QUADRO DE DADOS (INSERIR) | saveAsTable.Ignorar | Compatível |
| VACA | QUADRO DE DADOS (INSERIR) | saveAsTable.ErrorIfExists | Compatível |
| VACA | QUADRO DE DADOS (INSERIR) | saveAsTable - Tabela externa (Caminho) | Não suportado |
| VACA | QUADRO DE DADOS (INSERIR) | salvar (caminho) - DF v1 | Não suportado |
| MAIS | INSERT | INSERT INTO TABLE | Compatível |
| MAIS | INSERT | INSERIR NA TABELA - PARTIÇÃO (estática, dinâmica) | Compatível |
| MAIS | INSERT | INSERT OVERWRITE | Compatível |
| MAIS | INSERT | INSERIR SUBSTITUIÇÃO - PARTIÇÃO (estática, dinâmica) | Compatível |
| UPDATE | UPDATE | UPDATE TABLE | Compatível |
| MAIS | UPDATE | TABELA DE ATUALIZAÇÃO - Alterar partição | Não suportado |
| DELETE | DELETE | DELETE FROM TABLE | Compatível |
| ALTER | ALTER | ALTERAR TABELA - RENOMEAR PARA | Não suportado |
| MAIS | ALTER | ALTERE A TABELA - DEFINA AS PROPRIEDADES DA TABELA | Compatível |
| MAIS | ALTER | ALTERAR TABELA - DESDEFINIR TBLPROPERTIES | Compatível |
| MAIS | ALTER | ALTERAR TABELA - ALTERAR COLUNA | Compatível |
| MAIS | ALTER | ALTERAR TABELA - ADICIONAR COLUNAS | Compatível |
| MAIS | ALTER | ALTERAR TABELA - ADICIONAR PARTIÇÃO | Compatível |
| MAIS | ALTER | ALTERAR TABELA - SOLTAR PARTIÇÃO | Compatível |
| MAIS | ALTER | ALTERAR TABELA - RECUPERAR PARTIÇÕES | Compatível |
| MAIS | ALTER | REPARAR PARTIÇÕES DE SINCRONIZAÇÃO DE TABELAS | Compatível |
| DROP | DROP | DESCARTAR TABELA | Compatível |
| MAIS | DROP | TABELA SUSPENSA - PURGA | Compatível |
| CREATE | CREATE | CRIAR TABELA - Gerenciado | Compatível |
| MAIS | CREATE | CRIAR TABELA - PARTICIONAR POR | Compatível |
| MAIS | CREATE | CRIAR TABELA SE NÃO EXISTIR | Compatível |
| MAIS | CREATE | CREATE TABLE LIKE | Compatível |
| MAIS | CREATE | CRIAR TABELA COMO SELEÇÃO | Compatível |
| CREATE | CREATE | CRIAR TABELA com LOCALIZAÇÃO - Tabela externa | Não suportado |
| QUADRO DE DADOS (UPSERT) | QUADRO DE DADOS (UPSERT) | saveAsTable.Sobrescrever | Compatível |
| MAIS | QUADRO DE DADOS (UPSERT) | saveAsTable.Anexar | Não suportado |
| MAIS | QUADRO DE DADOS (UPSERT) | saveAsTable.Ignorar | Compatível |
| MAIS | QUADRO DE DADOS (UPSERT) | saveAsTable.ErrorIfExists | Compatível |
| MAIS | QUADRO DE DADOS (UPSERT) | saveAsTable - Tabela externa (Caminho) | Não suportado |
| MAIS | QUADRO DE DADOS (UPSERT) | salvar (caminho) - DF v1 | Não suportado |
| DATAFRAME (EXCLUIR) | DATAFRAME (EXCLUIR) | saveAsTable.Anexar | Não suportado |
| MAIS | DATAFRAME (EXCLUIR) | saveAsTable - Tabela externa (Caminho) | Não suportado |
| MAIS | DATAFRAME (EXCLUIR) | salvar (caminho) - DF v1 | Não suportado |
| QUADRO DE DADOS (BULK_INSERT) | QUADRO DE DADOS (BULK_INSERT) | saveAsTable.Sobrescrever | Compatível |
| MAIS | QUADRO DE DADOS (BULK_INSERT) | saveAsTable.Anexar | Não suportado |
| MAIS | QUADRO DE DADOS (BULK_INSERT) | saveAsTable.Ignorar | Compatível |
| MAIS | QUADRO DE DADOS (BULK_INSERT) | saveAsTable.ErrorIfExists | Compatível |
| MAIS | QUADRO DE DADOS (BULK_INSERT) | saveAsTable - Tabela externa (Caminho) | Não suportado |
| MAIS | QUADRO DE DADOS (BULK_INSERT) | salvar (caminho) - DF v1 | Não suportado |