← Retourner à la liste des articles
Image blog
Auteur

Par Maxime Jumelle

CTO & Co-Founder

Publié le 5 avr. 2023

Catégorie Data Engineering

Apache Hive : tout savoir sur le Data Warehouse Hadoop

Ces dernières années, on entend beaucoup parler des technologies Big Data et plusieurs outils de traitement de données massives ont vu le jour. Cependant, plusieurs outils disparaissent à cause de leur complexité ou leur non adéquation avec les nouveaux besoins du domaine.

Parmi les frameworks d'analyse du Big Data les plus populaires, on compte notamment Apache Hadoop. Hadoop se révèle idéal pour le stockage et le traitement de quantités massives de données. En revanche, pour l’extraction de données, il est inutilement complexe, chronophage et coûteuse. Fort heureusement, la fondation Apache propose une autre solution pour remédier à ce problème : Apache Hive.

Apache Hadoop

Avant de découvrir Hive, nous devons savoir d'où vient cet outils et pourquoi a-t-il était créé.

Qu’entend-on par « Hadoop » ? Ou, plus important encore, que signifie Hadoop ? Cela signifie High Availability Distributed Object Oriented Platform. Et c’est exactement ce que la technologie Hadoop offre aux développeurs - une haute disponibilité via la distribution parallèle de tâches orientées objet.

Apache Hadoop est un framework Java open source développé en 2006 par Doug Cutting et Michael J. Cafarella et géré par Apache Software Foundation sous licence Apache 2.0. Il s'agit d'un écosystème logiciel qui permet aux entreprises de traiter d’énormes quantités de données en peu de temps. Ceci est accompli en facilitant l’utilisation du traitement informatique parallèle sur une échelle massive.

Hadoop est très répandu parce qu'il est à la fois accessible et facile à maîtriser.Il propose des modules avec de nombreuses options et il peut facilement évoluer et être déployé sur plusieurs machines pour s'adapter à quasiment toutes les tailles d'ensembles de données.


À lire aussi : découvrez notre formation Data Engineer


Hadoop n'est pas seulement une application, c'est surtout une plateforme dont les différents éléments intégrés permettent le stockage et traitement de données distribuées. L'écosystème Hadoop comporte des éléments de base indispensables au framework, d'autres sont des éléments complémentaires qui ajoutent des fonctionnalités. Parmi les outils les plus utilisé de l'écosystème Hadoop on trouve HDFS, Pig, YARN, MapReduce, Spark, HBase, Oozie, Zookeeper, et bien evidemment Hive.

Le traitement de données sous Hadoop se base essentiellent sur :

  • HDFS (Hadoop Distributed File System) : c’est l’unité de stockage de Hadoop. Il s'agit d'un système de fichiers spécialement conçu pour stocker d’énormes ensembles de données de différents formats sur diverses machines.
  • MapReduce : qui est un modèle de programmation (avec une implémentation associée) inventé par Google pour le traitement parallèle et distribué des données sur un cluster.

En général, plus le modèle de données se complexifie, plus l'écriture d'un job MapReduce qui les manipule devient fastidieuse. Si nous prenons le simple exemple du Word count que nous trouvons sur la documentation officielle de Hadoop, l’implémentation Java 7 fait une centaine de lignes environ. 😯 Oui, tout ça pour un Word Count avec MapReduce !

Afin de faciliter l’analyse de données stockées dans HDFS sans passer par la complexité de MapReduce, certains frameworks comme Apache Hive sont apparus. Ils proposent alors des langages de haut-niveau comme le très populaire SQL pour lancer des requêtes sur HDFS.

Pour plus d'informations à propos d'Apache Hadoop et HDFS, la formation Apache Hadoop et Spark de Blent couvre tous ces aspects.

Présentation de Hive

Apache Hive est un logiciel libre d'entrepôt de données conçu pour lire, écrire et gérer de grands ensembles de données extraits du système de fichiers distribué d'Apache Hadoop (HDFS).

En effet, il ne s'agit pas d'une base de données complète. Il ne stocke que les métadonnées et les données sont stockées uniquement dans HDFS. Ainsi, chaque requête écrite par l'utilisateur est convertie en code MapReduce qui interagit ensuite avec HDFS. Hive peut être utilisé comme système OLAP (Online Analytical Processing). Il est mieux adapté à l'analyse des données et aux opérations de type Data Mining dans les grands entrepôts de données.

