HBase la base NoSQL de Hadoop : Concepts & Architecture

Dans l’écosystème Hadoop, le stockage des données se fait sur le système de fichier HDFS. L’accès à une donnée ponctuelle stockée dans un fichier, revient à faire un « full scan » sur tout le cluster ou du moins sur une partie. Une opération coûteuse en temps et en calcul.

Accéder à cette même donnée en temps réel ou presque, revient à structurer et indexer la données. La base de données NoSQL HBase vient pour répondre à cette problématique et bien d’autre. Elle permet un stockage distribué de pétaoctets de données sur un cluster de machines physiques.

1. Apache HBase

HBase est un système de stockage distribué de map(s) triées, développé au-dessus du système de fichier HDFS. Il permet un accès aléatoire en écriture/lecture en temps réel à un très grand ensemble de données.

HBase est une base NoSQL distribuée orienté colonne, horizontalement scalable et tolérante aux pannes où la charge de travail en terme de mémoire et de calcul (CPU) ainsi que le stockage est distribué sur toutes les machines du cluster HBase.

Les bases de données orientées colonnes, stockent de manière contigüe les valeurs de la même colonne sur disque. Une approche totalement différente des bases de données traditionnelles où le stockage se fait par ligne (les valeurs des différentes colonnes d’une ligne sont stockées d’une manière contigüe sur disque).

Ce type de base est plus adapté pas exemple aux bases analytiques, où les traitements associées sont sur quelques colonnes de la ligne et non sur tout la ligne. Cette approche réduit drastiquement les I/O et par conséquent les temps de réponse. De plus, ce type de sauvegarde est un bon candidat à la compression des données par le fait qu’ils sont de même type.

2. Concepts

La base de données HBase est régie par les concepts suivants :

  • Map : Le stockage se fait dans une map. Cette dernière est basée sur le principe de clé/valeur. Chaque valeur (tableau de bytes) est identifiée par une clé (tableau de bytes). L’accès à une valeur par sa clé est très rapide.
  • Map trié : La map est triée par ordre lexicographique. Cette fonctionnalité de tri est très importante car elle permet de récupérer les valeurs par intervalle de clés.
  • Multidimensionnel : La clé dans la map est une structure composée de row-key, column family, column, et d’un timestamp.
    (rowkey, column family, column, timestamp) ---> value
  • Null (Sparse) : Contrairement aux bases de données relationnelles, une colonne qui n’a pas de valeur n’est pas matérialisée (aucun stockage n’est nécessaire en cas d’une valeur null pour une colonne).
  • Persistance : Les données stockées dans  la map sont sauvegardées durablement sur disque.
  • Consistance : Toutes les modifications sont atomiques et les lectures se font toujours sur la dernière valeur validée (commit).
  • Système distribué : Le système de base de données est construit sur un systèmes de fichiers distribués afin que le stockage de fichiers sous-jacent soit réparti sur un ensemble de machines d’un cluster. Les données sont répliquées sur un certain nombre de nœuds permettant ainsi une tolérance aux pannes.

3. Le modèle de données

Le modèle se base sur six concepts, qui sont :

  • Table : dans HBase les données sont organisées dans des tables. Les noms de tables sont des chaînes de caractères.
  • Row : dans chaque table les données sont organisées dans des ligne. Une lignes est identifiée par une clé unique (RowKey). La Rowkeys n’a pas un type, elle est traité comme un tableau de d’octets.
  • Column Family : Les données au sein d’une ligne sont regroupées par column family. Chaque ligne de la table a les mêmes column family, qui peuvent être peuplées ou pas. Les column family sont définit à la création de la table dans HBase. Les noms des column family sont des chaines de caractères.
  • Column qualifier : L’accès aux données au sein d’une column family se fait via le column qualifier ou column. Ce dernier n’est pas spécifié à la création de la table mais plus tôt à l’insertion de la donnée. Comme les rowkeys, le column qualifier n’est pas typé, il est traité comme comme un tableau d’octets.
  • Cell : La combinaison du RowKey, de la Column Family ainsi que la Column qualifier identifie d’une manière unique une cellule. Les données stockées dans une cellule sont appelée les valeurs de cette cellule. Les valeurs n’ont pas de type, ils sont toujours considérés comme tableau d’octets.
  • Version : Les valeurs au sein d’une cellule sont versionnés. Les versions sont identifiés par leur timestamp (de type long). Le nombre de versions est configuré via la Column Family. Par défaut, ce nombre est égale à trois.

