

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

# Usar um cluster do Iceberg com o Hive
<a name="emr-iceberg-use-hive-cluster"></a>

Com as versões 6.9.0 e posteriores do Amazon EMR, você pode usar o Iceberg com um cluster do Hive sem precisar executar as etapas de configuração necessárias para a integração do IcebergHive de código aberto. Para as versões 6.8.0 e anteriores do Amazon EMR, você pode usar uma ação de bootstrap para instalar o jar `iceberg-hive-runtime` e configurar o suporte do Hive para Iceberg.

O Amazon EMR 6.9.0 inclui todos os atributos para a [integração do Hive 3.1.3 com o Iceberg 0.14.1](https://iceberg.apache.org/releases/#0140-release) e também inclui atributos adicionais do Amazon EMR, como seleção automática de mecanismos de execução compatíveis em runtime (Amazon EMR no EKS 6.9.0).

## Criar um cluster do Iceberg
<a name="create-iceberg-cluster"></a>

Você pode criar um cluster com o Iceberg instalado usando oConsole de gerenciamento da AWS, o AWS CLI ou a API do Amazon EMR. Neste tutorial, você usa o AWS CLI para trabalhar com o Iceberg em um cluster do Amazon EMR. Para usar o console para criar um cluster com o Iceberg instalado, siga as etapas em [Criar um data lake no Iceberg usando o Amazon Athena, o Amazon EMR e o AWS Glue](https://aws.amazon.com/blogs/big-data/build-an-apache-iceberg-data-lake-using-amazon-athena-amazon-emr-and-aws-glue/).

Para usar o Iceberg no Amazon EMR com AWS CLI o, primeiro crie um cluster usando as etapas abaixo. Para obter informações sobre como especificar a classificação Iceberg usando o AWS CLI ou o Java SDK, consulte ou. [Forneça uma configuração usando o AWS CLI ao criar um cluster](emr-configure-apps-create-cluster.md#emr-configure-apps-create-cluster-cli) [Fornecer uma configuração usando o SDK do Java ao criar um cluster](emr-configure-apps-create-cluster.md#emr-configure-apps-create-cluster-sdk) Crie um arquivo chamado `configurations.json` com o seguinte conteúdo:

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

Em seguida, crie um cluster com a configuração a seguir, substituindo o exemplo de caminho do bucket do Amazon S3 e o ID da sub-rede pelos seus próprios:

```
aws emr create-cluster --release-label emr-6.9.0 \
--applications Name=Hive \
--configurations file://iceberg_configurations.json \
--region us-east-1 \
--name My_hive_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-1234567890abcdef}}
```

Um cluster do Iceberg no Hive faz o seguinte:
+ Carrega o jar de tempo de execução do Iceberg Hive no Hive e ativa a Iceberg-related configuração do mecanismo Hive.
+ Permite a seleção dinâmica do mecanismo de execução do Hive no Amazon EMR para impedir que os usuários configurem um mecanismo de execução compatível com o Iceberg.

**nota**  
Atualmente, os clusters Hive Iceberg não são compatíveis com o AWS Glue Data Catalog. O catálogo padrão do Iceberg é `HiveCatalog`, que corresponde ao metastore configurado para o ambiente Hive. Para obter mais informações sobre gerenciamento de catálogos, consulte [Using HCatalog](https://cwiki.apache.org/confluence/display/Hive/HCatalog+UsingHCat#HCatalogUsingHCat-UsingHCatalog) na [documentação do Apache Hive](https://cwiki.apache.org/confluence/display/HIVE).

## Suporte a recursos
<a name="feature-support"></a>

O Amazon EMR versão 6.9.0 é compatível com o Hive 3.1.3 e o Iceberg 0.14.1. O suporte a recursos é limitado aos Iceberg-compatible recursos do Hive 3.1.2 e 3.1.3. Os seguintes comandos   são compatíveis:
+ Com as versões 6.9.0 a 6.12.x do Amazon EMR, você deve incluir o jar `libfb303` no diretório `auxlib` do Hive. Use o seguinte comando para instalar:

  ```
  sudo /usr/bin/ln -sf /usr/lib/hive/lib/libfb303-*.jar /usr/lib/hive/auxlib/libfb303.jar
  ```

  Com as versões 6.13 e posteriores do Amazon EMR, o jar `libfb303` é automaticamente vinculado ao diretório `auxlib` do Hive. 
+ **Criar uma tabela**
  + **Non-partitioned tabela** — As tabelas externas no Hive podem ser criadas fornecendo o manipulador de armazenamento da seguinte forma:

    ```
    CREATE EXTERNAL TABLE x (i int) STORED BY 'org.apache.iceberg.mr.hive.HiveIcebergStorageHandler'
    ```
  + **Tabela particionada**: as tabelas externas particionadas no Hive podem ser criadas da seguinte forma:

    ```
    CREATE EXTERNAL TABLE x (i int) PARTITIONED BY (j int) STORED BY 'org.apache.iceberg.mr.hive.HiveIcebergStorageHandler'
    ```
**nota**  
O formato de `STORED AS` arquivo do não ORC/AVRO/PARQUET é suportado no Hive 3. A opção padrão e única é Parquet.
+ **Descartar uma tabela**: o comando `DROP TABLE` é usado para descartar tabelas, como no exemplo a seguir:

  ```
  DROP TABLE [IF EXISTS] table_name [PURGE];
  ```
+ **Ler uma tabela**: as instruções `SELECT` podem ser usadas para ler tabelas do Iceberg no Hive, como no exemplo a seguir. Os mecanismos de execução compatíveis são MR e Tez.

  ```
  SELECT * FROM table_name
  ```

  [Para obter informações sobre a sintaxe de seleção do Hive, consulte LanguageManual Selecionar.](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Select) Para obter informações sobre instruções selecionadas com tabelas do Iceberg no Hive, consulte [Selecionar Apache Iceberg](https://iceberg.apache.org/docs/latest/hive/#select).
+ **Inserir em uma tabela**: a instrução `INSERT INTO` do HiveQL funciona em tabelas do Iceberg compatíveis somente com o mecanismo de execução do Map Reduce. Os usuários do Amazon EMR não precisam definir explicitamente o mecanismo de execução porque o Hive no Amazon EMR seleciona o mecanismo para tabelas do Iceberg no runtime. 
  + **Inserção de tabela única**: exemplo:

    ```
    INSERT INTO table_name VALUES ('a', 1);
    INSERT INTO table_name SELECT...;
    ```
  + **Multi-table insert into** — há suporte para instruções de inserção em Non-atomic várias tabelas. Exemplo:

    ```
    FROM source
     INSERT INTO table_1 SELECT a, b
     INSERT INTO table_2 SELECT c,d;
    ```

A partir do Amazon EMR 7.3.0, o Hive with Iceberg oferece suporte ao AWS Glue Data Catalog como metastore. Para usar o AWS Glue Data Catalog como metastore, defina a seguinte propriedade.

```
SET iceberg.catalog.<catalog_name>.catalog-impl=org.apache.iceberg.aws.glue.GlueCatalog;
```

Opcionalmente, você também pode definir a propriedade a seguir.

```
SET iceberg.catalog.<catalog_name>.type=glue;
```

Você pode então criar uma tabela usando o exemplo a seguir.

```
CREATE EXTERNAL TABLE table_name (col1 type1, col2 type2,..)
ROW FORMAT SERDE 'org.apache.iceberg.mr.hive.HiveIcebergSerDe'
STORED BY 'org.apache.iceberg.mr.hive.HiveIcebergStorageHandler'
location '<location>'
TBLPROPERTIES ('table_type'='iceberg', 'iceberg.catalog'='<catalog_name>');
```

## Considerações sobre o uso do Iceberg com o Hive
<a name="hive-considerations"></a>
+ O Iceberg é compatível com os seguintes tipos de consulta:
  + Create table
  + Drop table
  + Inserir na tabela
  + Ler a tabela
+ Somente o mecanismo de execução MR (MapReduce) é suportado para operações de DML (linguagem de manipulação de dados), e o MR está obsoleto no Hive 3.1.3.
+ Para o Amazon EMR anterior à 7.3.0, o AWS Glue Data Catalog atualmente não é compatível com o Iceberg with Hive.
+ O tratamento de erros não é suficientemente robusto. Em casos de configuração incorreta, as inserções nas consultas podem ser concluídas com êxito. No entanto, a falha na atualização dos metadados pode resultar em perda de dados.
+ A integração do Iceberg no Glue não funciona com o catálogo do Redshift Managed Storage.