Introduction à Hive pour les nuls [Module 1.3] – Rahul Anand
Pourquoi HiveQL est-il préféré à SQL pour BigData? Qu’est-ce que Hive? S’agit-il simplement d’un langage SGBD simple? Découvrons-le dans ce module.
Salut les copains! Bienvenue dans le module 1.3 Introduction à Hive. Si vous êtes nouveau ici, consultez
Dans ce module, nous discuterons de la théorie de base expliquant pourquoi Hive fait partie de l’écosystème Hadoop et a appelé une technologie BigData.
Tout d’abord
Qu’est-ce que Hive et pourquoi est-il utilisé?
Hive est un outil d’infrastructure d’entrepôt de données pour traiter des données structurées dans Hadoop. Il réside au-dessus de Hadoop pour résumer le Big Data et facilite les requêtes et l’analyse. Comme déjà expliqué dans mon module précédent, Hive utilise un langage de requête de type SQL appelé HiveQL pour effectuer des requêtes ad hoc et une analyse de requête. Cependant, ce n’est pas une base de données relationnelle.
Un petit historique d’Apache Hive vous aidera à comprendre pourquoi il a vu le jour. Lorsque Facebook a commencé à collecter des données et à les ingérer dans Hadoop, les données arrivaient au rythme de dizaines de Go par jour en 2006. Puis, en 2007, elles sont passées à 1 To / jour et en quelques années à environ 15 To / journée. Initialement, les scripts Python ont été écrits pour ingérer les données dans les bases de données Oracle, mais avec l’augmentation du débit de données et également la diversité des sources / types de données entrantes, cela devenait difficile. Les instances Oracle se remplissaient assez rapidement et il était temps de développer un nouveau type de système qui traitait de grandes quantités de données. C’est Facebook qui a créé Hive pour la première fois, de sorte que la plupart des personnes ayant des compétences SQL pouvaient utiliser le nouveau système avec des changements minimes, par rapport à ce qui était requis avec les autres SGBDR
Entrepôt de données fait référence à un système utilisé pour collecter des données à partir d’un système hétérogène mais fournit une vue unifiée. Les données sont ensuite nettoyées, transformées et analysées afin de découvrir des informations utiles. C’est un énorme sujet en lui-même, faites-moi savoir dans les commentaires si vous souhaitez que je crée un blog sur ce sujet.
Hive possède l’avantage de l’interrogation à grande vitesse tout en traitant de grands ensembles de données répartis sur plusieurs nœuds. Il fournit une structure aux données qui sont déjà stockées dans la base de données.
Qu’est-ce que l’architecture de la ruche?
Hive prend en charge les applications écrites dans n’importe quelle langue pour effectuer des requêtes sur Hive. Les requêtes Hive sont soumises à un processus HiveServer2 qui s’exécute généralement sur un nœud maître du cluster. Ensuite, la requête ruche est principalement convertie en un travail MapReduce. HiveServer2 permet à plusieurs clients de soumettre des demandes à Hive.
Qu’est-ce que HiveServer2?
HiveServer2 (HS2) est un service qui permet aux clients d’exécuter des requêtes sur Hive. HiveServer2 est le successeur de HiveServer1 qui est obsolète depuis Hive 1.0.0. HS2 prend en charge la simultanéité et l’authentification multi-clients. Il est conçu pour fournir une meilleure prise en charge des clients API ouverts tels que JDBC et ODBC.
Qu’est-ce qu’un serveur Thrift?
Apache Thrift est essentiellement un ensemble de protocoles qui définissent comment les connexions sont établies entre les clients et les serveurs. Apache Hive utilise Thrift pour permettre aux utilisateurs distants d’établir une connexion avec HiveServer2 peut également être connu comme Thrift Server pour s’y connecter et soumettre des requêtes.
Qu’est-ce que ODBC?
Le pilote ODBC Hive est une bibliothèque de logiciels qui implémente la norme API ODBC (Open Database Connectivity) pour le système de gestion de base de données Hive, permettant aux applications compatibles ODBC d’interagir de manière transparente (idéalement) avec Hive via une interface standard. Aucun pilote ODBC n’est disponible pour HiveServer2 dans le cadre d’Apache Hive. Il existe des pilotes ODBC tiers disponibles auprès de différents fournisseurs, et la plupart d’entre eux semblent être gratuits.
Qu’est-ce que JDBC?
JDBC (Java Database Connectivity) est l’API Java qui gère la connexion à une base de données, l’émission de requêtes et de commandes et la gestion des résultats obtenus à partir de la base de données.
JDBC a été initialement conçu comme une API côté client, permettant à un client Java d’interagir avec une source de données. Cela a changé avec JDCB 2.0, qui comprenait un package optionnel prenant en charge les connexions JDBC côté serveur.
HiveServer2 possède un pilote JDBC. Il prend en charge l’accès intégré et distant à HiveServer2. Le mode Remote HiveServer2 est recommandé pour une utilisation en production, car il est plus sécurisé et ne nécessite pas d’accès direct HDFS / metastore aux utilisateurs.
Il existe une URL JDBC unique qui nous aide à établir cette connexion entre notre application et le métastore Hive.
Nous verrons en détail le client API JDBC dans un module ultérieur.
Voyons maintenant ce qu’est un pilote Hive?
Fondamentalement, pour recevoir les requêtes et les soumettre à Thrift, JDBC, ODBC, CLI, interface Web UI par un client Hive, le pilote de ruche est responsable et fait partie du composant principal de Hive Services. De plus, pour décomposer les instructions du langage de requête Hive, il inclut le compilateur, l’exécuteur ainsi que l’optimiseur.
Bon sang, tant de termes. Qu’est-ce que Metastore?
Metastore est le référentiel central des métadonnées Apache Hive. Il stocke les métadonnées des tables Hive (comme leur schéma et leur emplacement) et les partitions dans une base de données relationnelle. Il permet au client d’accéder à ces informations à l’aide de l’API du service de métastore.
Compilateur?
Comme tout compilateur de programmation, Hive Compiler analyse la requête donnée au processus, vérifie la syntaxe et le plan de requête (exigences de la requête), puis envoie une demande de métadonnées à Metastore (base de données) et une fois qu’il reçoit ces métadonnées, le compilateur vérifie la et renvoie le plan au conducteur de la ruche. Et avec cela, notre compilateur a terminé sa tâche.
Optimiseur?
Il exécute diverses fonctions de transformation et détermine également le type de jointure le plus approprié à utiliser pour un travail particulier. Il divise également les tâches pour améliorer l’efficacité et l’évolutivité.
Exécuteur?
L’exécuteur exécute le plan d’exécution formé par le compilateur après les étapes de compilation et d’optimisation.
Mais attendez, qu’est-ce que tout cela? Comment ça fonctionne?
D’accord, désolé pour toute la technicité. Entrons dans les détails simples d’une manière que nous pouvons comprendre.
Ainsi, Hive est une technologie de type SQL. Maintenant, les requêtes que nous envoyons sur Hive ressemblent à n’importe quelle requête SQL
Prenons un exemple du tableau suivant appelé TEST qui est stocké dans une base de données appelée TESTDATABASE:
Maintenant, si je lance une requête
Je devrais faire imprimer les données du tableau.
Voyons maintenant comment Hive gère cette requête en elle-même pour comprendre le véritable fonctionnement de Hive.
-
Exécution d’une requête
La ligne de commande ou l’interface utilisateur Web envoie la requête au pilote (toute interface Hive telle que le pilote de base de données tel que JDBC, ODBC, etc.) pour l’exécuter. -
Obtenir un plan de requête
Le pilote utilise l’aide du compilateur de requêtes qui analyse la requête pour vérifier la syntaxe et le plan de requête ou l’exigence de la requête. -
Récupération des métadonnées
Le compilateur envoie une demande de métadonnées à Metastore (n’importe quelle base de données). Metastore envoie des métadonnées en réponse au compilateur. -
Envoyer le plan
Le compilateur vérifie l’exigence et renvoie le plan au pilote. Jusqu’ici, l’analyse et la compilation d’une requête sont terminées. -
Exécuter le plan
Le pilote envoie le plan d’exécution au moteur d’exécution. -
Exécuter le travail
En interne, le processus d’exécution du travail est un travail MapReduce -
Opérations sur les métadonnées
Pendant ce temps, en cours d’exécution, le moteur d’exécution peut exécuter des opérations de métadonnées avec Metastore. -
Récupérer le résultat
Le moteur d’exécution reçoit les résultats de DataNodes. -
Envoyer les résultats
Le moteur d’exécution envoie ces valeurs résultantes au pilote. Le pilote envoie les résultats à Hive Interfaces et nous obtenons notre résultat.
Il existe différents types de table Hive
Table gérée
Également appelée table interne, une table gérée est la table par défaut, ce qui signifie qu’il n’est pas nécessaire de spécifier un mot clé lors de la création de cette table. Il est stocké dans un emplacement spécifique dans HDFS, qui est principalement «/ usr / hive / warehouse» (sauf configuration contraire). Si une table gérée est supprimée, les données sous-jacentes de la table dans HDFS sont également supprimées.
Elle est appelée table interne car elle est stockée dans l’emplacement «ruche / entrepôt».
Table externe
Une table externe est généralement créée lorsque les données stockées dans la table doivent être utilisées ou accessibles en dehors de Hive. Une table externe est créée en spécifiant le mot-clé « Externe » pour créer une requête de table. Chaque fois qu’une table externe est supprimée, seul le schéma de la table est supprimé pendant que les données sous-jacentes, c’est-à-dire le dossier HDFS, restent.
Que sont les partitions Hive?
En utilisant la clause «PARTITIONNÉ PAR», les colonnes de la table Hive peuvent être divisées en partitions spécifiques. Le partitionnement est un moyen de diviser un tableau en parties plus petites en fonction des valeurs correspondantes des colonnes spécifiées. Un nouveau dossier est créé dans HDFS dans le dossier de la table pour chaque partition créée.
Donc, disons que nous avons le tableau suivant
Ici, nous pouvons partitionner ce tableau selon l’une des colonnes données `ID`,` Name`, `Roll` ou` Subject`
Disons que nous partitionnons ce tableau par la colonne Sujet. Si c’est le cas, nous obtiendrons 2 partitions créées, car il n’y a que 2 valeurs uniques dans cette colonne particulière.
`Anglais`
`Maths`
La partition `English` aura 2 lignes stockées dedans, Rahul et Jason
La partition `Maths` contiendra 1 ligne.
Maintenant je comprends. Pourquoi partitionner? Cela ressemble à une simple clause GROUP BY. Vrai. Mais, group by fonctionne dans la clause SELECT, et cela ne modifie en rien le schéma de la table. Cependant, une partition divise littéralement la table dans le métastore ou à l’emplacement de la table. Trop confus?
Prenons l’exemple du tableau ci-dessus.
Disons que cette table a été stockée dans / usr / ruche / entrepôt / table1
Après le partitionnement, la table se divisera en nombre de partitions créées, dans ce cas, 2.
Ainsi, les données sous-jacentes de la table seront divisées en fonction de cela, comme
(Notez que Subject = Maths et Sujet = anglais sont des dossiers ici, pas des fichiers.)
Cool jusqu’à présent?
Génial!
Mais pourquoi partitionnons-nous? Quel est le but?
Eh bien, le partitionnement augmente la vitesse et l’efficacité des performances de requête lorsque quelqu’un souhaite interroger sur les colonnes partitionnées, car Hive doit désormais traiter un ensemble de données relativement plus petit.
Maintenant, il existe deux types de partitionnement dans Hive: Partitionnement statique et Partitionnement dynamique. Habituellement, le partitionnement statique est préférable car il permet de gagner du temps lors du chargement des données dans la table partitionnée. Vous créez explicitement des partitions dans la table lors de la création de la table dans le partitionnement statique. Mais dans le partitionnement dynamique, les données sont chargées dans la table de destination partitionnée à partir d’une table source non partitionnée.
Ne vous y trompez pas, nous allons regarder de plus près une fois que nous aurons mis la main sur les modules Hive.
Avez-vous entendu parler de Hive Buckets?
Parfois, même après le partitionnement des données pour effectuer une requête est toujours énorme, dans ce cas, la méthode de compartimentage Hive est utilisée. À l’aide de godets Hive, les partitions sont divisées en parties plus gérables.
La chose intéressante est que les compartiments peuvent également être créés sur une table non partitionnée.
Les compartiments de ruche sont créés à l’aide du CLUSTER PAR clause. contrairement au partitionnement, les parties regroupées seront créées comme des dossiers. Le regroupement aide à effectuer des requêtes sur la plus petite taille de données, ce qui peut être utile lors du débogage.
Tri dans la ruche
La table Hive est triée à l’aide de quatre clauses:
COMMANDÉ PAR
Son cas d’utilisation est le même qu’en SQL. Dans Hive, ORDER BY garantit un ordre total des données, mais pour cela, elles doivent être transmises à un seul réducteur, qui est normalement exigeant en performances et donc en mode strict, Hive rend obligatoire l’utilisation de LIMIT avec ORDER BY afin que le réducteur ne soit pas surchargé
TRIER PAR
Cette clause trie les données par réducteur, ce qui signifie que les données de chaque réducteur sont triées indépendamment des données présentes dans les autres réducteurs. Trier par ne fournit pas de commande totale. L’ordre de tri dépendra des types de colonnes. Si la colonne est de type numérique, l’ordre de tri est également dans l’ordre numérique. Si la colonne est de type chaîne, l’ordre de tri sera alors lexicographique.
DISTRIBUER PAR
Hive utilise les colonnes de Distribuer par pour répartir les lignes entre les réducteurs. Toutes les lignes avec les mêmes colonnes Distribuer par iront au même réducteur. Il garantit que chacun des N réducteurs obtient des plages non chevauchantes de la colonne, mais ne trie pas la sortie de chaque réducteur. Vous vous retrouvez avec N ou plusieurs fichiers non triés avec des plages qui ne se chevauchent pas.
CLUSTER BY
Cluster By est un raccourci pour Distribuer par et Trier par. « CLUSTER BY X»Garantit que chacun des N réducteurs obtient des plages sans chevauchement, puis les trie en fonction de ces plages au niveau des réducteurs.
SerDe
SerDe fait référence au sérialiseur et au désérialiseur. Il aide Hive à lire les données d’une table et à les réécrire sur HDFS dans n’importe quel format personnalisé. Il existe des SerDes intégrés et n’importe qui peut également créer son propre SerDes.
Cependant, ce sont des SerDes intégrés
- Avro (Hive 0.9.1 et versions ultérieures)
- ORC (Hive 0.11 et versions ultérieures)
- RegEx
- Épargne
- Parquet (Hive 0.13 et ultérieur)
- CSV (Hive 0.14 et versions ultérieures)
- JsonSerDe (Hive 0.12 et versions ultérieures dans hcatalog-core)
Ligne droite
C’est un produit nouvellement lancé de Hive et est utilisé comme moyen alternatif pour soumettre des requêtes Hive. Comme Hive CLI n’est pas compatible avec HiveServer2 mais uniquement avec son prédécesseur, HiveServer1, beeline a été introduite.
D’accord, d’accord, êtes-vous prêt pour une évaluation mineure?
Et avec cela, je conclus ce module, il s’agit d’une introduction de base de Hive, nous allons y jeter un coup d’œil beaucoup plus approfondi lorsque nous arriverons à la série Module 3.x, où nous traiterons complètement de Hive et de ses fonctionnalités avec l’aide de Hadoop.
J’espère que vous ne vous ennuyez pas, je comprends que la théorie est un peu glissante, j’aime personnellement me salir les mains avec le code et c’est comme ça que j’apprends, mais, il est crucial de comprendre les limites et les capacités de performance de ces technologies dans afin d’en tirer le meilleur parti.
Oh et comme toujours,
Ciao!