hbase-modele_donneesFigure 1. Vue synthétique du modèle de données dans HBase.

4. Architecture

HBase utilise HDFS pour stocker les données qu’elle gèrent. Comme le montre la figure 2, HBase utilise un ensemble d’algorithmes qui permettent une lecture/écriture aléatoire. Dans ce qui suit nous allons détailler les différents éléments de l’architecture de la base NoSQL HBase, ainsi que les algorithmes associés.

hbase-concept

Figure 2. Vue conceptuelle de la base données dans HBase.

4.1 Répartition de la données (partitionnement)

Dans HBase, la scalabilité et la répartition de charge est basé sur le principe de la répartition de charge. Chaque partition est une Région qui stocke d’une manière contigüe, un ensemble de lignes triées selon la rowkey. Chaque Région est héberge par un serveur physique.

Chaque Région est divisés dynamiquement par le système quand elle dépasse une certaine limite (figure 2). Ces mêmes Régions peuvent également être fusionnées pour des raison d’optimisation.

Chaque Region est identifiée par un rowkey minimum et un rowkey maximum. L’ensemble est trié par la rowkey et stocké sur disque selon se trié, d’une manière contigüe.

hbase-regionFigure 3. Répartition des données dans HBase.

4.2 Les composants de HBase

La figure 4, donne un aperçu sur les composants de l’architecture de HBase. Cette dernière est détaillé dans ce qui suit :

archi-hbase-01Figure 4. Anatomie de la base de données NoSQL HBase. 

4.2.1 RegionServer

Le RegionServer est le point d’entrée pour l’accès à la donnée. IL gère plusieurs processus et composants, et il expose plusieurs méthodes. Elles sont deux types :

  • Data (get, put, delete, next, etc.)
  • Region (splitRegion, compactRegion, etc.)

Un RegionServer contient un seul WAL, un BlockCache et plusieurs Régions.

4.2.1.1 BlockCache

Le BlockCache est un cache LRU. Il est activé par défaut pour toutes les tables, ce qui signifie que toute opération de lecture sont chargées dans le cache LRU.

4.2.1.2 Write Ahead Log (WAL)

Chaque ajoute ou mises à jour dans un RegionServer sont systématiquement écrit dans write-ahead log (WAL) en premier lieu. Avant d’être répliquer dans le MemStore. Ce mécanisme garantit la durabilité de la donnée en cas de défaillance du serveur. Le processus WAL écrit dans le fichier Hlog qui est placé dans HDFS. Pour chaque instance RegionServer il y a une instance de WAL.

4.2.1.3 Region

C’est l’élément de base dans le stockage et la distribution de la donnée dans HBase, dont l’implémentation est HRegion. Chaque Region gère un sous ensemble d’une table HBase (une partition). Une Region est composé de :

  • Store : Chaque partition d’une ColomnFamily est gérée par un store. HStore est l’implémentation d’un Store, il est compose de plusieurs StoreFiles et d’un MemStore.
  • MemStore : C’est un cache en mémoire. Il stocke toutes les écritures et les mises à jours relatives à une partition.
  • HFile : fichier physique sur le quel les données sont sauvegardées
Table
    └── Region
        └── Store
            ├── MemStore
            └── StoreFile
                └── Block

Une table est ségmentée en plusieurs partitions
Un RegionServer gère plusieurs Region
Une partition d'une table est gérée par une Region
Une Region contient plusieurs Store
Chaque Store gère une ColomnFamily d'une table
Un Store gère un MemStore et plusieurs StoreFile
Un StoreFile gère un fichier de stockage de la partition

4.2.2 Master Server

HMaster est l’implémentation du Master Server. Le Master Server est chargé de coordonner et de surveiller toutes les instances de RegionServer du cluster. Il en charge de la répétition des Region(s) sur les nœuds du cluster. Les changements dans les tables metadonnées passe par le serveur Master Server.

4.2.3 Zookeeper

Il surveille l’état du cluster et informe régulièrement le Master Server des différents états. De plus, il stocke les informations critiques du cluster, dont l’emplacement de la table système -ROOT-.

  • -ROOT- : contient la liste des tables .META. et leurs emplacement.
  • .META. : contient la liste des Region et leurs emplacement.

