Guide des opérations de base pour Hadoop et Hive

Dans l'écosystème du Big Data, Hive constitue un entrepôt de données robuste permettant l'interrogation, l'analyse et la gestion des ensembles de données volumineux. Développé sur la plateforme Hadoop, il offre un langage de requête similaire au SQL, appelé HiveQL, pour interagir avec les données stockées dans le Hadoop Distributed File System (HDFS). Ce guide détaille le déploiement manuel de Hive 3.1.3, depuis le téléchargement jusqu'à la configuration, et aborde la mise en place d'une haute disponibilité (HA) pour garantir la stabilité dans un environnement en cluster.

Distinctions fondamentales entre Hive et les SGBD relationnels

  • Scénarios d'application divergents : Hive transforme les requêtes HiveQL en tâches MapReduce, ce qui induit une latence significative même pour de petites requêtes. Il est optimisé pour les analyses analytiques par lots sur des données massives.
  • Restrictions sur les opérations de données : Par défaut, Hive ne supporte pas les mises à jour ou suppressions directes, car il est conçu comme un entrepôt de données où les enregistrements sont généralement immuables.
  • Stratégie de chargement des données : En environnement de production, il est déconseillé d'utiliser des instructions INSERT répétées pour alimenter les tables Hive, car chaque INSERT génère une tâche MapReduce coûteuse en ressources.

Architecture de Hive

L'architecture de Hive comprend principalement un moteur de requêtes, un catalogue de métadonnées (métastore) et une interface d'accès aux données. Le métastore, souvent hébergé dans une base de données relationnelle comme MySQL, stocke les informations sur la structure des tables, tandis que les données brutes résident dans HDFS.

Installation de Hive 3.1.3

  1. Prérequis : Assurez-vous que JDK, Hadoop et MySQL sont déjà installés et opérationnels.
  2. Téléchargement et extraction : Récupérez le paquet apache-hive-3.1.3-bin.tar.gz, puis décompressez-le dans le répertoire /usr/local.
  3. Configuration des variables d'environnement : Définissez HIVE_HOME et mettez à jour le PATH pour inclure les binaires de Hive.
  4. Configuration du métastore : Créez le fichier hive-site.xml dans $HIVE_HOME/conf avec le contenu suivant (adaptez les paramètres de connexion MySQL) :
<?xml version="1.0" encoding="UTF-8" standalone="no"??>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"??>
<configuration>
  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.cj.jdbc.Driver</value>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://192.168.159.128:3306/hive_db?serverTimezone=UTC&characterEncoding=UTF-8&useSSL=false</value>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>admin</value>
  </property>
  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>SecurePass@2024</value>
  </property>
  <property>
    <name>datanucleus.schema.autoCreateAll</name>
    <value>true</value>
  </property>
  <property>
    <name>hive.metastore.schema.verification</name>
    <value>false</value>
  </property>
</configuration>
  1. Pilote MySQL : Copiez mysql-connector-java-8.0.15.jar dans $HIVE_HOME/lib.
  2. Ajustement des dépendances : Remplacez guava-19.0.jar par une version plus récente (ex. guava-27.0-jre.jar depuis $HADOOP_HOME).
  3. Préparation de la base de métadonnées : Dans MySQL, créez une base dédiée avec la commande : CREATE DATABASE hive_db CHARACTER SET utf8;
  4. Initialisation du schéma : Exécutez schematool -initSchema -dbType mysql une seule fois.
  5. Vérification : Lancez la commande hive pour confirmer l'installation réussie.

Création de bases de données dans Hive

La syntaxe pour créer une base de données est similaire à celle de MySQL. Par exemple, pour créer une base nommée demo_data : CREATE DATABASE demo_data;

Création de tables et chargement des données

Création de tables

Contrairement aux SGBD relationnels, Hive spécifie le format de stockage et le délimiteur. Exemple pour créer une table employes dans la base demo_data :

CREATE TABLE employes (
  nom_complet STRING,
  identifiant STRING,
  age INT
)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\n'
STORED AS TEXTFILE;

Il existe également des tables externes, dont la structure est indépendante du schéma Hive.

Chargement des données

Pour éviter les surcoûts liés aux tâches MapReduce, privilégiez la commande LOAD DATA pour importer des fichiers locaux :

LOAD DATA LOCAL INPATH '/chemin/vers/donnees.csv'
INTO TABLE employes;

Les métadonnées de la table (nom, colonnes) sont stockées dans la base MySQL configurée, tandis que les données physiques résident dans HDFS, par exemple sous le chemin /user/hive/warehouse/demo_data.db/employes.

Requêtes avec SELECT

Les opérations de requêtage s'apparentent à SQL. Considérons deux tables pour illustrer : véhicules (identifiant_vehicule, modele, date_insertion) et mesures_capteurs (identifiant_vehicule, horodatage, vitesse, kilometrage, niveau_batterie).

Sélection complète

Pour récupérer toutes les colonnes et lignes d'une table : SELECT * FROM mesures_capteurs;

Filtrage conditionnel

Utilisez WHERE avec des opérateurs logiques : SELECT * FROM mesures_capteurs WHERE identifiant_vehicule = 'VEC001' AND vitesse > 60;

Tri des résultats

Pour classer les données par ordre décroissant sur un champ : SELECT * FROM mesures_capteurs ORDER BY kilometrage DESC;

Agrégation avec GROUP BY

Calculez des statistiques groupées, comme la vitesse maximale par véhicule : SELECT identifiant_vehicule, MAX(vitesse) FROM mesures_capteurs GROUP BY identifiant_vehicule;

Jointures entre tables

Combinez des données provenant de plusieurs tables via INNER JOIN : SELECT v.identifiant_vehicule, m.vitesse FROM véhicules v INNER JOIN mesures_capteurs m ON v.identifiant_vehicule = m.identifiant_vehicule;

Étiquettes: Hadoop Hive HiveQL hdfs MySQL

Publié le 14 juillet à 04h41