Apache Hive vs Apache Impala : Différences majeures

Publié: 2022-11-23

Si vous débutez dans l'analyse de données volumineuses, l'hôte d'outils apache pourrait être sur votre radar ; cependant, la simple utilisation de différents outils peut devenir déroutante et, parfois, écrasante.

Cet article résoudra cette confusion et expliquera ce que sont Apache Hive et Impala et ce qui les rend différents l'un de l'autre !

Ruche Apache

Apache Hive est une interface d'accès aux données SQL pour la plate-forme Apache Hadoop. Hive vous permet d'interroger, d'agréger et d'analyser des données à l'aide de la syntaxe SQL.

Un schéma d'accès en lecture est utilisé pour les données dans le système de fichiers HDFS, vous permettant de traiter les données comme avec une table ordinaire ou un SGBD relationnel. Les requêtes HiveQL sont traduites en code Java pour les tâches MapReduce.

Ruche

Les requêtes Hive sont écrites dans le langage de requête HiveQL, qui est basé sur le langage SQL mais ne prend pas entièrement en charge la norme SQL-92.

Cependant, ce langage permet aux programmeurs d'utiliser leurs requêtes lorsqu'il est peu pratique ou inefficace d'utiliser les fonctionnalités de HiveQL. HiveQL peut être étendu avec des fonctions scalaires définies par l'utilisateur (UDF), des agrégations (codes UDAF) et des fonctions de table (UDTF).

Comment fonctionne Apache Hive

Apache Hive traduit les programmes écrits en langage HiveQL (proche de SQL) en une ou plusieurs tâches MapReduce, Apache Tez ou Apache Spark. Ce sont trois moteurs d'exécution qui peuvent être lancés sur Hadoop. Ensuite, Apache Hive organise les données dans un tableau pour que le fichier Hadoop Distributed File System (HDFS) exécute les tâches sur un cluster afin de produire une réponse.

Les tables Apache Hive sont similaires aux bases de données relationnelles et les unités de données sont organisées de l'unité la plus significative à la plus granulaire. Les bases de données sont des tableaux composés de partitions, qui peuvent à nouveau être décomposées en « compartiments ».

serveurruche1

Les données sont accessibles via HiveQL. Au sein de chaque base de données, les données sont numérotées, et chaque table correspond à un répertoire HDFS.

Plusieurs interfaces sont disponibles dans l'architecture Apache Hive, telles qu'une interface Web, une CLI ou des clients externes.

En effet, le serveur « Apache Hive Thrift » permet aux clients distants de soumettre des commandes et des requêtes à Apache Hive en utilisant différents langages de programmation. Le répertoire central d'Apache Hive est un « metastore » contenant toutes les informations.

Le moteur qui fait fonctionner Hive s'appelle "le pilote". Il regroupe un compilateur et un optimiseur pour déterminer le plan d'exécution optimal.

Enfin, la sécurité est assurée par Hadoop. Il s'appuie donc sur Kerberos pour l'authentification mutuelle entre le client et le serveur. L'autorisation pour les fichiers nouvellement créés dans Apache Hive est dictée par HDFS, autorisant l'utilisateur, le groupe ou toute autre autorisation.

Caractéristiques de la ruche

  • Prend en charge le moteur de calcul de Hadoop et de Spark
  • Utilise HDFS et fonctionne comme un entrepôt de données.
  • Utilise MapReduce et prend en charge ETL
  • En raison de HDFS, il a une tolérance aux pannes similaire à Hadoop

Apache Hive : avantages

Apache Hive est une solution idéale pour les requêtes et l'analyse de données. Elle permet d'obtenir des insights qualitatifs, procurant un avantage concurrentiel et facilitant la réactivité à la demande du marché.

Parmi les principaux avantages d'Apache Hive, on peut citer la simplicité d'utilisation liée à son langage « SQL-friendly ». De plus, il accélère l'insertion initiale des données puisque les données n'ont pas besoin d'être lues ou numérotées à partir d'un disque au format de base de données interne.

Sachant que les données sont stockées dans HDFS, il est possible de stocker de grands ensembles de données allant jusqu'à des centaines de pétaoctets de données sur Apache Hive. Cette solution est beaucoup plus évolutive qu'une base de données traditionnelle. Sachant qu'il s'agit d'un service cloud, Apache Hive permet aux utilisateurs de lancer rapidement des serveurs virtuels en fonction des fluctuations des charges de travail (c'est-à-dire des tâches).

La sécurité est également un aspect où Hive fonctionne mieux, avec sa capacité à répliquer les charges de travail critiques pour la récupération en cas de problème. Enfin, la capacité de travail est inégalée puisqu'elle peut effectuer jusqu'à 100 000 requêtes par heure.