HBase_Zookeeper Figure 5. Gestion des métadonnées avec ZooKeeper.

5. Lecture/Écriture dans HBase

La lecture et l’écriture des données dans HBase passent par plusieurs étapes comme le montre la figure 6.

HBase_com

Figure 6. Interaction entre le client HBase et les différents composant du cluster HBase.

5.1 Récupération de la Region qui gère la partition

En premier lieu le client repère la Region qui est responsable de la partition souhaitée. Pour se faire, le client contacte ZooKeeper afin de récupérer la table -ROOT-. A partir de cette dernière une fois reçu, le client récupéré l’emplacement de la tables -META-. Cette dernière fournie au client la localisation de la Region qu’il cherche (figure 7).

client-request-workflowFigure 7. Localisation des tables systèmes.

5.2 Lecture

Le client HBase envoi directement une requête de type « get » au Server Region qui contient l’information souhaitée (figure 7).

5.3 Écriture

hbase-io-workflow

 Figure 8. Workflow d’écriture dans HBase.

Les données envoyées par le client Region Server sont stockées d’une manière temporaire dans le memstore. Les données du memstore sont triées et indexées d’une manière continue. L’indexation se fait via l’algorithme Log-Structured Merge Tree (LSM Tree).
Lorsque le memstore atteint un certain seuil, l’ensemble des données triées sont écrites dans un nouveau fichier HFile dans HDF
S.  Régulièrement ces nouveaux fichiers sont fusionnés comme le montre la figure 9.

HBase_merge

Figure 9. Fusion des fichiers HBase.

Bien que l’écriture des données dans le memestore est efficace mais néanmoins elle reste risqué. Afin de palier à ce risque que HBase commence par écrire les données dans le write-ahead log (WAL) avant de les stocker dans le memstore. Cette façon de faire, permet de récupérer les données en cas d’un dysfonctionnement dans le Region Server, à partir de la sauvegarde réalisées dans le WAL.

Une Region Server sert de nombreuses régions, mais ne dispose que d’un fichier WAL pour toutes ces Region(s) (figure 9). Comme le fichier WAL grossie avec le temps, arrivé à un certain seuil, il est fermé et archivé. L’archivage des fichiers est géré par un système de roulement.

wal-flow

Figure 9. schématisation des écritures dans HBase

5.4 Création d’une table dans HBase

HBase_table-createFigure 10. Création d’une table dans HBase

Comme le montre la figure 10, la création d’une nouvelle table dans HBase passe par une requête de création au niveau du Master Server, qui se charge d’ajouter une nouvelle entrée dans la table .META..

Référence
  1. Bigtable: A Distributed Storage System for Structured Data, Fay Chang, Jeffrey Dean, Sanjay Ghemawat, Wilson C. Hsieh, Deborah A. Wallach, Mike Burrows, Tushar Chandra, Andrew Fikes, Robert E. Gruber (Google, Inc) , 2006 OSDI
  2. HBase: The Definitive Guide,  Lars George, 2011 O’Reilly
  3. HBase in Action, NICK DIMIDUK, AMANDEEP KHURANA, 2013 Manning Publications
  4. HBase Administration Cookbook, Yifeng Jiang, 2012 Packt Publishing
  5. http://hbase.apache.org/book/

  6. Tutorial: HBase Theory and Practice of a Distributed Data Store Pietro Michiardi, Eurecom

  7. Apache HBase For Architects, Nick Dimiduk, HBase Seattle Technical Forum, 2013-05-15
  8. Building applications with HBase, Amandeep Khurana, Matteo Bertozzi, October 2012 Cloudera
  9. Introduction to HBase, Michael Stack, Jonathan Gray, 2010 Devoxx

Une réflexion au sujet de « HBase la base NoSQL de Hadoop : Concepts & Architecture »

  1. bonjour
    s’il vous plaît on a un projet scolaire compilation qui consiste à créer un pseudo hbase. et le prof nous a demandé de chercher la grammaire du language de hbase mais on a pas trouver. est ce que on peut la trouver sur internet

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *


8 × = 72

Vous pouvez utiliser ces balises et attributs HTML : <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>