Apache Hive
Qu'est-ce qu'Apache Hive ?
Apache Hive est un logiciel open source de data warehouse conçu pour lire, écrire et gérer de grands datasets extraits du système de fichiers distribué Hadoop (HDFS), qui est un composant de l'écosystème Hadoop.
Bénéficiant d'une riche documentation et de mises à jour régulières, Apache Hive innove sans cesse dans le traitement des données, en préservant une approche simple et conviviale.
L'histoire d'Apache Hive
Projet open source, Apache Hive a été développé par deux créateurs, Joydeep Sen Sarma et Ashish Thusoo, lorsqu'ils travaillaient pour Facebook. Hive était à l'origine un sous-projet d'Apache Hadoop avant de devenir un projet de haut niveau à part entière. Les limites d'Hadoop et des tâches MapReduce se font ressentir, et les volumes de données à traiter sont passés de quelques dizaines de Go par jour en 2006 à 1 To, puis 15 To en quelques années. Les ingénieurs de Facebook étaient dans l'impossibilité d'exécuter des tâches complexes facilement, et c'est ce qui a ouvert la voie à Hive.
Apache Hive a été créé dans deux buts : fournir un langage déclaratif basé sur SQL, tout en permettant aux ingénieurs d'ajouter leurs propres scripts et programmes lorsque SQL ne suffisait pas. Cela permettait à l'essentiel du monde de l'ingénierie (équipé de compétences en SQL) de se familiariser rapidement à l'utilisation de Hive, sans la formation exigée par d'autres systèmes.
Apache Hive devait également fournir un magasin de métadonnées centralisé (basé sur Hadoop) couvrant tous les datasets de l'organisation. Développé au départ entre les murs de Facebook, Apache Hive est aujourd'hui utilisé et enrichi par d'autres entreprises, dont Netflix. Amazon maintient une branche logicielle d'Apache Hive qui est incluse dans Amazon Elastic MapReduce au sein d'Amazon Web Services.
Quelles sont les caractéristiques de Hive ?
Apache Hive prend en charge l'analyse des grands datasets stockés dans HDFS d'Hadoop et les systèmes de fichiers compatibles, comme Amazon S3, Azure Blob Storage, Azure Data Lake Storage, Google Cloud Storage et Alluxio.
Il s'accompagne d'un langage de requête de type SQL appelé HiveSQL, qui peut appliquer des schémas à la lecture et convertit les requêtes en tâches Apache Spark, MapReduce et Apache Tez de façon transparente. Autres atouts de Hive :
- Les fonctions data de Hive facilitent le traitement et l'interrogation des grands datasets. Elles permettent notamment de manipuler des chaînes et des données, de convertir des types, d'utiliser des opérateurs conditionnels et des fonctions mathématiques, etc.
- Stockage des métadonnées dans un système de gestion de base de données relationnelle
- Différents types de stockage : Parquet, texte brut, RCFile, HBase, ORC et d'autres
- Fonctionne sur les données compressées stockées dans l'écosystème Hadoop à l'aide d'algorithmes
- Intégration de fonctions définies par l'utilisateur (UDF) pour manipuler les dates et les chaînes, ainsi que d'autres outils d'exploration des données. Hive prend en charge l'extension du jeu d'UDF afin de traiter les cas d'usage qui ne sont pas couverts par les fonctions intégrées
- Requêtes de type SQL (HiveSQL) converties implicitement en tâches MapReduce, Tez ou Spark
Architecture Apache Hive et composants essentiels
L'architecture Apache Hive repose sur le serveur Hive Server 2, le langage de requête Hive (HQL), le metastore Apache Hive externe et le shell Hive Beeline.
Hive Server 2
Hive Server 2 accepte les requêtes des utilisateurs et des applications, crée un plan d'exécution et génère automatiquement une tâche YARN pour traiter les requêtes SQL. Le serveur prend également en charge l'optimiseur et le compilateur Hive pour optimiser l'extraction et le traitement des données.
Langage de requête Hive
En permettant la mise en œuvre de code semblable à SQL, Apache Hive évite d'avoir recours à du code JavaScript complexe et verbeux pour trier les données non structurées. Les utilisateurs peuvent effectuer des requêtes à l'aide de déclarations en HQL. Ces déclarations permettent de parcourir de vastes datasets, d'affiner les résultats et de partager des données de façon économique et efficace.
Metastore Hive
Dépôt central de l'infrastructure Apache Hive, le metastore héberge toutes les métadonnées de Hive. Dans le metastore, les métadonnées peut également être formatées en tables Hive et en partitions pour comparer les données de différentes bases de données relationnelles. Il rassemble les noms de table et de colonne, les types de données, les informations sur les partitions et l'emplacement des données dans HDFS.
Shell Beeline Hive
Comme bien d'autres systèmes de gestion de base de données (DBMS), Hive intègre sa propre interface de ligne de commande, qui permet aux utilisateurs d'exécuter des requêtes HQL. D'autre part, le shell Hive exécute également les pilotes JDBC et ODBC de Hive, et peut donc exécuter des requêtes provenant d'une application Open Database Connectivity ou Java Database Connectivity.
Comment fonctionne le logiciel Apache Hive ?
Hive Server 2 accepte les requêtes des utilisateurs et des applications, avant de créer un plan d'exécution et de générer automatiquement une tâche YARN pour traiter les requêtes SQL. La tâche YARN peut prendre la forme d'une charge MapReduce, Tez ou Spark.
Elle se comporte ensuite comme une application distribuée dans Hadoop. Une fois la requête SQL traitée, les résultats sont renvoyés à l'utilisateur final ou à l'application, ou bien retransmis à HDFS.
Le metastore Hive s'appuie ensuite sur une base de données relationnelle telle que Postgres ou MySQL pour assurer la persistance de ces métadonnées. Hive Server 2 extrait la structure de la table dans le cadre de la planification de la requête. Dans certains cas, les applications peuvent également interroger le metastore dans le cadre du processus sous-jacent.
Les charges Hive sont exécutées dans YARN, le gestionnaire de ressources Hadoop, qui fournit un environnement de traitement capable d'exécuter des tâches Hadoop. Cet environnement de traitement se voit allouer une part de mémoire et de CPU des différents nœuds de travail du cluster Hadoop.
YARN tente d'exploiter les informations de métadonnées HDFS pour déployer le traitement là où les données résident, et MapReduce, Tez, Spark ou Hive peuvent générer automatiquement du code de requêtes SQL sous la forme de tâches MapReduce, Tez ou Spark.
Bien que Hive n'utilise MapReduce que depuis peu, il est configuré pour utiliser MapReduce et parfois Spark dans la plupart des déploiements Cloudera Hadoop. Les déploiements Hortonworks (HDP) utilisent généralement Tez comme moteur d'exécution.
Quels sont les cinq types de données utilisés par Apache Hive ?
Parce qu'il traite les données en batch, Apache Hive peut extraire et analyser des pétaoctets de données avec une grande efficacité. De ce fait, il est idéal non seulement pour traiter les données, mais aussi pour exécuter des requêtes ad hoc.
Les types de données Apache Hive sont répartis en cinq catégories : numériques, date/heure, chaîne, complexe et divers.
Types de données numériques
Comme leur nom l'indique, ces types de données sont basés sur des entiers. Quelques exemples : « TINYINT », « SMALLINT », « INT » et « BIGINT ».
Types de données date/heure
Ces types de données permettent de saisir une date et une heure. Les entrées acceptées sont « TIMESTAMP », « DATE » et « INTERVAL ».
Types de données chaîne
Toujours aussi explicite, ce type de données permet de fournir du texte ou « chaînes » comme données à traiter. « STRING », « VARCHAR » et « CHAR » sont des types de chaîne.
Types de données complexes
Plus sophistiqués, les types complexes enregistrent des données plus élaborées. On y trouve par exemple les types « STRUCT », « MAP », « ARRAY » et « UNION ».
Typesdivers
Les types de données qui n'entrent dans aucune de ces quatre catégories sont appelés « divers » et peuvent recevoir des entrées « BOOLEAN » ou « BINARY » par exemple.
Fonctionnement de Map Join dans Apache Hive
Dans Apache Hive, Map Join permet d'accroître la vitesse et l'efficacité d'une requête en combinant les données de deux tables plutôt qu'en les « joignant » simplement et ce, en contournant les étapes MapReduce du processus.
Qu'est-ce qu'un système de gestion de base de données relationnelle (RDBMS) et comment s'en sert Apache Hive ?
Un système de gestion de base de données relationnelle (RDBMS) est un modèle de base de données qui stocke les métadonnées dans une structure de table en lignes ou en colonnes et permet de connecter et comparer différents datasets.
En utilisant un RDBMS, Apache Hive veille à ce que toutes les données soient stockées et traitées de façon sûre, fiable et précise. En effet, des fonctions intégrées comme la sécurité basée sur le rôle et le chiffrement des communications font en sorte que seules les personnes autorisées puissent accéder aux informations extraites.
Quelle est la différence entre Apache Hive et un RDBMS traditionnel ?
Il existe des différences essentielles entre Apache Hive et un RDBMS :
- Les fonctions du RDBMS reposent sur le principe de lectures et d'écritures multiples, tandis que Hive suit le modèle d'écriture unique et de lectures multiples.
- Hive applique la règle de schéma à la lecture. Autrement dit, il n'effectue aucune validation, vérification, ni interprétation : il copie/déplace simplement les fichiers. Dans les bases de données traditionnelles, un schéma est appliqué à une table qui, elle, l'applique lors de l'écriture.
- De plus, comme Hive repose sur Hadoop, il doit respecter les restrictions propres à Hadoop et MapReduce, alors que d'autres RDBMS n'ont pas cette obligation.
Apache Hive et Apache Spark
Apache Spark est un framework analytique conçu pour traiter des volumes considérables de données réparties en multiples datasets. Il offre une puissante interface utilisateur capable de prendre en charge différents langages, de R à Python.
Hive fournit une couche d'abstraction qui représente les données sous forme de tables, organisées en lignes et en colonnes, et permet d'interroger et d'analyser des types de données à l'aide d'une interface SQL, HiveQL. Apache Hive prend en charge les transactions ACID avec Hive LLAP. Ces transactions assurent la cohérence des vues des données dans un environnement où plusieurs utilisateurs/processus accèdent aux données simultanément pour effectuer des opérations de création, lecture, mise à jour et suppression (CRUD).
Databricks propose Delta Lake, similaire à Hive LLAP en ce qu'il offre également les garanties transactionnelles ACID, mais apporte également d'autres avantages qui améliorent les performances et la fiabilité de l'accès aux données. SparkSQL est le module d'Apache Spark qui permet d'interagir avec des données structurées représentées sous forme de tables organisées en lignes, colonnes et types de données.
Spark SQL est conforme à SQL 2023 et utilise Apache Spark comme moteur distribué pour traiter les données. Outre l'interface Spark SQL, il est possible d'utiliser une API DataFrames pour interagir avec les données en Java, Scala, Python et R. Spark SQL est similaire à HiveQL.
La syntaxe ANSI SQL et la majorité des fonctions Hive fonctionnent sur Databricks. Cela vaut notamment pour les fonctions Hive de conversion et d'interprétation des données date/heure, de manipulation de chaînes, d'opérations mathématiques et d'opérations conditionnelles.
Certaines fonctions propres à Hive devront être converties dans leur équivalent Spark SQL ou n'existent tout simplement pas dans Spark SQL sur Databricks. En revanche, toute la syntaxe ANSI SQL de HiveSQL fonctionnera avec Spark SQL sur Databricks.
Cela englobe les fonctions ANSI SQL d'agrégation et d'analytique. Hive est optimisé pour le format de fichier ORC (orienté colonne) et prend également en charge Parquet. Databricks est optimisé pour Parquet et Delta mais prend également en charge ORC. Nous recommandons toujours d'utiliser Delta, qui s'appuie sur le format Parquet open source.
Apache Hive et Presto
Projet créé au sein de Facebook à l'origine, PrestoDB, couramment surnommé Presto, est un moteur de requête SQL distribué qui permet aux utilisateurs de traiter et d'analyser des pétaoctets de données à grande vitesse. L'infrastructure de Presto prend en charge l'intégration des bases de données relationnelles et non relationnelles, de MySQL à Cassandra en passant par Teradata et MongoDB.