← Retourner à la liste des articles
Image blog
Auteur

Par Maxime Jumelle

CTO & Co-Founder

Publié le 11 avr. 2023

Catégorie Data Engineering

Apache HBase : la base NoSQL sur Hadoop

Apache HBase est une base de données NoSQL distribuée et hautement évolutive, conçue pour stocker de grandes quantités de données structurées. Il est construit sur Apache Hadoop et fonctionne sur le système de fichiers distribué Hadoop (HDFS).

HBase est principalement utilisé pour stocker des données semi-structurées et non structurées telles que des données de journal, des données de capteurs, des données de médias sociaux et des données de télémétrie. Il est souvent utilisé pour des applications nécessitant une lecture et une écriture en temps réel, ainsi que pour des analyses en temps réel.

Présentation de HBase

HBase utilise un modèle de données similaire à BigTable, conçu par Google pour fournir un accès aléatoire et rapide à d'énormes quantités de données structurées. D'ailleurs, ce n'est pas un hasard : alors que Google annonçait BigTable en même temps que le papier de recherche qui expliquait le fonctionnement de ce dernier (qui est un produit commercial), la communauté open-source a décidé de créer son propre BigTable open-source. C'est ainsi que HBase est né.

En pratique, les cas d'usages de HBase sont variés : certains pourront l'utiliser uniquement à des fins de requêtes analytiques, d'autres pourront l'utiliser comme une base de données.

Architecture de HBase

Apache HBase utilise une architecture distribuée conçue pour stocker et gérer de grandes quantités de données sur des clusters de serveurs. On retrouve ainsi plusieurs composants dans cette architecture.

Infrastructure de cluster

Le cluster de serveurs est l'infrastructure sur laquelle HBase fonctionne. Il est composé de plusieurs nœuds, ou serveurs, qui hébergent les différentes composantes de HBase. Chaque nœud est configuré pour exécuter une ou plusieurs instances de HBase. Usuellement, ce cluster est provisionné et géré par Apache Hadoop, ce qui permet d'installer et configurer HBase directement dessus comme une application, au même titre que l'on aurait du Spark ou du Hive.


À lire aussi : découvrez notre formation Data Engineer


De ce fait, HBase utilise HDFS (Hadoop Distributed File System), le système de fichiers distribué de Hadoop pour le stockage des données. HBase stocke les données dans des fichiers HDFS appelés HFiles, qui sont distribués sur l'ensemble du cluster.

Enfin, ZooKeeper est un service de coordination de cluster, est également utilisé pour gérer les connexions entre les différents composants de HBase. Il fournit des fonctions de verrouillage et de synchronisation qui sont utilisées pour garantir que les opérations HBase sont effectuées de manière cohérente et fiable.

HMaster

HMaster est un service de gestion du cluster qui coordonne l'activité des nœuds de données. Il est responsable de la création et de la gestion des tables HBase, de la répartition des régions de données entre les nœuds de données, de la gestion des opérations de lecture/écriture sur les données et de la détection et de la récupération des pannes.

RegionServers

Les nœuds de données de HBase sont appelés les RegionServers. Chaque RegionServer gère un ou plusieurs fragments de tables appelés régions. Chaque région est stockée sur un seul nœud de données, ce qui garantit que toutes les opérations de lecture/écriture sur cette région sont exécutées sur un seul nœud.

Modèle de données HBase

Comme nous l'avons évoqué précédemment, HBase est une base orientée colonne. Elle est donc constitué de tables de données (au même titre qu'une base de données SQL). En revanche, les colonnes pourront êtres différentes en fonctions des lignes.

Famille de colonnes

Le modèle de données d'Apache HBase est un modèle de colonnes distribuées, également appelé modèle de colonnes larges. Ce modèle de données diffère du modèle de lignes et de colonnes des bases de données relationnelles traditionnelles.

Dans HBase, les données sont stockées dans des tables qui sont constituées de familles de colonnes. Chaque famille de colonnes peut contenir un nombre arbitraire de colonnes, qui peuvent être ajoutées ou supprimées de manière dynamique. Les colonnes sont identifiées par un nom, qui est une chaîne de caractères, et sont regroupées dans des familles de colonnes pour faciliter la gestion des données.

De manière analogue, les lignes dans HBase sont identifiées par une clé de ligne, qui est une chaîne de caractères unique. Les clés de ligne sont triées dans l'ordre lexicographique, ce qui permet à HBase d'effectuer des opérations de recherche efficaces sur les données. Les données dans une table HBase sont stockées dans des cellules, qui sont identifiées par la combinaison d'une clé de ligne, d'un identifiant de famille de colonnes et d'un nom de colonne.

Chaque cellule peut contenir une valeur, qui peut être de n'importe quel type de données, ainsi qu'un timestamp, qui indique le moment où la cellule a été modifiée pour la dernière fois. L'historique des modifications est conservé pour chaque cellule, ce qui permet à HBase de fournir une version de la cellule à un moment donné dans le temps.

Ainsi, voilà à quoi peut ressembler visuellement une table de données sous HBase.

Colonnes HBase

HBase Shell et API

Le HBase Shell est une interface en ligne de commande qui permet d'interagir avec une instance de HBase. Le HBase Shell est installé avec HBase et est accessible à partir de la ligne de commande de l'ordinateur.

C'est un outil utile et destiné aux administrateurs de HBase, car il permet de gérer les tables et les données de HBase de manière interactive à partir de la ligne de commande. Les utilisateurs peuvent utiliser le HBase Shell pour effectuer des tâches telles que la création et la suppression de tables, la modification des propriétés de table et l'ajout, la modification ou la suppression de données.

