

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Utiliser un cluster Iceberg avec Hive
<a name="emr-iceberg-use-hive-cluster"></a>

Avec les versions 6.9.0 et ultérieures d'Amazon EMR, vous pouvez utiliser Iceberg avec un cluster Hive sans avoir à effectuer les étapes de configuration requises pour l'intégration Open Source d'Iceberg Hive. Pour les versions 6.8.0 et antérieures d'Amazon EMR, vous pouvez utiliser une action d'amorçage pour installer le JAR `iceberg-hive-runtime` afin de configurer le support de Hive for Iceberg.

Amazon EMR 6.9.0 inclut toutes les fonctionnalités nécessaires à l'[intégration de Hive 3.1.3 à Iceberg 0.14.1](https://iceberg.apache.org/releases/#0140-release) et inclut également des fonctionnalités supplémentaires d'Amazon EMR telles que la sélection automatique des moteurs d'exécution pris en charge lors de l'exécution (Amazon EMR sur EKS 6.9.0).

## Création d'un cluster Iceberg
<a name="create-iceberg-cluster"></a>

Vous pouvez créer un cluster avec Iceberg installé à l'aide de l'AWS Management ConsoleAPI, AWS CLI ou de l'API Amazon EMR. Dans ce didacticiel, vous allez utiliser le AWS CLI pour travailler avec Iceberg sur un cluster Amazon EMR. Pour utiliser la console afin de créer un cluster avec Iceberg installé, suivez les étapes de la section [Création d'un lac de données Iceberg à l'aide d'Amazon Athena, d'Amazon EMR et d'AWS Glue](https://aws.amazon.com/blogs/big-data/build-an-apache-iceberg-data-lake-using-amazon-athena-amazon-emr-and-aws-glue/).

Pour utiliser Iceberg sur Amazon EMR avec AWS CLI le, créez d'abord un cluster en suivant les étapes ci-dessous. Pour plus d'informations sur la spécification de la classification Iceberg à l'aide du SDK Java AWS CLI ou du SDK Java, consultez [Fournissez une configuration à l'aide du AWS CLI lorsque vous créez un cluster](emr-configure-apps-create-cluster.md#emr-configure-apps-create-cluster-cli) ou. [Fournir une configuration à l'aide du kit SDK Java lors de la création d'un cluster](emr-configure-apps-create-cluster.md#emr-configure-apps-create-cluster-sdk) Créez un fichier nommé `configurations.json` avec le contenu suivant:

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

Créez ensuite un cluster avec la configuration suivante, en remplaçant l'exemple de chemin de compartiment Amazon S3 et l'ID de sous-réseau par les vôtres :

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

Un cluster Hive Iceberg effectue les opérations suivantes :
+ Charge le fichier JAR d'exécution Iceberg Hive dans Hive et active la Iceberg-related configuration du moteur Hive.
+ Active la sélection dynamique du moteur d'exécution d'Amazon EMR Hive afin d'empêcher les utilisateurs de configurer le moteur d'exécution pris en charge pour la compatibilité avec Iceberg.

**Note**  
Les clusters Hive Iceberg ne sont actuellement pas compatibles avec AWS Glue Data Catalog. Le catalogue Iceberg par défaut est `HiveCatalog`, ce qui correspond au métastore configuré pour l'environnement Hive. Pour plus d'informations sur la gestion des catalogues, consultez la section [Utilisation de HCatalog](https://cwiki.apache.org/confluence/display/Hive/HCatalog+UsingHCat#HCatalogUsingHCat-UsingHCatalog) dans la documentation d'[Apache Hive.](https://cwiki.apache.org/confluence/display/HIVE)

## Prise en charge des fonctionnalités
<a name="feature-support"></a>

Amazon EMR 6.9.0 prend en charge Hive 3.1.3 et Iceberg 0.14.1. La prise en charge des fonctionnalités est limitée aux Iceberg-compatible fonctionnalités de Hive 3.1.2 et 3.1.3. Les commandes   suivantes sont prises en charge :
+ Avec les versions 6.9.0 à 6.12.x d'Amazon EMR, vous devez inclure le fichier jar `libfb303` dans le répertoire `auxlib` Hive. Utilisez la commande suivante pour l'inclure :

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

  Avec les versions 6.13 et ultérieures d'Amazon EMR, le fichier jar `libfb303` est automatiquement lié symboliquement au répertoire `auxlib` Hive. 
+ **Création d'une table**
  + **Non-partitioned table** — Les tables externes dans Hive peuvent être créées en fournissant le gestionnaire de stockage comme suit :

    ```
    CREATE EXTERNAL TABLE x (i int) STORED BY 'org.apache.iceberg.mr.hive.HiveIcebergStorageHandler'
    ```
  + **Table partitionnée** – Les tables partitionnées externes dans Hive peuvent être créées comme suit :

    ```
    CREATE EXTERNAL TABLE x (i int) PARTITIONED BY (j int) STORED BY 'org.apache.iceberg.mr.hive.HiveIcebergStorageHandler'
    ```
**Note**  
Le format de `STORED AS` fichier de n' ORC/AVRO/PARQUET est pas pris en charge dans Hive 3. La seule option par défaut est Parquet.
+ **Suppression d'une table** – La commande `DROP TABLE` est utilisée pour supprimer des tables, comme dans l'exemple suivant :

  ```
  DROP TABLE [IF EXISTS] table_name [PURGE];
  ```
+ **Lecture d'un tableau** : Les instructions `SELECT` peuvent être utilisées pour lire les tables Iceberg dans Hive, comme dans l'exemple suivant. Les moteurs d'exécution pris en charge sont MR et Tez.

  ```
  SELECT * FROM table_name
  ```

  Pour plus d'informations sur la syntaxe de sélection de Hive, voir [LanguageManual Select](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Select). Pour plus d'informations sur les instructions select associées aux tables Iceberg dans Hive, consultez [Apache Iceberg Select](https://iceberg.apache.org/docs/latest/hive/#select).
+ **Insertion dans une table** – L'instruction de HiveQL `INSERT INTO` fonctionne sur les tables Iceberg avec le support du moteur d'exécution Map Reduce uniquement. Les utilisateurs d'Amazon EMR n'ont pas besoin de définir explicitement le moteur d'exécution, car Amazon EMR Hive sélectionne le moteur pour Iceberg Tables au moment de l'exécution. 
  + **Insert into d'une seul tableau** – Exemple :

    ```
    INSERT INTO table_name VALUES ('a', 1);
    INSERT INTO table_name SELECT...;
    ```
  + **Multi-table insert dans : les** instructions d'insertion dans Non-atomic plusieurs tables sont prises en charge. Exemple :

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

À partir d'Amazon EMR 7.3.0, Hive with Iceberg prend en charge le catalogue de données AWS Glue en tant que métastore. Pour utiliser le catalogue de données AWS Glue comme métastore, définissez la propriété suivante.

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

Vous pouvez également définir la propriété suivante.

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

Vous pouvez ensuite créer une table à l'aide de l'exemple suivant.

```
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>');
```

## Considérations relatives à l'utilisation d'Iceberg avec Hive
<a name="hive-considerations"></a>
+ Iceberg prend en charge les types de requêtes suivants :
  + Create table
  + Drop table
  + Insérer dans la table
  + Lire la table
+ Seul le moteur d'exécution MR (MapReduce) est pris en charge pour les opérations DML (langage de manipulation de données), et le MR est obsolète dans Hive 3.1.3.
+ Pour Amazon EMR antérieur à la version 7.3.0, AWS Glue Data Catalog n'est actuellement pas compatible avec Iceberg with Hive.
+ La gestion des erreurs n'est pas suffisamment robuste. En cas de mauvaise configuration, les insertions dans les requêtes peuvent se terminer correctement. Cependant, le fait de ne pas mettre à jour les métadonnées peut entraîner des pertes de données.
+ L'intégration d'Iceberg Glue ne fonctionne pas avec le catalogue Redshift Managed Storage.