Skip to main content

Glossaire à l'usage de ceux qui découvrent HBase

Avant-propos : à l'origine ce glossaire était destiné à consigner pour mon propre usage les définitions et les fonctions des différents éléments qui constituent la base de donnée NoSQL HBase. Il peut s'agir aussi bien de simples clarifications sur la sémantique comme de précisions beaucoup plus techniques sur le rôle joué par certains éléments. Il n'est pas exhaustif et est amené à être mis à jour au fil des évolutions de HBase.

BloomFilter
Filtre permettant d'exclure d'une recherche les FileStore d'une Region. Utilisé par exemple lorsque que l'on cherche la valeur associée à une clé, et que les données de cette clé sont potentiellement éclatées sur le MemStore et/ou plusieurs FileStore. Un BloomFilter permet alors de ne pas avoir à parcourir tous les FileStore présents dans la Region.

Column
Dans HBase la notion de colonne n'a pas réellement de sens.  Le modèle de gestion des données de HBase repose sur une notion de couple {clé, valeur}. Dans HBase le nom de la colonne peut être vue comme la clé (en partie, voir la définition d'une Table). Il n'y a en interne aucune notion de colonne telle que l'on peut l'entendre dans une base de donnée relationnelle. Le terme a surement été conservé pour donner un (mauvais) point de comparaison.

Colum Family
Groupe de colonnes. Physiquement si des colonnes appartiennent à une même famille alors elles seront stockées dans une même Region. A noter : HBase gère pour le moment assez mal un trop grand nombre de famille de colonnes. Par contre une famille de colonne peut gérer un très grand nombre de colonne.

Compaction (Minor)
Concaténation d'une partie des FileStores. HBase utilise un algorithme qui va privilégier les fichiers volumineux en concaténant des petits fichiers.

Compaction(Major)
Concaténation de tous les FileStores. Généralement exécuté une fois par jour (c.f. paramètre hbase.hregion.majorcompaction), une bonne pratique consiste à la forcer "manuellement" lors de moments de faible activité (voir la commande shell major_compact 'MYTABLE')

Coprocessor
API permettant d'écrire des programmes pouvant être appliqués à une Region et exécutés directement sur un RegionServer. Exemples d'utilisation : peut être utilisé pour construire des indexes secondaires sur les données ou contrôler finement l'accès à certaines partie la base de donnée.

FileStore
Fichier au format HFile qui stocke tout ou partie des données d'une Region.
Flush
Opération qui consiste à stocker dans un FileStore le contenu d'un MemStore. Par défaut cette sérialisation est demandée :
  • si un MemStore dépasse les 64Mo (c.f. HTableDescriptor.DEFAULT_MEMSTORE_FLUSH_SIZE)
  • si l'ensemble des MemStores d'un RegionServer occupent 35% du Heap (modifiable via le paramètre hbase.regionserver.global.memstore.lowerLimit). Au delà de 40% (paramètre hbase.regionserver.global.memstore.upperLimit) la sérialisation est forcé et les mises à jour sont bloquées.
HFile
Format de fichier utilisé par HBase pour stocker les données sur le système de fichier (voir HDFS). 

HDFS
Système de fichier massivement distribué développé dans le cadre du projet Hadoop. HDFS est généralement utilisé par HBase pour stocker les données. Il existe cependant des adaptateurs pour le service Amazon S3. HBase tire ainsi profit des fonctionnalités de HDFS comme la duplication des données et la possibilité d'effectuer sur ces dernières des traitements complexes de manière distribuée, rapide et fiable.

MapReduce
Framework du projet Hadoop permettant le traitement de donnée. HBase peut en tirer nativement profit afin de traiter les données.

MemStore
Structure mémoire qui conserve les dernières modifications effectués dans une Region. Lorsqu'un MemStore atteint une certaine taille il est "flushé" dans un FileStore.

