HBASE

HBase est un système de gestion de base de données non-relationnelles distribué, écrit en Java, disposant d’un stockage structuré pour les grandes tables.

HBase est inspirée des publications de Google sur BigTable. Comme BigTable, elle est une base de données orientée colonnes. Basées sur une architecture maître/esclave, les bases de données de ce type sont capables de gérer d’énormes quantités d’informations (plusieurs milliards de lignes par table)2.

HBase est un sous-projet d’Hadoop, un framework d’architecture distribuée. La base de données HBase s’installe généralement sur le système de fichiers HDFS d’Hadoop pour faciliter la distribution, même si ce n’est pas obligatoire.

L’essentiel de HBASE :

 

  • Lancer Hbase

 

  • Lancer Hbase en mode commande :
Commande :

Hbase shell

Résultat :

hbase(main):001:0>
  • Commandes générales HBASE

 

  • Lister le nombre de serveurs hbase utilisés
Commande :

hbase(main):001:0> statut

Résultat :

hbase(main):002:0> status

1 servers, 0 dead, 6.0000 average load
  • La version Hbase utilisée
Commande :

hbase(main):001:0> version

Résultat :

hbase(main):001:0> version

1.0.0-cdh5.5.0, rUnknown, Mon Nov  9 12:40:01 PST 2015
  • Avoir des informations sur l’utilisateur actuel
Commande :

hbase(main):001:0>

Résultat :

hbase(main):003:0> whoami

cloudera (auth:SIMPLE)

groups: cloudera, default
  • Commande help sous hbase pour connaitre toutes les commandes disponibles et leurs explications
Commande :

hbase(main):001:0> table_help

Résultat :

Hbase affiche toutes les commandes disponibles sous Hbase

 

  • Manipulation de tables sous HBASE
  • Lister les tables créées sous Hbase
Commande :

hbase(main):001:0> list

Résultat :

hbase(main):028:0> list

TABLE

0 row(s) in 0.0480 seconds




=> []
  • Créer une table Hbase : pour le faire, il faut créer donner le nom de table et la column family dans notre exemple est le nom de la table formation et la colonne family c’est le  type .
Commande :

hbase(main): hbase(main):029:0> create 'formation','type'

Résultat :

hbase(main):029:0> create 'formation','type'

0 row(s) in 0.9110 seconds




=> Hbase::Table - formation

hbase(main):030:0>

Si on vérifie avec la commande  list cela donne :

hbase(main):030:0> list

TABLE

formation

1 row(s) in 0.0280 seconds




=> ["formation"]

hbase(main):031:0>

Donc la table formation est bien créée.

  • Créer une deuxième table ayant comme nom tb_bigdata et la column family source comme suit :
Commande :

hbase(main):031:0> create 'tb_bigdata','source'

0 row(s) in 1.0180 seconds
=> Hbase::Table - tb_bigdata

hbase(main):032:0>

Vérification :

hbase(main):032:0> list

TABLE

formation

tb_bigdata

2 row(s) in 0.0540 seconds
=> ["formation", "tb_bigdata"]

La table tb_bigdata est bien créée

  • Supprimer une table HBASE. Avant de supprimer une table sous hbase il faut d’abord désactiver la table puis faire un drop comme suit :

Exemple : Suppression de la table formation Tout d’abord on vérifie son état si elle est activée ou désactivée avec les commandes is_disabled ( désactivée ) ou is_enabled ( activée )

Commande :

hbase(main): hbase(main):029:0> is_enabled 'formation'

Résultat :

hbase(main):039:0> is_enabled 'formation'

true

0 row(s) in 0.0630 seconds

Si on tente de la supprimer en l’état ( Activée ) comme suit :

hbase(main):040:0> drop 'formation'

Résultat :

hbase(main):040:0> drop 'formation'




ERROR: Table formation is enabled. Disable it first.'

Here is some help for this command: Drop the named table. Table must first be disabled:

hbase> drop 't1'

hbase> drop 'ns1:t1'

Donc il affiche simplement un message d’erreur en disant que la table soit désactivée avant suppression, donc : Etape 1 : désactivé la table comme suit :

hbase(main):045:0> disable 'formation'

0 row(s) in 1.4060 seconds

Vérifie son état avec la commande is_disabled :

hbase(main):001:0> is_disabled 'formation'

true

0 row(s) in 0.9240 seconds

Etape 2 : suppression de la table :

hbase(main):002:0> drop 'formation'

0 row(s) in 0.6770 seconds

Vérification avec la commande list pour voir si la table est bien supprimée :

hbase(main):003:0> list

TABLE

tb_bigdata

1 row(s) in 0.0240 seconds
  • Activer toutes les tables hbase commençant par un préfix commun exemple :

Nous disposons des tables suivantes sous HBASE

hbase(main):008:0> list

TABLE

tb_bigdata

tb_classe

tb_formation

3 row(s) in 0.0480 seconds

On constate qu’il y a 3 tables ayant un préfixe tb_ donc nous pouvons activer ces 3 tables comme suit :

hbase(main):013:0> enable_all 'tb.*'

tb_bigdata

tb_classe

tb_formation
Enable the above 3 tables (y/n)?

y

3 tables successfully enabled

’inverse est vrai c’est-à-dire :

  • Pour désactiver toutes les tables hbase commençant par un préfix commun par exemple :
