

# Acessar tabelas do Amazon S3 com o Amazon EMR
<a name="s3-tables-integrating-emr"></a>

O Amazon EMR (anteriormente chamado de Amazon Elastic MapReduce) é uma plataforma de cluster gerenciada que simplifica a execução de frameworks de big data, como o Apache Hadoop e Apache Spark, na AWS para processar e analisar grandes quantidades de dados. Ao usar essas estruturas e projetos de código aberto relacionados, é possível processar dados para finalidades de analytics e workloads de inteligência de negócios. O Amazon EMR também permite transformar e mover grandes volumes de dados para dentro e para fora de outros datastores e bancos de dados da AWS.

Você pode usar clusters do Apache Iceberg no Amazon EMR para trabalhar com tabelas do S3, conectando-se a buckets de tabela em uma sessão do Spark. Para se conectar aos buckets de tabela no Amazon EMR, é possível usar a integração de serviços de analytics da AWS por meio do AWS Glue Data Catalog, ou você pode usar o catálogo de cliente de código aberto do Catálogo de Tabelas do Amazon S3 para Apache Iceberg.

**nota**  
A funcionalidade Tabelas do S3 é compatível com o [Amazon EMR versão 7.5](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-release-components.html) ou superior.

## Conectar-se a buckets de tabela do S3 com o Spark em um cluster do Iceberg no Amazon EMR
<a name="emr-setup-cluster-spark"></a>

Neste procedimento, você configura um cluster do Amazon EMR definido para Apache Iceberg, depois inicializa uma sessão do Spark que se conecta aos buckets de tabela. É possível configurar isso usando os serviços de analytics da AWS por meio do AWS Glue, ou você pode usar o catálogo de cliente de código aberto do Catálogo de Tabelas do Amazon S3 para Apache Iceberg. Para ter mais informações sobre o catálogo de cliente, consulte [Acessar tabelas usando o endpoint Iceberg REST do serviço Tabelas do Amazon S3](s3-tables-integrating-open-source.md). 

Escolha um método de uso de tabelas com o Amazon EMR entre as opções a seguir.

------
#### [ Amazon S3 Tables Catalog for Apache Iceberg ]

Os pré-requisitos a seguir se aplicam para consultar tabelas com o Spark no Amazon EMR usando o Catálogo de Tabelas do Amazon S3 para Apache Iceberg.