Apache Impala

Apache Impala est un moteur de requêtes SQL massivement parallèle pour l'exécution interactive de requêtes SQL sur des données stockées dans Apache Hadoop, écrit en C++ et distribué sous la licence Apache 2.0.

Impala est également appelé un moteur MPP (Massively Parallel Processing), un SGBD distribué et même une base de données de pile SQL sur Hadoop.

apache-impala-logo-1

Impala fonctionne en mode distribué, où les instances de processus s'exécutent sur différents nœuds de cluster, recevant, planifiant et coordonnant les demandes des clients. Dans ce cas, l'exécution parallèle de fragments de la requête SQL est possible.

Les clients sont des utilisateurs et des applications qui envoient des requêtes SQL sur des données stockées dans Apache Hadoop (HBase et HDFS) ou Amazon S3. L'interaction avec Impala se produit via l'interface Web HUE (Hadoop User Experience), ODBC, JDBC et le shell de ligne de commande Impala Shell.

Impala dépend de l'infrastructure d'un autre outil SQL-on-Hadoop populaire, Apache Hive, en utilisant son magasin de métadonnées. En particulier, le Hive Metastore permet à Impala de connaître la disponibilité et la structure des bases de données.

Lors de la création, de la modification et de la suppression d'objets de schéma ou du chargement de données dans des tables via des instructions SQL, les modifications de métadonnées correspondantes sont automatiquement propagées à tous les nœuds Impala à l'aide d'un service d'annuaire spécialisé.

Les composants clés d'Impala sont les exécutables suivants :

  • Le démon Impalad ou Impala est un service système qui planifie et exécute des requêtes sur les données HDFS, HBase et Amazon S3. Un processus d'impalad s'exécute sur chaque nœud de cluster.
  • Statestore est un service de nommage qui assure le suivi de l'emplacement et de l'état de toutes les instances d'impalad dans le cluster. Une instance de ce service système s'exécute sur chaque nœud et sur le serveur principal (nom du nœud).
  • Le catalogue est un service de coordination des métadonnées qui propage les modifications des instructions Impala DDL et DML à tous les nœuds Impala concernés afin que les nouvelles tables ou les données nouvellement chargées soient immédiatement visibles pour n'importe quel nœud du cluster. Il est recommandé qu'une instance de Catalog s'exécute sur le même hôte de cluster que le démon Statestored.

Comment fonctionne Apache Impala

Impala, comme Apache Hive, utilise un langage de requête déclaratif similaire, Hive Query Language (HiveQL), qui est un sous-ensemble de SQL92, au lieu de SQL.

L'exécution réelle de la requête dans Impala est la suivante :

L'application cliente envoie une requête SQL en se connectant à n'importe quel impalad via des interfaces de pilote ODBC ou JDBC standardisées. L'impalad connecté devient le coordinateur de la requête en cours.

La requête SQL est analysée pour déterminer les tâches des instances d'impalad dans le cluster ; ensuite, le plan d'exécution optimal de la requête est construit.

Impalad accède directement à HDFS et HBase en utilisant des instances locales de services système pour fournir des données. Contrairement à Apache Hive, une telle interaction directe réduit considérablement le temps d'exécution des requêtes, car les résultats intermédiaires ne sont pas enregistrés.

En réponse, chaque démon renvoie des données à l'impalad de coordination, renvoyant les résultats au client.

impala

Caractéristiques de l'Impala

  • Prise en charge du traitement en mémoire en temps réel
  • Compatible avec SQL
  • Prend en charge les systèmes de stockage tels que HDFS, Apache HBase et Amazon S3
  • Prend en charge l'intégration avec des outils de BI tels que Pentaho et Tableau
  • Utilise la syntaxe HiveQL

Apache Impala : Avantages

Impala évite une éventuelle surcharge de démarrage car tous les processus du démon système sont démarrés directement au démarrage. Il économise considérablement le temps d'exécution des requêtes. Une augmentation supplémentaire de la vitesse d'Impala est due au fait que cet outil SQL pour Hadoop, contrairement à Hive, ne stocke pas les résultats intermédiaires et accède directement à HDFS ou HBase.

De plus, Impala génère du code de programme au moment de l'exécution et non à la compilation, comme le fait Hive. Cependant, un effet secondaire des performances à grande vitesse de l'Impala est une fiabilité réduite.

En particulier, si le nœud de données tombe en panne pendant l'exécution d'une requête SQL, l'instance Impala redémarrera et Hive continuera à maintenir une connexion à la source de données, offrant une tolérance aux pannes.

Les autres avantages d'Impala incluent la prise en charge intégrée d'un protocole d'authentification réseau sécurisé Kerberos, la hiérarchisation et la capacité de gérer la file d'attente des demandes et la prise en charge des formats Big Data populaires tels que LZO, Avro, RCFile, Parquet et Sequence.

