Thursday, August 4, 2011

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)

No comments:

Post a Comment