Para obter a versão mais recente do JAR do catálogo de cliente, consulte o [repositório s3-tables-catalog do GitHub](https://github.com/awslabs/s3-tables-catalog).

**Pré-requisitos**
+ Anexe a política `AmazonS3TablesFullAccess` ao perfil do IAM que você usa para o Amazon EMR.

**Como configurar um cluster do Amazon EMR para consultar tabelas com o Spark**

1. Crie um cluster com a configuração a seguir. Para usar esse exemplo, substitua os `user input placeholders` por suas próprias informações.

   ```
   aws emr create-cluster --release-label emr-7.5.0 \
   --applications Name=Spark \
   --configurations file://configurations.json \
   --region us-east-1 \
   --name My_Spark_Iceberg_Cluster \
   --log-uri s3://amzn-s3-demo-bucket/ \
   --instance-type m5.xlarge \
   --instance-count 2 \
   --service-role EMR_DefaultRole \
   --ec2-attributes \
   
   InstanceProfile=EMR_EC2_DefaultRole,SubnetId=subnet-1234567890abcdef0,KeyName=my-key-pair
   ```

   `configurations.json`:

   ```
   [{
   "Classification":"iceberg-defaults",
   "Properties":{"iceberg.enabled":"true"}
   }]
   ```

1. [Conecte-se ao nó primário do Spark usando SSH.](https://docs.aws.amazon.com//emr/latest/ManagementGuide/emr-connect-master-node-ssh.html#emr-connect-cli)

1. Para inicializar uma sessão do Spark para o Iceberg que estabelece conexão com o bucket de tabela, insira o comando a seguir. Substitua o `user input placeholders` pelo ARN do bucket de tabela.

   ```
   spark-shell \
   --packages software.amazon.s3tables:s3-tables-catalog-for-iceberg-runtime:0.1.8 \
   --conf spark.sql.catalog.s3tablesbucket=org.apache.iceberg.spark.SparkCatalog \
   --conf spark.sql.catalog.s3tablesbucket.catalog-impl=software.amazon.s3tables.iceberg.S3TablesCatalog \
   --conf spark.sql.catalog.s3tablesbucket.warehouse=arn:aws:s3tables:us-east-1:111122223333:bucket/amzn-s3-demo-bucket1 \
   --conf spark.sql.defaultCatalog=s3tablesbucket \
   --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions
   ```

1. Consulte as tabelas com Spark SQL. Para conferir exemplos, consulte [Consultar tabelas do S3 com o Spark SQL](s3-tables-client-catalog.md#query-with-spark).

------
#### [ AWS analytics services integration ]

Os pré-requisitos a seguir se aplicam para consultar tabelas com o Spark no Amazon EMR usando a integração de serviços de analytics da AWS.

**Pré-requisitos**
+ [Integre os buckets de tabela aos serviços de analytics da AWS](s3-tables-integrating-aws.md).
+ Crie o perfil de serviço padrão para o Amazon EMR (`EMR_DefaultRole_V2`). Para conferir detalhes, consulte [Service role for Amazon EMR (EMR role)](https://docs.aws.amazon.com//emr/latest/ManagementGuide/emr-iam-role.html).
+ Crie o perfil de instância do Amazon EC2 para o Amazon EMR (`EMR_EC2_DefaultRole`). Consulte detalhes em [Service role for cluster EC2 instances (EC2 instance profile)](https://docs.aws.amazon.com//emr/latest/ManagementGuide/emr-iam-role-ec2.html). 
  + Anexe a política `AmazonS3TablesFullAccess` a `EMR_EC2_DefaultRole`.

**Como configurar um cluster do Amazon EMR para consultar tabelas com o Spark**

1. Crie um cluster com a configuração a seguir. Para usar esse exemplo, substitua os valores de `user input placeholder` por suas próprias informações.

   ```
   aws emr create-cluster --release-label emr-7.5.0 \
   --applications Name=Spark \
   --configurations file://configurations.json \
   --region us-east-1 \
   --name My_Spark_Iceberg_Cluster \
   --log-uri s3://amzn-s3-demo-bucket/ \
   --instance-type m5.xlarge \
   --instance-count 2 \
   --service-role EMR_DefaultRole \
   --ec2-attributes \
   
   InstanceProfile=EMR_EC2_DefaultRole,SubnetId=subnet-1234567890abcdef0,KeyName=my-key-pair
   ```

   `configurations.json`:

   ```
   [{
   "Classification":"iceberg-defaults",
   "Properties":{"iceberg.enabled":"true"}
   }]
   ```

1. [Conecte-se ao nó primário do Spark usando SSH.](https://docs.aws.amazon.com//emr/latest/ManagementGuide/emr-connect-master-node-ssh.html#emr-connect-cli)

1. Insira o comando a seguir para inicializar uma sessão do Spark para o Iceberg que estabelece conexão com as tabelas. Substitua os `user input placeholders` de região, ID da conta e nome do bucket de tabela por suas próprias informações.

   ```
   spark-shell \
   --conf spark.sql.extensions=org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions \
   --conf spark.sql.defaultCatalog=s3tables \
   --conf spark.sql.catalog.s3tables=org.apache.iceberg.spark.SparkCatalog \
   --conf spark.sql.catalog.s3tables.catalog-impl=org.apache.iceberg.aws.glue.GlueCatalog \
   --conf spark.sql.catalog.s3tables.client.region=us-east-1 \
   --conf spark.sql.catalog.s3tables.glue.id=111122223333:s3tablescatalog/amzn-s3-demo-table-bucket
   ```

1. Consulte as tabelas com Spark SQL. Para conferir exemplos, consulte [Consultar tabelas do S3 com o Spark SQL](s3-tables-client-catalog.md#query-with-spark).

------

**nota**  
Se você estiver usando o comando `DROP TABLE PURGE` com o Amazon EMR:  
Amazon EMR versão 7.5  
Defina a configuração `spark.sql.catalog.your-catalog-name.cache-enabled` do Spark como `false`. Se essa configuração estiver definida como `true`, execute o comando em uma nova sessão ou aplicação para que o cache da tabela não seja ativado.
Amazon EMR versões posteriores a 7.5  
`DROP TABLE`Não há suporte ao . É possível usar a API REST `DeleteTable` de Tabelas do S3 para excluir uma tabela.