

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.

# Amélioration des performances de Hive
<a name="emr-hive-s3-performance"></a>

Amazon EMR offre des fonctionnalités permettant d'optimiser les performances lors de l'utilisation de Hive pour interroger, lire et écrire des données sauvegardées dans Amazon S3.

S3 Select peut améliorer la performance de requête pour les fichiers CSV et JSON dans certaines applications en « poussant vers le bas » le traitement à Amazon S3.

Le validateur optimisé EMRFS S3 est une alternative à la [OutputCommitter](https://hadoop.apache.org/docs/current/api/org/apache/hadoop/mapreduce/OutputCommitter.html)classe, qui élimine les opérations de liste et de renommage afin d'améliorer les performances lors de l'écriture de fichiers Amazon S3 à l'aide d'EMRFS.

**Topics**
+ [

# Activation du validateur optimisé Hive EMRFS S3
](hive-optimized-committer.md)
+ [

# Utilisation de S3 Select avec Hive pour améliorer les performances
](emr-hive-s3select.md)
+ [

# Optimisation MSCK
](emr-msck-optimization.md)

# Activation du validateur optimisé Hive EMRFS S3
<a name="hive-optimized-committer"></a>

Le Hive EMRFS S3 Optimized Committer est une méthode alternative permettant à EMR Hive d'écrire des fichiers pour des requêtes d'insertion lors de l'utilisation d'EMRFS. Le Committer élimine les opérations de liste et de renommage effectuées sur Amazon S3 et améliore les performances de l'application. La fonctionnalité est disponible à partir de EMR 5.34 et EMR 6.5.

## Activation du contributeur
<a name="enabling-hive-committer"></a>

Si vous souhaitez activer EMR Hive pour utiliser `HiveEMRFSOptimizedCommitter` pour valider les données par défaut pour toutes les tables gérées et externes par Hive, utilisez la configuration `hive-site` suivante dans les clusters EMR 6.5.0 ou EMR 5.34.0.

```
[
   {
      "classification": "hive-site",
      "properties": {
         "hive.blobstore.use.output-committer": "true"
      }
   }
]
```

**Note**  
N'activez pas cette fonction lorsque `hive.exec.parallel` est défini sur `true`.

## Limitations
<a name="hive-committer-limitations"></a>

Les restrictions de base suivantes s’appliquent aux balises :
+ L'activation de Hive pour fusionner automatiquement de petits fichiers n'est pas prise en charge. La logique de validation Hive par défaut sera utilisée même lorsque le validateur optimisé est activé.
+ Les tables Hive ACID ne sont pas prises en charge. La logique de validation Hive par défaut sera utilisée même lorsque le validateur optimisé est activé.
+ La nomenclature des noms de fichiers pour les fichiers écrits est passée de Hive `<task_id>_<attempt_id>_<copy_n>` à `<task_id>_<attempt_id>_<copy_n>_<query_id>`. Par exemple, un fichier nommé 

  `s3://warehouse/table/partition=1/000000_0` sera remplacé par `s3://warehouse/table/partition=1/000000_0-hadoop_20210714130459_ba7c23ec-5695-4947-9d98-8a40ef759222-1`. Le `query_id` ici est une combinaison du nom d'utilisateur, de l'horodatage et de l'UUID.
+ Lorsque des partitions personnalisées se trouvent sur des systèmes de fichiers différents (HDFS, S3), cette fonctionnalité est automatiquement désactivée. La logique de validation Hive par défaut sera utilisée lorsqu'elle sera activée.

# Utilisation de S3 Select avec Hive pour améliorer les performances
<a name="emr-hive-s3select"></a>

**Important**  
Amazon S3 Select n’est plus disponible pour les nouveaux clients. Les clients existants d’Amazon S3 Select peuvent continuer à utiliser cette fonctionnalité comme d’habitude. [En savoir plus](https://aws.amazon.com/blogs/storage/how-to-optimize-querying-your-data-in-amazon-s3/) 

À partir de la version 5.18.0 d'Amazon EMR, vous pouvez utiliser [S3 Select](https://aws.amazon.com/blogs/aws/s3-glacier-select/) avec Hive sur Amazon EMR. S3 Select permet aux applications de ne récupérer qu’un sous-ensemble de données d’un objet. Pour Amazon EMR, le travail de calcul impliqué dans le filtrage d'ensembles larges de données pour le traitement est « poussé en bas », du cluster vers Amazon S3, ce qui peut améliorer la performance de certaines applications et peut réduire la quantité de données transférée entre Amazon EMR et Amazon S3.

S3 Select est pris en charge avec les tables Hive en fonction des fichiers JSON et CSV, et en définissant la variable de configuration `s3select.filter` sur `true` durant votre session Hive. Pour plus d’informations et d’exemples, consultez [Spécification de S3 Select dans votre code](#emr-hive-s3select-specify).

## S3 Select est-il adapté à mon application ?
<a name="emr-hive-s3select-apps"></a>

Nous vous recommandons de tester vos applications avec et sans S3 Select pour voir si son utilisation peut être adaptée à votre application.

Utilisez les consignes suivantes pour déterminer si votre application peut utiliser S3 Select :
+ Votre requête exclut plus de la moitié de l'ensemble de données d'origine.
+ Vos prédicats de filtre de requête utilisent les colonnes qui ont un type de données pris en charge par Amazon S3 Select. Pour plus d'informations, consultez [Types de données](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-glacier-select-sql-reference-data-types.html) dans le *Guide de l'utilisateur Amazon Simple Storage Service*.
+ Votre connexion réseau entre Amazon S3 et le cluster Amazon EMR a une bonne vitesse de transfert et une bande passante disponible. Amazon S3 ne compresse pas les réponses HTTP, de sorte que la taille de la réponse est susceptible d'augmenter pour les fichiers d'entrée compressés.

## Considérations et restrictions
<a name="emr-hive-s3select-considerations"></a>
+ Le chiffrement côté serveur d'Amazon S3 avec des clés de chiffrement fournies par le client (SSE-C) et le chiffrement côté client ne sont pas pris en charge. 
+ La propriété `AllowQuotedRecordDelimiters` n'est pas prise en charge. Si cette propriété est spécifiée, la requête échoue.
+ Seuls les fichiers CSV et JSON au format UTF-8 sont pris en charge. Le format multiligne CSVs et le format JSON ne sont pas pris en charge.
+ Seuls les fichiers non compressés ou gzip ou bzip2 sont pris en charge.
+ Les caractères de commentaire ne sont pas pris en charge dans la dernière ligne.
+ Des lignes vides à la fin d'un fichier ne sont pas traitées.
+ Hive sur Amazon EMR prend en charge les types de données primitifs que S3 Select prend en charge. Pour plus d'informations, consultez [Types de données](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-glacier-select-sql-reference-data-types.html) dans le *Guide de l'utilisateur Amazon Simple Storage Service*.

## Spécification de S3 Select dans votre code
<a name="emr-hive-s3select-specify"></a>

Pour utiliser S3 Select dans votre table Hive, créez la table en spécifiant `com.amazonaws.emr.s3select.hive.S3SelectableTextInputFormat` comme nom de classe `INPUTFORMAT` et spécifiez une valeur pour la propriété `s3select.format` à l'aide de la clause `TBLPROPERTIES`.

S3 Select est désactivé par défaut lorsque vous exécutez des requêtes. Activez S3 Select en définissant `s3select.filter` sur `true` dans votre session Hive, comme illustré ci-dessous. Les exemples suivants montrent comment spécifier S3 Select lors de la création d'une table à partir de fichiers CSV et JSON sous-jacents, puis comment interroger la table à l'aide d'une instruction de sélection simple.

**Example Instruction CREATE TABLE pour une table basée sur CSV**  

```
CREATE TABLE mys3selecttable (
col1 string,
col2 int,
col3 boolean
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY ','
STORED AS
INPUTFORMAT
  'com.amazonaws.emr.s3select.hive.S3SelectableTextInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 's3://path/to/mycsvfile/'
TBLPROPERTIES (
  "s3select.format" = "csv",
  "s3select.headerInfo" = "ignore"
);
```

**Example Instruction CREATE TABLE pour une table basée sur JSON**  

```
CREATE TABLE mys3selecttable (
col1 string,
col2 int,
col3 boolean
)
ROW FORMAT SERDE 'org.apache.hive.hcatalog.data.JsonSerDe'
STORED AS
INPUTFORMAT
  'com.amazonaws.emr.s3select.hive.S3SelectableTextInputFormat'
OUTPUTFORMAT
  'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION 's3://path/to/json/'
TBLPROPERTIES (
  "s3select.format" = "json"
);
```

**Example Instruction SELECT TABLE**  

```
SET s3select.filter=true;
SELECT * FROM mys3selecttable WHERE col2 > 10;
```

# Optimisation MSCK
<a name="emr-msck-optimization"></a>

Hive stocke une liste de partitions pour chaque table dans son métastore. Toutefois, lorsque des partitions sont directement ajoutées ou supprimées du système de fichiers, le métastore Hive n'est pas au courant de ces modifications. La [commande MSCK](https://cwiki.apache.org/confluence/display/hive/languagemanual+ddl#LanguageManualDDL-RecoverPartitions(MSCKREPAIRTABLE)) met à jour les métadonnées de partition dans le métastore Hive pour les partitions directement ajoutées ou supprimées du système de fichiers. La syntaxe de cette commande est la suivante :

```
MSCK [REPAIR] TABLE table_name [ADD/DROP/SYNC PARTITIONS];
```

Hive implémente cette commande comme suit :

1. Hive récupère toutes les partitions de la table dans le métastore. À partir de la liste des chemins de partition qui n'existent pas dans le système de fichiers, crée une liste de partitions à supprimer du métastore.

1. Hive rassemble les chemins de partition présents dans le système de fichiers, les compare à la liste des partitions du métastore et génère une liste des partitions qui doivent être ajoutées au métastore.

1. Hive met à jour le métastore en utilisant le mode `ADD`, `DROP` ou `SYNC`.

**Note**  
Lorsque le métastore contient de nombreuses partitions, l'étape visant à vérifier si une partition n'existe pas dans le système de fichiers prend du temps, car l'appel d'API `exists` du système de fichiers doit être effectué pour chaque partition.

Dans Amazon EMR 6.5.0, Hive a introduit un indicateur appelé `hive.emr.optimize.msck.fs.check`. Lorsqu'il est activé, cet indicateur permet à Hive de vérifier la présence d'une partition dans la liste des chemins de partition du système de fichiers générée à l'étape 2 ci-dessus au lieu d'effectuer des appels d'API du système de fichiers. Dans Amazon EMR 6.8.0, Hive a activé cette optimisation par défaut, éliminant ainsi le besoin de définir l'indicateur `hive.emr.optimize.msck.fs.check`.