OLAP vs OLTP

Les bases de données OLAP (Online Analytical Processing) et OLTP (Online Transaction Processing) sont deux types de bases de données utilisées dans les systèmes d'information pour des fins différentes.

Les bases de données OLAP sont principalement utilisées pour l'analyse des données et la prise de décisions stratégiques. Elles sont conçues pour permettre l'analyse de grandes quantités de données de manière rapide et efficace, en utilisant des outils d'analyse de données tels que les cubes OLAP.


À lire aussi : découvrez notre formation Data Engineer


Les bases de données OLTP, en revanche, sont principalement utilisées pour gérer les transactions quotidiennes d'une entreprise, telles que les ventes, les achats et les paiements. Elles sont conçues pour traiter rapidement de nombreuses transactions en même temps, en assurant la fiabilité et l'intégrité des données.

En résumé, les bases de données OLAP sont utilisées pour l'analyse des données à des fins de prise de décision, tandis que les bases de données OLTP sont utilisées pour gérer les transactions quotidiennes d'une entreprise.

Historique de Apache Hive

Historiquement, Apache Hive est un projet open source qui a été conçu par les co-créateurs Joydeep Sen Sarma et Ashish Thusoo lorsqu'ils travaillaient chez Facebook. Hive a commencé comme un sous-projet d'Apache Hadoop, mais est devenu un projet de haut niveau à part entière.

Avec les limites croissantes d'Hadoop et des jobs MapReduce et l'augmentation de la taille des données, qui sont passées de quelques dizaines de Go par jour en 2006 à 1 To/jour et à 15 To/jour en quelques années. Les ingénieurs de Facebook étaient incapables d'exécuter facilement les jobs complexes avec MapReduce, ce qui a provoqué la création de Hive.

Apache Hive a été créé pour atteindre deux objectifs :

  • Premièrement, un langage déclaratif basé sur SQL qui permettait également aux utilisateurs d'intégrer leurs propres scripts et programmes lorsque SQL ne suffisait pas, ce qui a également permis à la plupart des ingénieurs du monde (basés sur des compétences SQL) d'utiliser Hive avec un minimum de perturbations ou de recyclage par rapport aux autres.
  • Deuxièmement, fournir un registre centralisé de métadonnées (basé sur Hadoop) pour tous les ensembles de données de l'organisation. Ce qui a permit à Hive de manipuler les données comme si elles étaient persistées dans des tables (au sens d’un système de gestion de base de données classique) à l'aide de ses données du metastore.
Par abus de langage, on qualifiera de requêtes SQL les requêtes écrites sous Hive avec HQL, mais il y a tout de même quelques légères différences entre les deux.

Bien qu'initialement développé dans les locaux de Facebook, Apache Hive est utilisé et développé par d'autres entreprises telles que Netflix. Il est inclut également dans Amazon Elastic MapReduce sur Amazon Web Services.

Les fonctionnalités de Hive

Apache Hive prend en charge l'analyse de grands ensembles de données stockés non seulement dans HDFS d'Hadoop mais aussi dans des systèmes de fichiers compatibles tels qu'Amazon S3, Azure Blob Storage, Azure Data Lake Storage, Google Cloud Storage et Alluxio.

Il fournit un langage de requête de type SQL appelé HiveQL et permet de convertir de manière transparente les requêtes en jobs Apache Spark, MapReduce et Apache Tez.

