

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.

# Différences et considérations pour Hive sur Amazon EMR
<a name="emr-hive-differences"></a>

## Différences entre Apache Hive sur Amazon EMR et Apache Hive
<a name="emr-hive-apache-diff"></a>

[Cette section décrit les différences entre Hive on Amazon EMR et les versions par défaut de Hive disponibles sur http://svn.apache. org/viewvc/hive/branches](http://svn.apache.org/viewvc/hive/branches/)/. 

### Autorisation Hive
<a name="emr-hive-authorization"></a>

 Amazon EMR prend en charge l'[autorisation Hive](https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Authorization) pour HDFS, mais pas pour EMRFS et Amazon S3. Les clusters Amazon EMR s'exécutent avec l'autorisation désactivée par défaut.

### Comportement de fusion de fichiers Hive avec Amazon S3
<a name="emr-hive-filemerge"></a>

Apache Hive fusionne les petits fichiers à la fin d'une tâche de type map-only si `hive.merge.mapfiles` est défini sur true et la fusion est déclenchée uniquement si la taille de sortie moyenne de la tâche est inférieure au paramètre `hive.merge.smallfiles.avgsize`. Le comportement d'Amazon EMR Hive est identique si le chemin de la sortie finale est sur HDFS. Si le chemin de sortie se trouve dans Amazon S3, le paramètre `hive.merge.smallfiles.avgsize` est ignoré. Dans ce cas, la tâche de fusion est toujours déclenchée si `hive.merge.mapfiles` est défini sur `true`.

### Transactions ACID et Amazon S3
<a name="emr-hive-acid"></a>

Amazon EMR 6.1.0 et versions ultérieures prennent en charge les transactions Hive ACID (Atomicity, Consistency, Isolation, Durability) afin de respecter les propriétés ACID d'une base de données. Grâce à cette fonctionnalité, vous pouvez exécuter des opérations INSERT, UPDATE, DELETE et MERGE dans des tables gérées par Hive, avec des données dans Amazon Simple Storage Service (Amazon S3).

### Fonctionnalités LLAP Hive
<a name="emr-hive-LLAP"></a>

La [fonctionnalité LLAP](https://cwiki.apache.org/confluence/display/Hive/LLAP) ajoutée dans la version 2.0 d'Apache Hive par défaut n'est pas prise en charge dans la version Hive 2.1.0 sur Amazon EMR version 5.0.

Amazon EMR version 6.0.0 et ultérieure prend en charge la fonctionnalité Live Long and Process (LLAP) pour Hive. Pour de plus amples informations, veuillez consulter [Utilisation de LLAP pour Hive](https://docs.aws.amazon.com/emr/latest/ReleaseGuide/emr-hive-llap.html). 

## Différences Hive entre les versions Amazon EMR 4.x et 5.x
<a name="emr-hive-diff"></a>

Cette section indique les différences à prendre en compte avant de migrer une implémentation de Hive de la version Hive 1.0.0 sur la version 4.x d'Amazon EMR à la version Hive 2.x sur la version 5.x d'Amazon EMR.

### Différences et considérations opérationnelles
<a name="emr-hive-diffs-ops"></a>
+ **Ajout de la prise en charge des [transactions ACID (atomicité, cohérence, isolation et durabilité)](https://cwiki.apache.org/confluence/display/Hive/Hive+Transactions) :** cette différence entre Hive 1.0.0 sur Amazon EMR 4.x et Apache Hive par défaut a été supprimée.
+ **Suppression des écritures directes vers Amazon S3 :** cette différence entre Hive 1.0.0 sur Amazon EMR et Apache Hive par défaut a été supprimée. Désormais, Hive 2.1.0 sur la version 5.x d'Amazon EMR crée, lit et écrit des fichiers temporaires stockés dans Amazon S3. Par conséquent, vous n'avez plus besoin de créer une table temporaire dans le système de fichiers HDFS local du cluster pour lire la même table et y écrire. Si vous utilisez des compartiments activés pour la gestion des versions, veillez à gérer ces fichiers temporaires comme indiqué ci-dessous.
+ **Gestion des fichiers temporaires lors de l'utilisation de compartiments Amazon S3 versionnés :** lorsque vous exécutez des requêtes Hive pour lesquelles la destination des données générées est Amazon S3, de nombreux fichiers temporaires et répertoires sont créés. Il s'agit du nouveau comportement, comme indiqué précédemment. Si vous utilisez des compartiments S3 activés pour la gestion des versions, ces fichiers temporaires encombrement Amazon S3 et entraînent des coûts s'ils ne sont pas supprimés. Ajustez vos règles de cycle de vie afin que les données ayant un préfixe `/_tmp` soient supprimées après un délai court, par exemple cinq jours. Pour plus d'informations, consultez [Configuration de cycle de vie](https://docs.aws.amazon.com/AmazonS3/latest/userguide/how-to-set-lifecycle-configuration-intro.html).
+ **Mise à jour de Log4j par log4j 2 :** si vous utilisez log4j, vous devrez peut-être modifier votre configuration de journalisation en raison de cette mise à niveau. Pour plus d'informations, consultez [Apache log4j 2](http://logging.apache.org/log4j/2.x/).

### Différences et considérations en termes de performances
<a name="emr-hive-diffs-perf"></a>
+ **Différences de performances avec Tez :** avec la version 5.x d'Amazon EMR, Tez est le moteur d'exécution par défaut pour Hive au lieu de. MapReduce Tez offre des performances améliorées pour la plupart des flux de travail.
+ **Tables avec plusieurs partitions :** les requêtes qui génèrent un grand nombre de partitions dynamiques peuvent échouer et les requêtes qui effectuent des sélections sur des tables comportant un grand nombre de partitions peuvent nécessiter des temps d'exécution plus longs que prévu. Par exemple, une sélection effectuée sur 100 000 partitions peut prendre 10 minutes ou plus.

## Fonctionnalités supplémentaires de Hive sur Amazon EMR
<a name="emr-hive-additional-features"></a>

Amazon EMR ajoute à Hive de nouvelles fonctionnalités qui prennent en charge l'intégration de Hive à d'autres AWS services, telles que la possibilité de lire et d'écrire sur Amazon Simple Storage Service (Amazon S3) et DynamoDB.

### Variables dans Hive
<a name="emr-hive-variables"></a>

 Vous pouvez inclure des variables dans vos scripts en utilisant le symbole dollar et des accolades. 

```
add jar ${LIB}/jsonserde.jar
```

 Vous transmettez les valeurs de ces variables à Hive sur la ligne de commande à l'aide du paramètre `-d`, comme dans l'exemple suivant : 

```
-d LIB=s3://elasticmapreduce/samples/hive-ads/lib
```

 Vous pouvez également transmettre les valeurs via des étapes qui exécutent des scripts Hive. 

**Pour transmettre des valeurs de variables dans des étapes Hive à l'aide de la console**

1. [Ouvrez la console Amazon EMR à l'adresse /emr. https://console.aws.amazon.com](https://console.aws.amazon.com/emr/)

1. Choisissez **Créer un cluster**.

1. Dans la section **Étapes**, pour **Add Step (Ajouter étapes)**, choisissez **Programme Hive** dans la liste et **Configurer et ajouter**.

1.  Dans la boîte de dialogue **Ajouter une étape**, spécifiez les paramètres en utilisant le tableau suivant comme guide, puis choisissez **Ajouter**.     
[See the AWS documentation website for more details](http://docs.aws.amazon.com/fr_fr/emr/latest/ReleaseGuide/emr-hive-differences.html)

1. Sélectionnez les valeurs si nécessaire, puis choisissez **Créer un cluster**.

**Pour transmettre des valeurs variables aux étapes Hive à l'aide du AWS CLI**

Pour transmettre des valeurs variables aux étapes Hive à l'aide du paramètre AWS CLI, utilisez le `--steps` paramètre et incluez une liste d'arguments.
+ 
**Note**  
Les caractères de continuation de ligne Linux (\\) sont inclus pour des raisons de lisibilité. Ils peuvent être supprimés ou utilisés dans les commandes Linux. Pour Windows, supprimez-les ou remplacez-les par un caret (^).

  ```
  aws emr create-cluster --name "{{Test cluster}}" --release-label {{emr-7.13.0}} \
  --applications Name={{Hive}} Name={{Pig}} --use-default-roles --ec2-attributes KeyName={{myKey}} --instance-type {{m5.xlarge}} --instance-count {{3}} \
  --steps Type={{Hive}},Name="{{Hive Program}}",ActionOnFailure={{CONTINUE}},Args=[-f,{{s3://elasticmapreduce/samples/hive-ads/libs/response-time-stats.q}},-d,INPUT={{s3://elasticmapreduce/samples/hive-ads/tables}},-d,OUTPUT={{s3://amzn-s3-demo-bucket/hive-ads/output/}},-d,{{SAMPLE}}={{s3://elasticmapreduce/samples/hive-ads/}}]
  ```

  Pour plus d'informations sur l'utilisation des commandes Amazon EMR dans le AWS CLI, consultez. [https://docs.aws.amazon.com/cli/latest/reference/emr](https://docs.aws.amazon.com/cli/latest/reference/emr)

**Pour transmettre des valeurs de variables dans des étapes Hive à l'aide de Java SDK**
+ L'exemple suivant montre comment transmettre des variables dans des étapes à l'aide du SDK. Pour plus d'informations, consultez la section [Classe StepFactory](https://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/elasticmapreduce/util/StepFactory.html) dans la *référence de AWS SDK pour Java l'API*. 

  ```
  StepFactory stepFactory = new StepFactory();
  
     StepConfig runHive = new StepConfig()
       .withName("Run Hive Script")
       .withActionOnFailure("TERMINATE_JOB_FLOW")
       .withHadoopJarStep(stepFactory.newRunHiveScriptStep(“s3://amzn-s3-demo-bucket/script.q”,
        Lists.newArrayList(“-d”,”LIB= s3://elasticmapreduce/samples/hive-ads/lib”));
  ```

### Requêtes Amazon EMR Hive pour prendre en compte les schémas DynamoDB partiels
<a name="emr-hive-partial-schema"></a>

Amazon EMR Hive offre une flexibilité maximale lors de l'interrogation de tables DynamoDB en vous permettant de spécifier un sous-ensemble de colonnes sur lequel vous pouvez filtrer des données, plutôt que d'exiger que votre requête inclue toutes les colonnes. Cette technique de requête de schéma partiel est efficace lorsque vous avez un schéma de base de données fragmenté et que vous souhaitez filtrer des enregistrements en fonction de quelques colonnes, par exemple le filtrage des horodatages. 

 L'exemple suivant montre comment utiliser une requête Hive pour : 
+ Créez une table DynamoDB.
+ Sélectionner un sous-ensemble d'éléments (lignes) dans DynamoDB et réduire les données à certaines colonnes.
+ Copier les données qui en résultent dans Amazon S3. 

```
DROP TABLE dynamodb; 
DROP TABLE s3;

CREATE EXTERNAL TABLE dynamodb(hashKey STRING, recordTimeStamp BIGINT, fullColumn map<String, String>)
    STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' 
    TBLPROPERTIES ( 
     "dynamodb.table.name" = "myTable",
     "dynamodb.throughput.read.percent" = ".1000", 
     "dynamodb.column.mapping" = "hashKey:HashKey,recordTimeStamp:RangeKey"); 

CREATE EXTERNAL TABLE s3(map<String, String>)
     ROW FORMAT DELIMITED FIELDS TERMINATED BY ',' 
     LOCATION 's3://bucketname/path/subpath/';

INSERT OVERWRITE TABLE s3 SELECT item fullColumn FROM dynamodb WHERE recordTimeStamp < "2012-01-01";
```

La table suivante illustre la syntaxe de requête pour la sélection de n'importe quelle combinaison d'éléments de DynamoDB.


| Exemple de requête | Description du résultat | 
| --- | --- | 
| SÉLECTIONNEZ\* PARMI {{table\_name}} ; | Sélectionne tous les éléments (lignes) dans une table donnée et inclut des données à partir de toutes les colonnes disponibles pour ces éléments. | 
| SÉLECTIONNEZ \* À PARTIR DE {{table\_name}} {{field\_name}} WHERE = {{value}} ; | Sélectionne certains éléments (lignes) dans une table donnée et inclut des données à partir de toutes les colonnes disponibles pour ces éléments. | 
| SÉLECTIONNEZ {{column1\_name}}{{column2\_name}}, {{column3\_name}} PARMI {{table\_name}} ; | Sélectionne tous les éléments (lignes) dans une table donnée et inclut des données à partir de certaines colonnes disponibles pour ces éléments. | 
| SÉLECTIONNEZ {{column1\_name}}{{column2\_name}}, {{column3\_name}} D'{{table\_name}}OÙ {{field\_name}} = {{value}} ; | Sélectionne certains éléments (lignes) dans une table donnée et inclut des données à partir de certaines colonnes disponibles pour ces éléments. | 

### Copier des données entre des tables DynamoDB dans différentes régions AWS
<a name="emr-hive-cross-region-ddb-copy"></a>

Amazon EMR Hive fournit une propriété `dynamodb.region` que vous pouvez définir pour chaque table DynamoDB. Lorsque `dynamodb.region` est définie différemment sur deux tables, toute données que vous copiez entre les tables se produit automatiquement entre les régions spécifiées.

 L'exemple suivant vous montre comment créer une table DynamoDB avec un script Hive qui définit la propriété `dynamodb.region` :

**Note**  
Les propriétés de région par table remplacent les propriétés Hive globales.

```
CREATE EXTERNAL TABLE dynamodb(hashKey STRING, recordTimeStamp BIGINT, map<String, String> fullColumn)
    STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' 
    TBLPROPERTIES ( 
     "dynamodb.table.name" = "myTable",
     "dynamodb.region" = "eu-west-1", 
     "dynamodb.throughput.read.percent" = ".1000", 
     "dynamodb.column.mapping" = "hashKey:HashKey,recordTimeStamp:RangeKey");
```

### Définition des valeurs de débit de DynamoDB par table
<a name="emr-hive-set-ddb-throughput"></a>

Amazon EMR Hive vous permet de définir le DynamoDB readThroughputPercent et les writeThroughputPercent paramètres par table dans la définition de la table. Le script Hive Amazon EMR suivant montre comment définir les valeurs de débit. Pour plus d'informations sur les valeurs de débit DynamoDB, consultez [Spécification d'exigences de lecture et d'écriture pour des tables](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithDDTables.html#ProvisionedThroughput). 

```
CREATE EXTERNAL TABLE dynamodb(hashKey STRING, recordTimeStamp BIGINT, map<String, String> fullColumn)
    STORED BY 'org.apache.hadoop.hive.dynamodb.DynamoDBStorageHandler' 
    TBLPROPERTIES ( 
     "dynamodb.table.name" = "myTable",
     "dynamodb.throughput.read.percent" = ".4",
     "dynamodb.throughput.write.percent" = "1.0",
     "dynamodb.column.mapping" = "hashKey:HashKey,recordTimeStamp:RangeKey");
```