# Apache Hive

Apache Hive est une infrastructure d’entrepôt de données intégrée sur Hadoop permettant l'analyse, le requêtage via un langage proche syntaxiquement de SQL ainsi que la synthèse de données. Bien que initialement développée par Facebook, Apache Hive est maintenant utilisée et développée par d'autres sociétés comme Netflix$^,$. Amazon maintient un fork d'Apache Hive qui inclut Amazon Elastic MapReduce dans Amazon Web Services.

## Fonctionnalité

Apache Hive prend en charge l'analyse des grands ensembles de données stockées dans Hadoop HDFS ou des systèmes de fichiers compatibles tels que Amazon S3. Il fournit un langage similaire à SQL appelée HiveQL avec le schéma lors de la lecture et de manière transparente convertit les requêtes en map/reduce, Apache Tez et jobs Spark. Tous les trois moteurs d'exécution peuvent fonctionner sur Hadoop YARN. Pour accélérer les requêtes, il fournit des index, y compris bitmap indexes.
Par défaut, Hive stocke les métadonnées dans une base de données embarquée Apache Derby, et d'autres bases de données client / serveur comme MySQL peuvent éventuellement être utilisées.
Actuellement, il y a quatre formats de fichiers pris en charge par Hive: TEXTFILE, SEQUENCEFILE, ORC et RCFile$^,$$^,$. Les fichiers Apache Parquet peuvent être lus via des plugins dans les versions ultérieures à 0.10 et nativement à partir de 0.13$^,$.
Autres caractéristiques de Hive :
* Indexation pour fournir une accélération, type d'index dont le compactage et l'indice de Bitmap que de 0,10, plusieurs types d'index sont prévus ;
* types de stockage différents tels que texte brut, RCFile, HBase, ORC et d'autres ;
* stockage des métadonnées d'un SGBD relationnel, réduisant considérablement le temps d'effectuer certaines vérifications durant l'exécution de la requête ;
* fonctionnement sur des données compressées stockées dans l'écosystème de Hadoop à l'aide d'algorithmes tels que DEFLATE, BWT, snappy, etc ;
* fonctions intégrées définies par l'utilisateur (UDF) pour manipuler des dates, chaînes et autres outils d'exploration de données. Hive supporte l'extension d'UDF pour traiter des cas d'utilisation non soutenus par des fonctions intégrées ;
* requêtes de type SQL (HiveQL) qui sont implicitement converties en séquence d'instructions MapReduce ou Tez, ou des jobs Spark.

## Architecture

Hive est composé des éléments suivants :
* metastore : est chargé du stockage des métadonnées pour chaque table c'est-à-dire qu'il enregistre par exemple les schémas ainsi que les localisations. Il inclut aussi des métadonnées de partitionnement afin d'aider le driver à suivre la distribution des bases de données au sein du cluster. En pratique, les données sont stockées à la manière d'un SGBD relationnel traditionnel ;
* driver : joue le rôle du contrôleur de processus recevant les instances HiveQL. Il lance l'exécution des instructions par l'intermédiaire de la création de sessions et il contrôle la progression de l'exécution ainsi que le cycle de vie des processus. Il conserve les métadonnées nécessaires générées durant l'exécution des requêtes HiveQL. Le driver joue aussi le rôle de collecteur de données résultant des étapes Reduce ;
* compiler : réalise la compilation des requêtes HiveQL ;
* optimizer : réalise différentes transformations sur le plan d'exécution pour obtenir un DAG optimisé ;
* executor : après les phases de compilation et de d'optimisation, il exécute les tâches fournies par le DAG ;
* cLI, UI et Thrift Server : permettent à un utilisateur externe d’interagir avec Hive en soumettant des requêtes.

## HiveQL

Bien que basé sur SQL, HiveQL ne suit pas à la lettre la norme SQL. HiveQL fournit des extensions hors SQL, par exemple des insertions multi-tables, et seulement une offre basique pour l'indexation. Aussi, HiveQL manque de support pour les transactions et les vues matérialisées, et seul soutien de sous-requête limitée$^,$. Le support pour insert, update et delete avec la fonctionnalité complète d'ACID a été mis à disposition avec la sortie de la version 0.14.
En interne, le compilateur traduit les instructions HiveQL en graphe orienté acyclique de MapReduce ou Tez, ou job Spark, qui sont ensuite soumis à Hadoop pour exécution.