Hive Vs Impala: Similitudes

Hive et Impala sont librement distribués sous la licence Apache Software Foundation et font référence à des outils SQL pour travailler avec des données stockées dans un cluster Hadoop. De plus, ils utilisent également le système de fichiers distribué HDFS.

Impala et Hive implémentent différentes tâches avec un objectif commun sur le traitement SQL des données volumineuses stockées dans un cluster Apache Hadoop. Impala fournit une interface de type SQL, vous permettant de lire et d'écrire des tables Hive, permettant ainsi un échange de données facile.

Dans le même temps, Impala rend les opérations SQL sur Hadoop assez rapides et efficaces, permettant d'utiliser ce SGBD dans des projets de recherche d'analyse de Big Data. Dans la mesure du possible, Impala fonctionne avec une infrastructure Apache Hive existante déjà utilisée pour exécuter des requêtes batch SQL de longue durée.

De plus, Impala stocke ses définitions de table dans un metastore, une base de données MySQL ou PostgreSQL traditionnelle, c'est-à-dire au même endroit où Hive stocke des données similaires. Il permet à Impala d'accéder aux tables Hive tant que toutes les colonnes utilisent les types de données, les formats de fichiers et les codecs de compression pris en charge par Impala.

Hive Vs Impala : Différences

Hive-Vs-Impala-Différences

Langage de programmation

Hive est écrit en Java, alors qu'Impala est écrit en C++. Cependant, Impala utilise également certains UDF Hive basés sur Java.

Cas d'utilisation

Les ingénieurs de données utilisent Hive dans les processus ETL (extraction, transformation, chargement), par exemple, pour les travaux par lots de longue durée sur de grands ensembles de données, par exemple, dans les agrégateurs de voyages et les systèmes d'information des aéroports. À son tour, Impala est principalement destiné aux analystes et aux scientifiques des données et est principalement utilisé dans des tâches telles que l'intelligence d'affaires.

Performance

Impala exécute les requêtes SQL en temps réel, tandis que Hive se caractérise par une faible vitesse de traitement des données. Avec des requêtes SQL simples, Impala peut s'exécuter 6 à 69 fois plus vite que Hive. Cependant, Hive gère mieux les requêtes complexes.

Latence/débit

Le débit de Hive est nettement supérieur à celui d'Impala. La fonctionnalité LLAP (Live Long and Process), qui permet la mise en cache des requêtes en mémoire, donne à Hive de bonnes performances de bas niveau.

LLAP inclut des services système à long terme (démons), qui vous permettent d'interagir directement avec les nœuds de données HDFS et de remplacer la structure de requête DAG étroitement intégrée (graphe acyclique dirigé) - un modèle de graphe activement utilisé dans le calcul Big Data.

Tolérance aux pannes

Hive est un système tolérant aux pannes qui préserve tous les résultats intermédiaires. Cela affecte également positivement l'évolutivité mais entraîne une diminution de la vitesse de traitement des données. À son tour, Impala ne peut pas être qualifiée de plate-forme tolérante aux pannes car elle est plus liée à la mémoire.

Conversion de code

Hive génère des expressions de requête au moment de la compilation, tandis qu'Impala les génère au moment de l'exécution. Hive se caractérise par un problème de « démarrage à froid » au premier lancement de l'application ; les requêtes sont converties lentement en raison de la nécessité d'établir une connexion à la source de données.

Impala n'a pas ce genre de frais généraux de démarrage. Les services système nécessaires (démons) pour le traitement des requêtes SQL sont démarrés au démarrage, ce qui accélère le travail.

Prise en charge du stockage

Impala prend en charge les formats LZO, Avro et Parquet, tandis que Hive fonctionne avec le texte brut et ORC. Cependant, les deux prennent en charge les formats RCFIle et Sequence.

Ruche Apache Apache Impala
Langue Java C++
Cas d'utilisation Ingénierie des données Analyse et analytique
Performance Élevé pour les requêtes simples Comparativement faible
Latence Plus de latence grâce à la mise en cache Moins latent
Tolérance aux pannes Plus tolérant grâce à MapReduce Moins tolérant à cause du MPP
Conversion Lent à cause du démarrage à froid Conversion plus rapide
Prise en charge du stockage Texte brut et ORC LZO, Avro, Parquet

Derniers mots

Hive et Impala ne se font pas concurrence mais plutôt se complètent efficacement. Même s'il existe des différences significatives entre les deux, il y a aussi beaucoup en commun et le choix de l'un par rapport à l'autre dépend des données et des exigences particulières du projet.

Vous pouvez également explorer des comparaisons directes entre Hadoop et Spark.

.