Le HBase Shell utilise un langage de script appelé HBase Shell Language pour interagir avec HBase. Le HBase Shell Language est un sous-ensemble de Java qui permet aux utilisateurs de HBase Shell d'exécuter des commandes en utilisant une syntaxe simple et concise.

Pour créer une table, il est nécessaire de spécifier une famille de colonnes à créer avec la table. Par exemple, nous pouvons imaginer stocker des informations sur l'identité d'utilisateurs (nom, prénom, emails, etc), chaque colonne comportant une information. Ainsi, toutes ces colonnes pourraient faire partie de la même famille de colonnes, intitulée infos.

create 'users', 'infos'
Created table users
Took 1.3729 seconds

=> Hbase::Table - users

Apache HBase offre plusieurs APIs pour interagir avec les données stockées dans HBase. Voici les principales APIs de HBase.

L'API Java HBase est la principale API de programmation pour HBase. Elle permet aux développeurs de créer des applications HBase en utilisant le langage de programmation Java. Cette API fournit des classes et des méthodes pour la création de tables, la mise à jour de données, la lecture de données et la gestion de transactions.

HBase propose également une API REST qui permet aux développeurs d'interagir avec HBase à l'aide de requêtes HTTP. Cette API fournit des opérations de CRUD (Create, Read, Update, Delete) pour les tables et les données de HBase.

Enfin, très utile pour les Data Engineers, Apache Spark peut aussi lire ou écrire sur des tables HBase. Cette HBase sur Spark fournit des méthodes pour la création de tables, la mise à jour de données, la lecture de données et la gestion de transactions.


À lire aussi : découvrez notre formation Data Engineer


À noter qu'il existe également l'API Thrift HBase. Il s'agit d'une API générique qui permet aux développeurs d'interagir avec HBase en utilisant une variété de langages de programmation, tels que Java, Python, Ruby, C++, etc. Cette API fournit également des opérations de CRUD pour les tables et les données de HBase.

Avantages et inconvénients de HBase

Apache HBase offre plusieurs avantages par rapport à de nombreuses solutions similaires sur le marché.

  • Évolutivité horizontale : HBase est conçu pour gérer de grandes quantités de données sur des clusters de serveurs, ce qui permet une évolutivité horizontale pour les applications Big Data.
  • Haute disponibilité : HBase prend en charge la réplication des données sur plusieurs nœuds, ce qui garantit une haute disponibilité en cas de défaillance d'un nœud.
  • Performances : HBase peut fournir des temps de réponse rapides pour les opérations de lecture/écriture sur de grandes quantités de données distribuées.
  • Transactions ACID : HBase prend en charge les transactions ACID pour garantir l'intégrité des données dans les opérations de lecture/écriture.
  • Modèle de données flexible : HBase offre un modèle de données de colonnes distribuées qui est flexible et évolutif pour stocker et gérer des données structurées, semi-structurées et non structurées.

À l'inverse, comme tout solution de stockage NoSQL, HBase présente également quelques inconvénients qui sont important à prendre en compte lors de la comparaison avec toutes les alternatives.

  • Complexité : La mise en place d'un cluster HBase peut être complexe et nécessiter des compétences en gestion de systèmes distribués.
  • Difficulté de requêtage : Les requêtes sur les données HBase peuvent être plus complexes que les requêtes sur les bases de données relationnelles.
  • Latence : HBase peut avoir des temps de latence plus élevés pour les opérations de mise à jour des données, car les données sont répliquées sur plusieurs nœuds.
  • Coût : HBase peut nécessiter des ressources matérielles importantes pour fournir une haute disponibilité et des performances élevées.
  • Taille minimale de cluster : HBase peut nécessiter un cluster de plusieurs nœuds pour fonctionner correctement, ce qui peut rendre son utilisation coûteuse pour les petites applications.

Quand peut-on utiliser HBase ?

Il y a de nombreux cas d'usages pour HBase dès lors qu'il est nécessaire de stocker des données non structurées ou semi-structurées à grande échelle. Il y a ainsi plusieurs cas d'utilisation courants pour HBase.

  • HBase est conçu pour fournir une haute disponibilité et une évolutivité horizontale pour les applications nécessitant une lecture/écriture en temps réel sur de grandes quantités de données. Il est souvent utilisé dans des applications telles que la surveillance en temps réel, l'analyse de données et la sécurité informatique.
  • En raison de son architecture distribuée, HBase peut fournir des temps de réponse rapides pour les applications nécessitant une récupération rapide de données, telles que les applications de recherche Web et de gestion de contenu.
  • HBase est souvent utilisé dans des applications Big Data nécessitant le stockage et la gestion de grandes quantités de données semi-structurées et non structurées. Il est souvent utilisé dans des applications nécessitant des analyses en temps réel de données massives, telles que l'analyse de données de capteurs et de médias sociaux.
  • HBase prend en charge les transactions ACID (Atomicité, Cohérence, Isolation, Durabilité) pour garantir l'intégrité des données dans les opérations de lecture/écriture. Il peut donc être utilisé dans des applications nécessitant une cohérence transactionnelle, telles que les transactions financières et les applications de commerce électronique.

En conclusion, HBase offre une évolutivité horizontale, une haute disponibilité, des performances élevées, un modèle de données flexible et des transactions ACID, mais il peut être complexe à configurer, avoir une latence plus élevée pour les mises à jour des données et nécessiter des ressources matérielles importantes. Ainsi, tout est une question de dosage et de besoins.

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