hbase(main):014:0> disable_all 'tb.*'

tb_bigdata

tb_classe

tb_formation




Disable the above 3 tables (y/n)?

y

3 tables successfully disabled
  • L’existance d’une de tables sous HBASE
  • A l’inverse de la commande list, pour vérifier l’existance d’une table hbase :
Commande :

hbase(main):016:0> exists 'tb_classe'

Table tb_classe does exist

Une table qui n’existe pas :

hbase(main):017:0> exists 'toto'

Table toto does not exist
  • La description d’une de tables HBASE ( describe )

  Pour avoir la description d’une table hbase, il suffit de lancer la commande suivante :

Commande :

hbase(main):019:0> describe

Exemple : description de la table tb_bigdata hbase(main):019:0> describe ‘tb_bigdata’ Résultat :

hbase(main):019:0> describe 'tb_bigdata'

Table tb_bigdata is DISABLED

tb_bigdata

COLUMN FAMILIES DESCRIPTION

{NAME => 'source', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0', VERSIONS

=> '1', COMPRESSION => 'NONE', MIN_VERSIONS => '0', TTL => 'FOREVER', KEEP_DELETED_CELLS => 'FALSE', BLOCKS

IZE => '65536', IN_MEMORY => 'false', BLOCKCACHE => 'true'}

1 row(s) in 0.0920 seconds

Cette commande nous renvoie des informations concernant l’état de la table si elle est activée ou pas, le nom de la column family ‘source’ etc. Nous reviendrons à ce cette commande après insertion de données dans la table pour voir d’autres informations relatives aux données.

  • La modification d’une de tables HBASE ( alter )

 

  • Insérer les données dans une tables HBASE ( put )

Exemple :  table client ayant deux column family « information pro : poste  et ville  »  et une autre information prive «  telephone et salaire » Alimenté comme ceci : Table client :

Id Information pro Information prive
1 Ing Paris 06335544 4500
2 TS Cergy 076543030 1200
3 PHD Nantes 076540323 6000
           
  • Création de table
hbase(main):019:0> create 'client','information pro', 'information prive'

0 row(s) in 0.6130 seconds
=> Hbase::Table - client

2- Insertion des données dans Hbase : Insertion de la donnée ing de l’id 1, de la QF : information pro de : qualifier poste

hbase(main):022:0> put 'client', '1', 'information pro:poste','ing'

0 row(s) in 0.0240 seconds

2- Insertion des données dans Hbase : Insertion de la donnée paris de l’id 1, de la QF : information pro de : qualifier ville

hbase(main):024:0> put 'client', '1', 'information pro:ville','paris'

0 row(s) in 0.0240 seconds

2- Insertion des données dans Hbase : Insertion de la donnée 06335544de l’id 1, de la QF : information prive de : qualifier tel

hbase(main):025:0> put 'client', '1', 'information prive:tel','06335544'

0 row(s) in 0.0190 seconds

2- Insertion des données dans Hbase : Insertion de la donnée 4500 l’id 1, de la QF : information prive de : qualifier salaire

hbase(main):026:0> put 'client', '1', 'information prive:salaire','06335544'
  • row(s) in 0.0130 seconds

3-Pour voir la première ligne du tableau client :

hbase(main):027:0> scan 'client'

ROW                                 COLUMN+CELL

1                                  column=information prive:salaire, timestamp=1461109028583, value=4500

1                                  column=information prive:tel, timestamp=1461108916151, value=06335544

1                                  column=information pro:poste, timestamp=1461108616644, value=ing

1                                  column=information pro:ville, timestamp=1461108777696, value=paris

1 row(s) in 0.0610 seconds

Faire la même chose pour l’id 2 et l’id 3

  • Les versions dans Hbase

Hbase peut enregistrer n valeur pour la même clé, on appelle cela la VERSIONS ( déconseillé d’aller plus que 100 ), cette dernière on l’initie à la création de la table comme suit :

create 'Etudiant', {NAME =>'cf', VERSIONS => 4}

Cela signifie qu’on crée la table étudiant et la column family cf avec 4 versions pour la même valeur Exemple : On alimente la table Etudiant comme suit :

put 'Etudiant', 'row3', 'cf:c', 'value1'
put 'Etudiant', 'row3', 'cf:c', 'value2'




put 'Etudiant', 'row3', 'cf:c', 'value3'

Si on fait un simple scan : on constate que, que la dernière value est affichée

hbase(main):097:0> scan 'Etudiant'

ROW                                  COLUMN+CELL

row3                                column=cf:c, timestamp=1461111223262, value=value3

On revanche si on veut consulter toutes les valeurs de la clé row3 :

hbase(main):098:0> scan 'Etudiant' , { VERSIONS => 4}

Résultat :

hbase(main):098:0> scan 'Etudiant' , { VERSIONS => 4}

ROW                                  COLUMN+CELL

row3                                column=cf:c, timestamp=1461111223262, value=value3

row3                                column=cf:c, timestamp=1461111220557, value=value2

row3                                column=cf:c, timestamp=1461111216218, value=value1

1 row(s) in 0.0820 seconds

Newsletter

Retrouvez l’essentiel de l’actualité du Big Data directement par mail !

Les experts de Formation-BigData décortiquent chaque mois l’actualité, les dernières innovations.