MemStoreLAB (ou MSLAB)
Zone mémoire contiguë (de fait garantie d'être non fragmentée) , d'une taille 2Mo allouée dans la JVM dans laquelle un RegionServer va stocker les données d'un MemStore. Le but est d'éviter une fragmentation mémoire lors de la sérialisation des données (flush) du MemStore vers HDFS et du passage du Garbage Collector.

MasterServer
Serveur dont le rôle est de gérer l'assignation des Regions auprès des RegionServers. Il ne peut y avoir qu'un seul MasterServer en fonction à un instant donné mais un MasterServer de secours peut être déployé pour assurer une continuité de service automatiquement en cas de défaillance du premier.

Region : Rassemble tout ou partie des données d'une Column Family pour une Table. Dans une Region les données sont ordonnées par rapport à la clé, par défaut c'est l'ordre lexicographique qui est utilisé. Une Region rassemble les données d'un couple (Table, Column Family) d'une clé de départ à une clé de fin. (voir Split)

Region Server
Serveur en charge de la gestion d'une ou plusieurs Region

Split
Action qui consiste à diviser une région. Par défaut une Region ne peut excéder 256MB (paramétrable via hbase.hregion.max.filesize)

Table
Structure de donnée qui a un triplet {Key, Column, Timestamp} associe une valeur. Dans HBase les valeurs ne sont pas typées, tout est codé en interne comme un tableau d'octets (byte[]). HBase propose une classe "utilitaire" Bytes qui permet de convertir les types les plus courants.

Timestamp
Pour une clé et une colonne données HBase conserve plusieurs versions de la donnée, le Timestamp permet de distinguer les différentes versions. Par défaut HBase conserve 3 versions, ce paramètre est défini à la création de la Column Family.

TTL (ou Time To Live)
A chaque valeur est attribué une durée de vie. Ce paramètre, tout comme le nombre de versions conservées est définie au niveau de la ColumnFamily. Les données obsolètes sont supprimées lors des MajorCompactions.

WAL (Write Ahead Log)
Journal traçant les modifications apportées à une Region. C'est seulement une fois la modification enregistrée dans celui ci qu'elle est chargée en mémoire dans le MemStore. Le WAL peut être vu comme un point de reprise en cas d'arrêt brutal du RegionServer. Tout comme les autres fichiers qui contiennent des données le WAL est un fichier stocké sur HDFS ce qui permet à un RegionServer d'être secouru par d'autres RegionServer en cas de problème.


Zookeeper
Système de synchronisation massivement distribué du projet Hadoop. Il permet aux différents membres du cluster HBase de se synchroniser (e.g. élection d'un leader)

Comments

Popular posts from this blog

Orientée colonnes ?

Les bases NoSQL sont arrivées avec leur cortège de nouveautés et pour certaines d'entre elles une notion héritée de BigTable : celle de base de donnée orientée colonne. Cependant faire le lien entre l'article de Wikipedia et comprendre ce que permet réellement un base de donnée comme HBase n'est pas une chose évidente. En effet le simple fait de définir cette notion ne suffit pas toujours a bien comprendre quels sont les principes de conception du monde SQL qui peuvent être oubliés et ceux qui doivent être appris. Colonne or not colonne ? Prenons un modèle très simple de donnée et essayons de le transposer dans un modèle "orienté colonne": Comme on peut le voir on est passé d'un modèle à 2 dimensions (ligne x colonne) vers un modèle où une valeur est accédée au travers de 2  coordonnées qui sont ici (ligne, colonne) Cette notion de coordonnées est  importante  (c'est pour ça que je la met en gras 2 fois de suite) si l'on veut c

Row Count : HBase Aggregation example

With the coprocessors HBase 0.92 introduces a new way to process data directly on a region server. As a user this is definitively a very exciting feature : now you can easily define your own distributed data services. This post is not intended to help you how to define them (i highly recommend you to watch this presentation if you want to do so) but to quickly presents the new aggregation service shipped with HBase 0.92 that is built upon the endpoint coprocessor framework. 1. Enable AggregationClient coprocessor You have two choices : You can enable aggregation coprocessor on all your tables by adding the following lines to hbase-site.xml : <property> <name>hbase.coprocessor.user.region.classes</name> <value>org.apache.hadoop.hbase.coprocessor.AggregateImplementation</value> </property> or ...you can enable coprocessor only on a table throught the HBase shell : 1. disable the table hbase> disable ' mytable ' 2.

HBase + Subversion + Eclipse + Windows

HBase + Subversion + Eclipse + Windows (it should be easy to adapt for Linux) Update : please note that since HBase-4336 / HBase 0.96 the source tree is split in more than one Maven module this post is no more relevant, i have created a new post on this subject : http://michaelmorello.blogspot.fr/2012/06/hbase-096-eclipse-maven.html This is a simple setup in order to play with the source code of HBase under Microsoft Windows. Since HBase use some Unix specific commands like chmod the only requirements here are  Cygwin and a working Maven 3 environment. (It is obvious that you need Java and Eclipse , but you DON'T need anything else like the Eclipse Maven plugin or any SSH configuration) 1. Checkout the source code The first step is to check out the source code from the Subversion repository. I did it under my cygwin home repository. In this example i want to play with the 0.90 branch : svn co http://svn.apache.org/repos/asf/hbase/branches/0.90/ hbase-0.90