Acesso não filtrado do Lake Formation para EMR Serverless - Amazon EMR

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 não filtrado do Lake Formation para 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 em lote e interativos do EMR Serverless Spark. Consulte as seções a seguir para saber mais sobre o Lake Formation e como usá-lo com o EMR Sem Servidor.

Usando o Lake Formation com acesso total à mesa

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 ativar 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 Full Table Access (FTA) e o Fine-Grained Access Control (FGAC) no mesmo cluster ou aplicativo do EMR.

Etapa 1: Habilitar o acesso total à tabela no Lake Formation

Para usar o modo Full Table Access (FTA), você precisa 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 ativada 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, uma função de tempo de execução 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.

Veja a seguir um exemplo de política de como fornecer permissões do IAM para acessar um script no Amazon S3, fazer upload de registros para o S3, permissões da API AWS Glue e permissão para acessar o Lake Formation.

JSON
{ "Version": "2012-10-17", "Statement": [ { "Sid": "ScriptAccess", "Effect": "Allow", "Action": [ "s3:GetObject" ], "Resource": [ "arn:aws:s3:::*.amzn-s3-demo-bucket/scripts" ] }, { "Sid": "LoggingAccess", "Effect": "Allow", "Action": [ "s3:PutObject" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket/logs/*" ] }, { "Sid": "GlueCatalogAccess", "Effect": "Allow", "Action": [ "glue:Get*", "glue:Create*", "glue:Update*" ], "Resource": [ "*" ] }, { "Sid": "LakeFormationAccess", "Effect": "Allow", "Action": [ "lakeformation:GetDataAccess" ], "Resource": [ "*" ] } ] }

Etapa 2.1 Configurar as permissões do Lake Formation

  • As tarefas do Spark que leem dados do S3 exigem a permissão Lake Formation SELECT.

  • O Spark faz com que write/delete os dados no S3 exijam a permissão Lake Formation ALL (SUPER).

  • As tarefas do Spark que interagem com o catálogo da Glue Data exigem as permissões DESCRIBE, ALTER, DROP, conforme apropriado.

Para obter mais informações, consulte Conceder permissões nos 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 Glue como uma 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 ativar o catálogo de dados para o EMR Serverless, consulte Configuração do Metastore para o EMR Serverless.

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 .

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
  • spark.hadoop.fs.s3.credentialsResolverClass=com.amazonaws.glue.accesscontrol.AWSLakeFormationCredentialResolver: Configure o EMR Filesystem (EMRFS) para usar as credenciais do Lake AWS Formation S3 para tabelas registradas do Lake Formation. Se a tabela não estiver registrada, use as credenciais do perfil de runtime do trabalho.

  • spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=true e spark.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 as 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 estão disponíveis somente após a criação da tabela do Glue Data Catalog. 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 do Lake Formation, pois as credenciais do Lake Formation para criar a pasta S3 estão disponíveis somente após a criação da tabela do Glue Data Catalog.

  • spark.sql.catalog.dropDirectoryBeforeTable.enabled=true: configure o Spark para eliminar a pasta S3 antes da exclusão da tabela na metastore do Hive. Isso é necessário para tabelas registradas do Lake Formation, pois as credenciais do Lake Formation para eliminar a pasta S3 não estão disponíveis após a exclusão da tabela do Glue Data Catalog.

  • 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 cadernos, você deve usar 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:

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

Substitua os espaços reservados:

  • S3_DATA_LOCATION: Seu caminho de bucket do S3

  • REGION: 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 uma tarefa que não tem acesso total à tabela habilitado e nenhum registro for inserido, as leituras ou gravações subsequentes de uma tarefa com acesso total à tabela falharão. Isso ocorre porque o EMR Spark sem acesso total à tabela adiciona o $folder$ sufixo 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 a tarefa que não tem o FTA habilitado para não usar o $folder$ sufixo no nome da pasta no S3. É possível fazer isso definindo a configuração spark.hadoop.fs.s3.useDirectoryHeaderAsFolderObject=true do Spark.

    • Crie uma pasta S3 no local da tabela s3://path/to/table/table_name usando o console do AWS S3 ou a CLI do AWS S3.

  • O acesso total à tabela funciona exclusivamente com EMR Filesystem (EMRFS). O sistema de arquivos S3A não é compatível.

  • O acesso total à tabela é compatível com tabelas do Hive e do Iceberg. Ainda não há suporte para tabelas do Hudi e do Delta.

  • As tarefas que fazem referência a tabelas com regras de controle de acesso refinado (FGAC) do Lake Formation ou visualizações do catálogo de dados do Glue falharão. Para consultar uma tabela com regras do FGAC ou uma exibição do catálogo de dados do Glue, você precisa 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 é suportado: df.write.mode("append").saveAsTable(table_name)