Les autres caractéristiques de Hive sont les suivantes :

  • Hive Data Functions ou les fonctions de données Hive: ce sont des fonctions pré-construite et qui figurent dans le language HQL, permettant le traitement et l'interrogation de grands ensembles de données. Parmi les fonctionnalités fournies par ces fonctions figurent la manipulation de chaînes de caractères, la manipulation de dates, la conversion de types, les opérateurs conditionnels, les fonctions mathématiques, etc.

  • Fonctions définies par l'utilisateur (UDF ou User Defined Functions) : dans Hive, les utilisateurs peuvent définir leurs propres fonctions pour répondre à certaines exigences et pour gérer les cas d'utilisation non pris en charge par les fonctions intégrées. Celles-ci sont connues sous le nom d'UDFs dans Hive. Les fonctions définies par l'utilisateur sont implémentées en Java et peuvent être ensuite intégrées dans Hive et réutilisées.

  • Hive peut être facilement intégré avec Apache Spark, en effet il dispose d'une bibliothèque appelée Apache Hive Warehouse Connector (HWC) permettant de travailler plus facilement avec Spark. Elle prend en charge certaines tâches comme le déplacement de données entre les DataFrames Spark et les tables Hive.

  • Hive dispose de composantes supplémentaire à ses composantes de bases permettant de réaliser plusieurs tâches interessants. Par exemple, on peut installer Hive WebHCat, HCatalog et bien plus, à l'aide de la fonctionnalité Composants facultatifs.

  • Hive supporte la partition et les buckets pour une récupération rapide et simple des données. Il supporte également plusieurs formats de fichiers tels que ORC, SEQUENCEFILE, RCFILE (Record Columnar File) et TEXTFILE, etc.

  • Hive permet aussi l'exploitater des données compressées stockées dans l'écosystème Hadoop à l'aide d'algorithmes.

Et bien sûr, aucun outil n'est parfait, et Hive présente lui aussi quelques limites :

  • Hive supporte le traitement analytique en ligne (OLAP), mais pas le traitement transactionnel en ligne (OLTP).
  • Il ne supporte pas les sous-requêtes (aussi appelé “requête imbriquée” ou requête à l'intérieur d'une autre) et il a une latence élevée. Les sous-requêtes en SQL sont des requêtes qui sont utilisées dans une autre requête. Elles permettent d'exécuter des requêtes à l'intérieur d'une autre requête, ce qui peut être utile pour extraire des informations plus précises ou pour combiner des données provenant de différentes tables.

Architecture de Hive

Hive se compose principalement de 4 parties essentielles.

Clients Hive

Hive fournit différents pilotes pour la communication avec différents types d'applications. Les pilotes Hive prennent en charge les applications écrites dans n'importe quel langage comme Python, Java, C++ et Ruby, entre autres, en utilisant les pilotes JDBC, ODBC et Thrift, pour effectuer des requêtes.

Par exemple pour les applications basées sur Thrift, il fournira un client Thrift pour la communication (Hive Thrift Client).

Pour les applications liées à Java, il fournit des pilotes JDBC. Pour les autres types d'applications, il fournit des pilotes ODBC. Ces clients et pilotes communiquent à leur tour avec le serveur Hive dans les services Hive.

Services Hive

Les interactions des utilisateurs avec Hive peuvent être effectuées par le biais des services Hive. Si l'utilisateur veut effectuer des opérations liées aux requêtes dans Hive, il doit communiquer à travers ces services là.

CLI est l'interface de ligne de commande et Hive Web Interface est l'interface graphique de l'outil. Les deux permettant d'executer les requêtes et les commandes Hive.

Tous les pilotes communiquent avec le serveur Hive et avec le pilote principal des services Hive, comme le montre le diagramme d'architecture ci-dessus. Ce serveur là aussi appelé HiveServer2 accepte les requêtes entrantes des utilisateurs et des applications, crée un plan d'exécution et génère automatiquement un job YARN, MapReduce ou Tez pour traiter ces commande SQL. Le serveur prend également en charge l'optimiseur Hive et le compilateur Hive pour rationaliser l'extraction et le traitement des données.


À lire aussi : découvrez notre formation Data Engineer


Le pilote présent dans les services Hive (Hive driver) représente le pilote principal, et il communique tous les requêtes provenant des clients de types de JDBC, ODBC, ou autres vers le systèmes de stockage des metadonnées pour un traitement ultérieur.

Derby est également un outil de base de données relationnelle open-source qui est livré avec un Hive (par défaut) et qui est la propriété d'apache. HIVE utilise la base de données Derby essentiellement pour le stockage et à des fins de test.

Stockage et processing

La partie processing ou le moteur d'exécution Hive, a pour rôle de traiter la requête provenant de la partie service et génère des résultats identiques à ceux du MapReduce, YARN ou Tez selon le framework utilisé.

Les services Hive communiquent à leur tour avec le système de stockage de Hadoop et effectuent les actions suivantes:

  • Les informations de métadonnées des tables créées dans Hive sont stockées dans la "base de données des métadonnées" de Hive.
  • Les résultats des requêtes et les données chargées dans les tables vont être stockés dans le cluster Hadoop sur HDFS.

Quand utiliser Apache Hive ?

Apache Hive peut être utilisé dans diverses situations où il est nécessaire de gérer, d'interroger ou d'analyser de gros volumes de données structurées. Il est particulièrement utile dans les environnements de Big Data, où les données sont souvent stockées dans des systèmes distribués tels que Hadoop Distributed File System (HDFS).

  • Analyse de données : Apache Hive permet de faire des requêtes SQL sur de gros volumes de données stockées dans HDFS, ce qui facilite l'analyse de données à grande échelle.
  • Traitement de données ETL : Hive peut être utilisé pour extraire, transformer et charger des données dans HDFS, ce qui en fait un outil populaire pour les pipelines ETL (Extract, Transform, Load).
  • Business intelligence : Hive peut être utilisé pour créer des tableaux de bord et des rapports à partir de données stockées dans HDFS, ce qui en fait un choix populaire pour les projets de business intelligence.
  • Traitement de données en temps réel : Hive a récemment ajouté une fonctionnalité de traitement de flux en temps réel appelée Hive LLAP, qui permet d'exécuter des requêtes sur des données en temps réel avec une latence faible.

Avantages et inconvénients

Le principal avantage de Hive est qu'il peut facilement gérer de gros volumes de données en les répartissant sur plusieurs nœuds de traitement. Par ailleurs, Hive utilise SQL comme langage de requête, ce qui facilite l'utilisation pour les analystes et les développeurs qui sont déjà familiarisés avec le langage SQL. De plus, s'intègre étroitement avec Hadoop, ce qui en fait un choix populaire pour les environnements de Big Data qui utilisent Hadoop pour stocker des données. Enfin, l'application est également un projet open source maintenu par la fondation Apache, ce qui signifie que de nombreux outils et extensions tiers sont disponibles pour l'utiliser et l'étendre.

En revanche, un des inconvénients principaux est que Hive peut avoir une latence élevée pour les requêtes qui nécessitent une réponse rapide, en raison de son architecture de traitement en batch. Bien que l'utilisation de SQL soit un avantage pour Hive, cela signifie également que certaines requêtes plus complexes peuvent être difficiles à réaliser en utilisant uniquement SQL. Pour terminer, la configuration initiale de Hive peut être complexe et nécessite souvent une connaissance approfondie de Hadoop et de l'environnement d'exécution de Hive. En raison de son utilisation de Hadoop, Hive peut avoir une surcharge de stockage pour les métadonnées nécessaires pour le traitement des requêtes, ce qui peut augmenter les besoins en espace de stockage.

Au final, Hive reste aujourd'hui encore un Data Warehouse très populaire, non seulement parce que de nombreuses entreprises utilisent toujours des clusters Hadoop, que ce soit On-Premise ou dans le Cloud, mais aussi parce qu'il reste performant pour gérer de très gros volumes de données tout en offrant un langage de requête proche du SQL, avec lequel beaucoup de Data Analysts et Data Engineers sont familiers.

Articles similaires

Blog

7 févr. 2024

Data Engineering

Pendant de nombreuses années, le rôle des Data Engineers était de récupérer des données issues de différentes sources, systèmes de stockage et applications tierces et de les centraliser dans un Data Warehouse, dans le but de pouvoir obtenir une vision complète et organisée des données disponibles.

Maxime Jumelle

Maxime Jumelle

CTO & Co-Founder

Lire l'article

Blog

4 déc. 2023

Data Engineering

Pour de nombreuses entreprises, la mise en place et la maintenant de pipelines de données est une étape cruciale pour avoir à disposition d'une vue d'ensemble nette de toutes les données à disposition. Un des challenges quotidien pour les Data Analysts et Data Engineers consiste à s'assurer que ces pipelines de données puissent répondre aux besoins de toutes les équipes d'une entreprise.

Maxime Jumelle

Maxime Jumelle

CTO & Co-Founder

Lire l'article

Blog

14 nov. 2023

Data Engineering

Pour améliorer les opérations commerciales et maintenir la compétitivité, il est essentiel de gérer efficacement les données en entreprise. Cependant, la diversité des sources de données, leur complexité croissante et la façon dont elles sont stockées peuvent rapidement devenir un problème important.

Maxime Jumelle

Maxime Jumelle

CTO & Co-Founder

Lire l'article