SlideShare une entreprise Scribd logo
1  sur  52
Télécharger pour lire hors ligne
HMIN313 : 2`eme Cours
Les bases de donn´ees orient´ees colonnes
HBase
Hatim CHAHDI
UMR Espace-DEV
Universit´e de Montpellier
28 Septembre 2016
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 1 / 47
Objectifs du cours
Comprendre la probl´ematique de stockage de donn´ees
´Etude approfondie des bases de donn´ees orient´ees colonnes
Pr´esentation de HBase comme exemple d’une BD orient´ee colonnes
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 2 / 47
Rappels : No-SQL, des alternatives !
Des besoins diff´erents. Des structures de
stockage diff´erentes
Les diff´erents types des SGBD No-SQL:
Cl´e/Valeur
Colonne
Document
Graphe
No-SQL = Not Only SQL
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 3 / 47
Base de donn´ees orient´ee Cl´e/Valeur
Principes: Repr´esentation des donn´ees sous forme de cl´e/valeur .
Les valeurs peuvent ˆetre de simple chaˆınes de caract`eres ou des objets
s´erialis´es complexes.
Utilisation: d´epˆot de donn´ees avec besoins de requˆetage simples
(pr´ef´erences d’utilisateur, donn´ees de panier, les logs . . . )
Figure : mod`ele cl´e/valeur
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 4 / 47
Base de donn´ees orient´ee Cl´e/Valeur
Principes: Repr´esentation des donn´ees sous forme de cl´e/valeur .
Les valeurs peuvent ˆetre de simple chaˆınes de caract`eres ou des objets
s´erialis´es complexes.
Utilisation: d´epˆot de donn´ees avec besoins de requˆetage simples
(pr´ef´erences d’utilisateur, donn´ees de panier, les logs . . . )
Figure : mod`ele cl´e/valeur
Exploitation bas´ee sur 4
op´erations (CRUD): Acc`es par
la cl´e
Create: Cr´eation d’un objet.
Read: Lecture d’un objet.
Update: Mise `a jour d’un
objet.
Delete: Suppression un objet.
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 4 / 47
Base de donn´ees orient´ee document
Principes: C’est une variante des SGBD cl´e/valeur, o`u la valeur est
un document de type XML ou JSON.
Les documents ont une structure arborescente, ils sont compos´es de
champs et des valeurs associ´ees
Ce type de SGBD permet d’effectuer des requˆetes sur le contenu des
documents.
Utilisation: Enregistrements d’´ev´enements, gestion de contenu . . .
Figure : mod`ele document
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 5 / 47
Base de donn´ees orient´ee document
Principes: C’est une variante des SGBD cl´e/valeur, o`u la valeur est
un document de type XML ou JSON.
Les documents ont une structure arborescente, ils sont compos´es de
champs et des valeurs associ´ees
Ce type de SGBD permet d’effectuer des requˆetes sur le contenu des
documents.
Utilisation: Enregistrements d’´ev´enements, gestion de contenu . . .
Figure : mod`ele document
Impl´ementations connues
CouchDB (fondation
apache)
MangoDB
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 5 / 47
Base de donn´ees orient´ee graphe
Principes
Les donn´ees sont repr´esent´ees sous-forme de graphe : Des noeuds pour
les entit´es, des arcs pour les relations entre les entit´es
Ce type de SGBD est adapt´e `a la manipulation de donn´ees fortement
connect´ees
Utilisation: Syst`emes de recommandations, R´eseaux sociaux,
Syst`emes de transport . . .
Figure : mod`ele graphe
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 6 / 47
Base de donn´ees orient´ee graphe
Principes
Les donn´ees sont repr´esent´ees sous-forme de graphe : Des noeuds pour
les entit´es, des arcs pour les relations entre les entit´es
Ce type de SGBD est adapt´e `a la manipulation de donn´ees fortement
connect´ees
Utilisation: Syst`emes de recommandations, R´eseaux sociaux,
Syst`emes de transport . . .
Figure : mod`ele graphe
Impl´ementations connues
Neo4J
AllegroGraph
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 6 / 47
Base de donn´ees orient´ee colonnes
Principes: Proche du relationnel. Mais le stockage des donn´es se fait
par colonne et non par ligne.
Ajout de colonnes facile et dynamique
Possibilit´e de compression des donn´ees
Utilisation: Optimisation de la recherche, traitement et analyse de
donn´ees structur´ees (BI) . . .
Figure : mod`ele colonne
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 7 / 47
Base de donn´ees orient´ee colonnes
Principes: Proche du relationnel. Mais le stockage des donn´es se fait
par colonne et non par ligne.
Ajout de colonnes facile et dynamique
Possibilit´e de compression des donn´ees
Utilisation: Optimisation de la recherche, traitement et analyse de
donn´ees structur´ees (BI) . . .
Figure : mod`ele colonne
Impl´ementation `a ´etudier dans
ce cours
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 7 / 47
Caract´erisation des syst`emes No-SQL: CAP
Consistency, Availability, Partition tolerance
Consistency ou coh´erence des donn´ees : toute modification de
donn´ee est suivie d’effet pour tous les noeuds du syst`eme
Availability ou disponibilit´e des donn´ees : toute requˆete ´emise et
trait´ee par un noeud du syst`eme, re¸coit une r´eponse (mˆeme en
situation d’´echec `a produire une r´eponse)
Partition tolerance ou recouvrement des noeuds assurer une
continuit´e du fonctionnement en cas d’ajout/suppression de noeud
(ou partition) du syst`eme distribu´e
Constat de Brewer : aucun des syst`emes distribu´es n’est `a mˆeme de
satisfaire en mˆeme temps les principes C, A et P
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 8 / 47
Th´eor`eme CAP : un choix `a faire !
Un syst`eme distribu´e va satisfaire deux des trois points CAP
Consid´erations SGBDR / Syst`emes NoSQL
SGBDR : Coh´erence et haute disponibilit´e (pas ou peu de P : de
diff´erents noeuds syst`eme)
Syst`emes NoSQL : Choix du P (syst`eme naturellement distribu´e) et
s´election soit du C, soit du A
abandon du A ⇐ Accepte d’attendre que les donn´ees soient coh´erentes
abandon du C ⇐ Accepte de recevoir des donn´ees parfois incoh´erentes
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 9 / 47
Exemple d’impl´ementations adopt´ees par des syst`emes
No-SQL
Table : Quelques syst`emes et leurs modes de repr´esentation
Nom Type Cat´egorisation CAP
CouchDB Document AP
MongoDB Document CP
Neo4j Graph CA
Hbase Column CP
Cassandra Column AP
Riak Key-Value CP
Project Voldemort Key-Value AP
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 10 / 47
Exemple d’applications existantes
Nom de l’entreprise Syst`eme No-SQL Type
Google BigTable, LevelDB Column
LinkedIn Voldemort Key-Value
Facebook Cassandra Column
Twitter Hadoop/Hbase, Cassandra Column
Netflix SimpleDB, Hadoop/HBase, Cassandra Column
CERN CouchDB Document
Amazon Dynamo Key-Value
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 11 / 47
Les Bases de Donn´ees orient´ees
Colonnes
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 12 / 47
Syst`emes No-SQL `a colonnes
Confusion possible : le mod`ele physique est `a colonnes mais pas le mod`ele
de donn´ees
paradigmes cl´e/valeur avec ”cl´e d’adressage” composite
Colonne : triplet : adresse de colonne / valeur de colonne /
estampille (g´erer les versions et les conflits)
Famille de colonnes : regrouper les colonnes qui sont partag´ees par
un ensemble d’individus
Familles de super colonnes : extension du mod`ele avec la notion de
”super colonnes” qui sont des collections de colonnes (poser des index
`a diff´erents niveaux)
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 13 / 47
Syst`emes No-SQL `a colonnes
Illustration colonnes (qualifier)
...
...
...
row_key_x
...
...
...timestamp_1
column_name_n
column_value_n
column_name_1
column_value_1
timestamp_n
row_key_x => {
column_name_1: column_value_1,
...
column_name_n: column_value_n,
}
Figure : Vision g´en´erale
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 14 / 47
Syst`emes No-SQL `a colonnes
Illustration colonnes et ”taille” variable d’un tuple
PatientCode Firstname
1256953732
LastName
1256953732
Marie Martin
PatientCode
B_A_0001
1256953732
Firstname
Jean
1256953732
LastName
Dupont
1256953732
Address
Montpellier
1256953732
B_A_0001
B_A_0002 B_A_0002
1256953732
Function
Commercial
1256953732 1256953732
OfficeNumber
17−03
Figure : Exemple de deux tuples d’une famille
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 15 / 47
Syst`emes No-SQL `a colonnes
´Ecriture inspir´ee de la notation JSON
B A 0001 => {
G a l I n f o s : PatientCode :” B A 0001 ” ,
G a l I n f o s : Firstname : ”Jean ” ,
G a l I n f o s : LastName : ”Dupont ” ,
G a l I n f o s : Address : ” M on t p e l l i e r ” ,
A l l e r g y I n f o s : Sneezing : ” mild ” ,
A l l e r g y I n f o s : I t c h y T r oa t : ” s e v e r e ” ,
A l l e r g y I n f o s : Snuffy Nose : ”moderate ” ,
A l l e r g y I n f o s : Watery Eyes : ” mild ” ,
A l l e r g y I n f o s : Itchy Nose : ” s e v e r e ”
}
Listing 1: Un tuple
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 16 / 47
Syst`emes No-SQL `a colonnes
Illustration famille de colonnes
PatientCode
B_A_0001
1256953732
Firstname
Jean
1256953732
LastName
Dupont
1256953732
Address
Montpellier
1256953732
B_A_0001
CF:Gal_Infos
CF:Allergy_Infos
B_A_0001
Sneezing
mild
1256953666
severe
Itchy_Troat
1256953666
Snuffy_Nose
moderate
1256953666
Watery_Eyes
mild
1256953666
Itchy_Nose
severe
1256953666
Figure : Exemple de deux familles de colonnes
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 17 / 47
HBase et Cassandra
Deux solutions populaires inspir´ees largement de Google BigTable(1)
Cassandra
Hbase
(1) BigTable - A distributed storage system for distributed data - Chang et
al, 2006
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 18 / 47
HBase
Distribu´e, privil´egie la coh´erence et la disponibilit´e des donn´ees sans oublier
les performances
S’appuie sur Hadoop ( Apache) qui facilite le traitement distribu´e de
larges jeux de donn´ees et ses composants
Hadoop Core =
HDFS pour le stockage
MasterServer : namenode (mode master/slave)
RegionServer : datanode
Zookeeper : infrastructure centralis´ee et services pour g´erer un
”cluster” de serveurs : parmi les activit´es : synchronization, choix du
serveur maˆıtre et v´erification de la disponibilit´e des serveurs
MapReduce : mod`ele de programmation distribu´ee
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 19 / 47
Architecture de HBase
Figure : Vision g´en´erale
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 20 / 47
Structurellement parlant :
Unit´e de base : table (keyspace) fragment´ee en parties ´egales = r´egions
(intervalles de valeurs de cl´es)
Tables tri´ees sur la valeur de la cl´e
Familles : nombre quelconque de colonnes
Colonne (qualifier) : dont les valeurs peuvent ˆetre en nombre
quelconque de versions (horodatage)
(table, row, column family, column qualifier, timestamp) -> value (la
valeur de la donn´ee est stock´ee avec l’ensemble de ses coordonn´ees)
`a noter : pas de super colonne avec HBase
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 21 / 47
Organisation de la donn´ee
Figure : Organisation sous-jacente `a tout tuple
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 22 / 47
Aspects internes `a l’architecture de Hbase
Structures mises en jeu
1 familles de colonnes (CF) dont les colonnes sont stock´ees dans les
mˆemes fichiers bas niveau = HFile
2 une table est associ´ee `a une ou `a plusieurs r´egions (partition de
valeurs) selon les besoins en mati`ere de place
3 HStore : une zone tampon par r´egion associ´ee `a une table :
4 MemStore : une m´emoire assign´ee au tri des tuples et `a l’´ecriture
s´equentielle du flux de donn´ees dans les fichiers de donn´ees (HFile) -
Sort & Flush
5 CachingBlock : tampon de donn´ees en m´emoire vive
6 HFile : 1 `a plusieurs fichiers de donn´ees par r´egion
7 HLog : 1 fichier journal par RegionServer
8 Block : unit´e d’´echange entre les m´emoires vive et de masse (64 Ko `a
l’ordinaire)
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 23 / 47
Orchestration de diff´erents composants
HFile
1
1
stores
1
LogFile (WAL)
RegionServerRegion
CachingBlock
HStore
Column
+ name : byte[]
+ value : byte[]
+ time : timestamp
Table
+ name : string
locatedOn
1*
*
1..*1
associatedTo
1
1
MemStore
ColumnFamily
+ name : byte[]
Figure : Diagramme de classes : structures internes
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 24 / 47
Orchestration de diff´erents composants
Figure : Extrait de HBase internals and schema design presentation
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 25 / 47
M´ecanisme de reprise
Figure : Ecriture dans fichier journal pour restauration ´eventuelle
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 26 / 47
Fichiers de donn´ees
Structure d’index : Log Structured Merge (LSM) Tree optimis´ee pour les
acc`es s´equentiels
Figure : Ordonnancement des valeurs des colonnes sur la base de la cl´e du tuple
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 27 / 47
Page d’accueil (WebApp)
Figure : Tables du m´etasch´ema : .META. (infos sur toutes les r´egions) et
-ROOT- (localisation .META.)
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 28 / 47
Acc`es et traitement des donn´ees
Acc`es plus imp´eratif que d´eclaratif
1 pas de langage DSL `a l’exemple de SQL pour requˆeter les donn´ees
2 acc`es imperatif au travers d’API clientes : Java mais recours possible
`a d’autres langages JRuby, Clojure, Scala, Jython, . . .
3 notion de coprocessor (proc´edure stock´ee) pour traiter directement
les donn´ees au niveau d’un noeud de donn´ees (RegionServer)
4 compl´ementarit´e avec le framework MapReduce qui fournit des
wrappers pour convertir les tables en collection de paires cl´e/valeur en
entr´ee comme en sortie de diverses tˆaches d’analyse
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 29 / 47
En pratique
Clients HBase
API Java
Shell HBase (JRuby)
Clients non-java
serveurs Thrifts (Ruby, C++, Erlang, . . . )
serveurs Rest (Stargate)
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 30 / 47
Construire une table et deux familles de colonnes avec
JRuby
c r e a t e ’ v i l l e ’ , ’ iG ’ , ’ ip10 ’
put ’ v i l l e ’ , ’01024 ’ , ’ iG : codeInsee ’ , ’01024 ’
put ’ v i l l e ’ , ’01024 ’ , ’ iG : nom ’ , ’ Attignat ’
put ’ v i l l e ’ , ’01024 ’ , ’ iG : popMun ’ , ’2850 ’
put ’ v i l l e ’ , ’34172 ’ , ’ iG : codeInsee ’ , ’34172 ’
put ’ v i l l e ’ , ’34172 ’ , ’ iG : nom ’ , ’ Montpellier ’
scan ’ v i l l e ’
ROW COLUMN+CELL
01024 column=iG : codeInsee , timestamp =1354564480805 ,
value =01024
01024 column=iG : nom , timestamp =1354564480902 ,
value=Attignat
. . .
Listing 2: shell JRuby
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 31 / 47
Exemples API Java
Op´erations ´el´ementaires
1 op´erations sur une table : create, scan, disable, drop
2 op´erations sur un tuple : put, delete, get
3 notions de filtre `a partir du parcours des tuples d’une table
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 32 / 47
Cr´eation - Insertion (create, put)
C on f i gu r a t i on hc = HBaseConfiguration . c r e a t e ( ) ;
HTableDescriptor ht = new HTableDescriptor ( ” p a t i e n t ”
ht . addFamily ( new HColumnDescriptor ( ” a l l e r g y ” ) ) ;
Put p i e r r e P u t = new Put ( new S t r i n g (” P M 001 ”) .
getBytes ( ) ) ;
p i e r r e P u t . add (new S t r i n g (” a l l e r g y ”) . getBytes ( ) ,
new S t r i n g (” sneezing ”) . getBytes ( ) ,
new S t r i n g (” mild ”) . getBytes ( ) ) ;
HBaseAdmin hba = new HBaseAdmin( hc ) ;
System . out . p r i n t l n ( ” c r e a t i n g t a b l e . . . p a t i e n t ” ) ;
hba . createTable ( ht ) ;
HTable t a b l e = new HTable ( hc , ” p a t i e n t ”) ;
System . out . p r i n t l n ( ” c r e a t i n g row . . . P i e r r e ” ) ;
t a b l e . put ( p i e r r e P u t ) ;
Listing 3: table Patient et un tuple Pierre
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 33 / 47
Affichage du contenu d’une table (scan)
C on f i gu r a t i on conf = HBaseConfiguration . c r e a t e ( ) ;
HTable t a b l e = new HTable ( conf , ” personne ”) ;
byte [ ] ge n e r a l = Bytes . toBytes (” ge n e r a l ”) ;
byte [ ] nom = Bytes . toBytes (”nom ”) ;
Scan scan = new Scan ( ) ;
scan . addColumn ( general , nom ) ;
ResultScanner scanner = t a b l e . getScanner ( scan ) ;
f o r ( Result r e s u l t = scanner . next ( ) ;
( r e s u l t != n u l l ) ;
r e s u l t = scanner . next ( ) ) {
f o r ( KeyValue keyValue : r e s u l t . l i s t ( ) ) {
System . out . p r i n t l n (” Q u a l i f i e r : ” + keyValue
” : Value : ” + Bytes . t oS t r i n g ( keyValue . getV
} }}}
Listing 4: Scan sur colonne
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 34 / 47
Filtre : patients ˆag´es d’au moins 26 ans
C on f i gu r a t i on conf = HBaseConfiguration . c r e a t e ( ) ;
HTable t a b l e = new HTable ( conf , ” p a t i e n t ”) ;
List <F i l t e r > f i l t e r s = new ArrayList <F i l t e r >();
F i l t e r f a m F i l t e r = new F a m i l y F i l t e r ( CompareFilter .
CompareOp .EQUAL,
new BinaryComparator ( Bytes . toBytes (” iG ” )
f i l t e r s . add ( f a m F i l t e r ) ;
F i l t e r c o l F i l t e r = new Q u a l i f i e r F i l t e r (
CompareFilter . CompareOp .EQUAL,
new BinaryComparator ( Bytes . toBytes (” age ” ) ) ) ;
f i l t e r s . add ( c o l F i l t e r ) ;
F i l t e r v a l F i l t e r = new V a l u e F i l t e r ( CompareFilter .
CompareOp . GREATER OR EQUAL,
new BinaryComparator ( Bytes . toBytes ( ”26”)
f i l t e r s . add ( v a l F i l t e r ) ;
Listing 5: Exemple de filtre
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 35 / 47
Filtre Suite
F i l t e r L i s t f l = new F i l t e r L i s t ( F i l t e r L i s t . Operator .
MUST PASS ALL , f i l t e r s ) ;
Scan scan = new Scan ( ) ;
scan . s e t F i l t e r ( f l ) ;
ResultScanner scanner = t a b l e . getScanner ( scan ) ;
System . out . p r i n t l n (” Scanning t a b l e . . . ”) ;
f o r ( Result r e s u l t : scanner ) {
f o r ( KeyValue kv : r e s u l t . raw ( ) ) {
System . out . p r i n t l n (” kv:”+kv +”, Key : ” +
Bytes . t oS t r i n g ( kv . getRow ( ) )
+ ” , Value : ” +Bytes . t oS t r i n g ( kv . getValue ( ) ) ) ;
}
}
scanner . c l o s e ( ) ;
Listing 6: Exemple de filtre
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 36 / 47
Notion de ”Coprocessor”
Analogie soit avec les d´eclencheurs, soit avec les proc´edures stock´ees en
relationnel
Coprocesseur : fonctionnalit´es d´efinies par l’usager pour ´etendre ou
surcharger les fonctionnalit´es inh´erentes au syst`eme
Observer (triggers) : au niveau DML (ex. prePut/postPut), DDL (ex.
avant ou apr`es cr´eation d’une table), journalisation
EndPoint (proc´edures stock´ees en relationnel) : ex. fonctions de
calcul li´ees `a un regroupement (AggregationClient) sur une colonne
ou sur un tuple : count, min, max, sum, avg . . .
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 37 / 47
Rendre AggregationClient op´erationnel
Deux fa¸cons de faire
Ajout dans l e f i c h i e r hbase−s i t e . xml :
<property >
<name>hbase . c op r oc e s s or . user . r e gi on . c l a s s e s </name>
<value >
org . apache . hadoop . hbase . c op r oc e s s or . AggregateImplement
</value >
</property >
M od i f i c a t i on de l a t a b l e dans l e s h e l l HBase
1. hbase> d i s a b l e ’Commune ’
2. a j o u t e r l e programme
hbase> a l t e r ’Commune ’ , METHOD => ’ t a b l e a t t ’ ,
’ coprocessor ’=>’
| org . apache . hadoop . hbase . c op r oc e s s or . AggregateImplemen
3. hbase> enable ’Commune ’
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 38 / 47
Compter le nombre de communes avec AggregationClient
p u b l i c c l a s s AgregationCommunes {
p r i v a t e s t a t i c f i n a l byte [ ] TABLE NAME = Bytes . toB
p r i v a t e s t a t i c f i n a l byte [ ] General = Bytes . toByte
p u b l i c s t a t i c void main ( S t r i n g [ ] args ) throws Thro
C on f i gu r a t i on c o n f i g u r a t i o n = HBaseConfiguration . c
A ggr e ga t i on C l i e n t a g g r e g a t i o n C l i e n t = new A ggr e ga t
c o n f i g u r a t i o n ) ;
Scan scan = new Scan ( ) ;
scan . addFamily ( General ) ;
long rowCount = a g g r e g a t i o n C l i e n t . rowCount (TABLE NA
System . out . p r i n t l n (” row count i s ” + rowCount ) ;
}}
Listing 8: Utiliser AggregationClient
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 39 / 47
Compter le nombre de communes sans AggregationClient
Ecrire votre propre code au risque d’une inefficacit´e du calcul
p u b l i c s t a t i c void getCount ( S t r i n g tableName , C on f i g
t r y {
HTable t a b l e = new HTable ( conf , tableName
Scan s = new Scan ( ) ;
ResultScanner ss = t a b l e . getScanner ( s ) ;
i n t Compteur = 0;
f o r ( Result r : ss ){ Compteur++; }
System . out . p r i n t (” nombre de t u p l e s
} catch ( IOException e ){
e . printStackTrace ( ) ;
}
}
Listing 9: Dans la classe ParcoursScanCommune
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 40 / 47
Attributs multivalu´es
Avec JRuby
put ’CommuneJ ’ , ’34392 ’ , ’ population :2015 ’ , 110000
put ’CommuneJ ’ , ’34392 ’ , ’ population :2015 ’ , 111000
put ’CommuneJ ’ , ’34392 ’ , ’ population :2015 ’ , 112000
get ’CommuneJ ’ , ’34392 ’ , {COLUMN=>’population :2015 ’ ,VE
Listing 10: Dans la classe ParcoursScanCommune
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 41 / 47
Attributs multivalu´es
Avec Java
C on f i gu r a t i on hc = HBaseConfiguration . c r e a t e ( ) ;
HTable t a b l = new HTable ( hc ,” CommuneJ ”) ;
Get get = new Get ( Bytes . toBytes (”34392”));
get . addFamily ( Bytes . toBytes (” population ” ) ) ;
get . setMaxVersions ( I n t e g e r .MAX VALUE) ;
Result r e s u l t = t a b l . get ( get ) ;
NavigableMap<byte [ ] , NavigableMap<byte [ ] ,
NavigableMap<Long , byte[]>>> map =
r e s u l t . getMap ( ) ;
. . . . p a r c o u r i r e n s u i t e l e s v a l e u r s
Listing 11: Dans la classe ParcoursScanCommune
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 42 / 47
Combiner l’information provenant de plusieurs tables
Par exemple relevant d’une jointure
Programmation Map/Reduce des classes facilitatrices de
l’utilisation de plusieurs tables (cˆot´e Map) `a l’exemple de
MultiTableInputFormat (`a partir de HBase 0.94.16))
Implanter les algorithmes de jointure boucles imbriqu´ees,
tri-fusion, jointure par hachage
Autres id´ees ?
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 43 / 47
Boucles imbriqu´ees : le plus simple
L’intuition : parcourir les valeurs (cl´e ou d’une colonne d’un tuple) et les
comparer
while ( r s e t 1 . next ( ) )
{
System . out . p r i n t (” value ”+r s e t 1 . get ( colX ) ) ;
while ( r s e t 2 . next ( ) )
{
i f ( r s e t 1 . get ( colX)==( r s e t 2 . get ( colY ) ) )
{
// a c t i on
}
}
}
Listing 12: Exemple Boucles
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 44 / 47
Charger des donn´ees depuis des fichiers tabulaires
Plusieurs choix possibles
Programmation Map/Reduce lorsque gros volumes de donn´ees
Migration depuis une BDR Exploiter JDBC pour ins´erer des tuples
dans une table HBase (exemple donn´e)
D´efinir un parseur (exemple extrait de la doc HBase)
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 45 / 47
Synth`ese acc`es et manipulation des donn´ees
Les mˆemes actions qu’avec une BD traditionnelle
S´election, Projection avec scan, filter
Jointure avec MultiTableInputFormat, r´e´ecriture des op´erateurs de
jointure en s’appuyant sur les algorithmes existants
Fonctions de calcul : notion de Coprocessor
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 46 / 47
Conclusion
Merci pour votre attention :)
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 47 / 47
Conclusion
Merci pour votre attention :)
Salle TD/TP : 5.08, puis 5.05
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 47 / 47

Contenu connexe

Tendances

Tendances (20)

Cours Big Data Chap2
Cours Big Data Chap2Cours Big Data Chap2
Cours Big Data Chap2
 
Traitement distribue en BIg Data - KAFKA Broker and Kafka Streams
Traitement distribue en BIg Data - KAFKA Broker and Kafka StreamsTraitement distribue en BIg Data - KAFKA Broker and Kafka Streams
Traitement distribue en BIg Data - KAFKA Broker and Kafka Streams
 
TP1 Big Data - MapReduce
TP1 Big Data - MapReduceTP1 Big Data - MapReduce
TP1 Big Data - MapReduce
 
BigData_Chp3: Data Processing
BigData_Chp3: Data ProcessingBigData_Chp3: Data Processing
BigData_Chp3: Data Processing
 
Une introduction à HBase
Une introduction à HBaseUne introduction à HBase
Une introduction à HBase
 
Cours Big Data Chap5
Cours Big Data Chap5Cours Big Data Chap5
Cours Big Data Chap5
 
Cours Big Data Chap4 - Spark
Cours Big Data Chap4 - SparkCours Big Data Chap4 - Spark
Cours Big Data Chap4 - Spark
 
BigData_TP4 : Cassandra
BigData_TP4 : CassandraBigData_TP4 : Cassandra
BigData_TP4 : Cassandra
 
Technologies pour le Big Data
Technologies pour le Big DataTechnologies pour le Big Data
Technologies pour le Big Data
 
Chapitre 2 hadoop
Chapitre 2 hadoopChapitre 2 hadoop
Chapitre 2 hadoop
 
TP2 Big Data HBase
TP2 Big Data HBaseTP2 Big Data HBase
TP2 Big Data HBase
 
Un introduction à Pig
Un introduction à PigUn introduction à Pig
Un introduction à Pig
 
BigData_TP2: Design Patterns dans Hadoop
BigData_TP2: Design Patterns dans HadoopBigData_TP2: Design Patterns dans Hadoop
BigData_TP2: Design Patterns dans Hadoop
 
Cours Big Data Chap1
Cours Big Data Chap1Cours Big Data Chap1
Cours Big Data Chap1
 
Les Base de Données NOSQL -Presentation -
Les Base de Données NOSQL -Presentation -Les Base de Données NOSQL -Presentation -
Les Base de Données NOSQL -Presentation -
 
Exercice arbre de décision
Exercice arbre de décision Exercice arbre de décision
Exercice arbre de décision
 
Hive ppt (1)
Hive ppt (1)Hive ppt (1)
Hive ppt (1)
 
Une introduction à Hive
Une introduction à HiveUne introduction à Hive
Une introduction à Hive
 
Quand utiliser MongoDB … Et quand vous en passer…
Quand utiliser MongoDB	… Et quand vous en passer…Quand utiliser MongoDB	… Et quand vous en passer…
Quand utiliser MongoDB … Et quand vous en passer…
 
Big data - Cours d'introduction l Data-business
Big data - Cours d'introduction l Data-businessBig data - Cours d'introduction l Data-business
Big data - Cours d'introduction l Data-business
 

En vedette

Les modèles NoSQL
Les modèles NoSQLLes modèles NoSQL
Les modèles NoSQL
ebiznext
 

En vedette (20)

Bases de Données non relationnelles, NoSQL (Introduction) 1er cours
Bases de Données non relationnelles, NoSQL (Introduction) 1er coursBases de Données non relationnelles, NoSQL (Introduction) 1er cours
Bases de Données non relationnelles, NoSQL (Introduction) 1er cours
 
Big Data: Hadoop Map / Reduce sur Windows et Windows Azure
Big Data: Hadoop Map / Reduce sur Windows et Windows AzureBig Data: Hadoop Map / Reduce sur Windows et Windows Azure
Big Data: Hadoop Map / Reduce sur Windows et Windows Azure
 
Les modèles NoSQL
Les modèles NoSQLLes modèles NoSQL
Les modèles NoSQL
 
Introduction to Cassandra (June 2010)
Introduction to Cassandra (June 2010)Introduction to Cassandra (June 2010)
Introduction to Cassandra (June 2010)
 
Introduction aux bases de données NoSQL
Introduction aux bases de données NoSQLIntroduction aux bases de données NoSQL
Introduction aux bases de données NoSQL
 
NoSQL et Big Data
NoSQL et Big DataNoSQL et Big Data
NoSQL et Big Data
 
NoSQL: Introducción a las Bases de Datos no estructuradas
NoSQL: Introducción a las Bases de Datos no estructuradasNoSQL: Introducción a las Bases de Datos no estructuradas
NoSQL: Introducción a las Bases de Datos no estructuradas
 
Presentation Hadoop Québec
Presentation Hadoop QuébecPresentation Hadoop Québec
Presentation Hadoop Québec
 
Techday Arrow Group: Hadoop & le Big Data
Techday Arrow Group: Hadoop & le Big DataTechday Arrow Group: Hadoop & le Big Data
Techday Arrow Group: Hadoop & le Big Data
 
NoSQL databases
NoSQL databasesNoSQL databases
NoSQL databases
 
Casablanca Hadoop & Big Data Meetup - Introduction à Hadoop
Casablanca Hadoop & Big Data Meetup - Introduction à HadoopCasablanca Hadoop & Big Data Meetup - Introduction à Hadoop
Casablanca Hadoop & Big Data Meetup - Introduction à Hadoop
 
Plateforme bigdata orientée BI avec Hortoworks Data Platform et Apache Spark
Plateforme bigdata orientée BI avec Hortoworks Data Platform et Apache SparkPlateforme bigdata orientée BI avec Hortoworks Data Platform et Apache Spark
Plateforme bigdata orientée BI avec Hortoworks Data Platform et Apache Spark
 
Bases de données NoSQL
Bases de données NoSQLBases de données NoSQL
Bases de données NoSQL
 
Présentation Big Data et REX Hadoop
Présentation Big Data et REX HadoopPrésentation Big Data et REX Hadoop
Présentation Big Data et REX Hadoop
 
NoSql : conception des schémas, requêtage, et optimisation
NoSql : conception des schémas, requêtage, et optimisationNoSql : conception des schémas, requêtage, et optimisation
NoSql : conception des schémas, requêtage, et optimisation
 
Big Data Analytics for connected home
Big Data Analytics for connected homeBig Data Analytics for connected home
Big Data Analytics for connected home
 
Une introduction à MapReduce
Une introduction à MapReduceUne introduction à MapReduce
Une introduction à MapReduce
 
Enquête RegionsJob : emploi et réseaux sociaux, deuxième édition
Enquête RegionsJob : emploi et réseaux sociaux, deuxième éditionEnquête RegionsJob : emploi et réseaux sociaux, deuxième édition
Enquête RegionsJob : emploi et réseaux sociaux, deuxième édition
 
Hadopp Vue d'ensemble
Hadopp Vue d'ensembleHadopp Vue d'ensemble
Hadopp Vue d'ensemble
 
Présentation pfe Big Data Hachem SELMI et Ahmed DRIDI
Présentation pfe Big Data Hachem SELMI et Ahmed DRIDIPrésentation pfe Big Data Hachem SELMI et Ahmed DRIDI
Présentation pfe Big Data Hachem SELMI et Ahmed DRIDI
 

Similaire à Cours HBase et Base de Données Orientées Colonnes (HBase, Column Oriented Database)

Business Intelligence : introduction to datawarehouse
Business Intelligence : introduction to datawarehouseBusiness Intelligence : introduction to datawarehouse
Business Intelligence : introduction to datawarehouse
Alexandre Equoy
 
Présentation langage de programmationHive.pdf
Présentation langage de programmationHive.pdfPrésentation langage de programmationHive.pdf
Présentation langage de programmationHive.pdf
khalidmoussaid4
 

Similaire à Cours HBase et Base de Données Orientées Colonnes (HBase, Column Oriented Database) (20)

cours06-nosql.pdf
cours06-nosql.pdfcours06-nosql.pdf
cours06-nosql.pdf
 
SGBDR vs NoSQL, Différences et Uses Cases. Focus sur ArangoDB
SGBDR vs NoSQL, Différences et Uses Cases. Focus sur ArangoDBSGBDR vs NoSQL, Différences et Uses Cases. Focus sur ArangoDB
SGBDR vs NoSQL, Différences et Uses Cases. Focus sur ArangoDB
 
Base de données graphe, Noe4j concepts et mise en oeuvre
Base de données graphe, Noe4j concepts et mise en oeuvreBase de données graphe, Noe4j concepts et mise en oeuvre
Base de données graphe, Noe4j concepts et mise en oeuvre
 
analysez-des-donnees-avec-excel documen.pdf
analysez-des-donnees-avec-excel documen.pdfanalysez-des-donnees-avec-excel documen.pdf
analysez-des-donnees-avec-excel documen.pdf
 
Business Intelligence : introduction to datawarehouse
Business Intelligence : introduction to datawarehouseBusiness Intelligence : introduction to datawarehouse
Business Intelligence : introduction to datawarehouse
 
Chap1Concepts-FondamentauxBD.pdf
Chap1Concepts-FondamentauxBD.pdfChap1Concepts-FondamentauxBD.pdf
Chap1Concepts-FondamentauxBD.pdf
 
Cours complet Base de donne Bac
Cours complet Base de donne Bac Cours complet Base de donne Bac
Cours complet Base de donne Bac
 
Présentation langage de programmationHive.pdf
Présentation langage de programmationHive.pdfPrésentation langage de programmationHive.pdf
Présentation langage de programmationHive.pdf
 
mix-it 2011
mix-it 2011mix-it 2011
mix-it 2011
 
Play SQL at PostgreSQL Lyon User Group
Play SQL at PostgreSQL Lyon User GroupPlay SQL at PostgreSQL Lyon User Group
Play SQL at PostgreSQL Lyon User Group
 
coursaccess.pdf
coursaccess.pdfcoursaccess.pdf
coursaccess.pdf
 
Nouveautés de DataDrill EXPRESS 3.8 & 4.0
Nouveautés de DataDrill EXPRESS 3.8 & 4.0Nouveautés de DataDrill EXPRESS 3.8 & 4.0
Nouveautés de DataDrill EXPRESS 3.8 & 4.0
 
extraire, représenter et traiter la social data avec r. seconde partie: appli...
extraire, représenter et traiter la social data avec r. seconde partie: appli...extraire, représenter et traiter la social data avec r. seconde partie: appli...
extraire, représenter et traiter la social data avec r. seconde partie: appli...
 
09coursaccess
09coursaccess09coursaccess
09coursaccess
 
Base de données NoSQL
Base de données NoSQLBase de données NoSQL
Base de données NoSQL
 
Hive
HiveHive
Hive
 
Base NoSql et Python
Base NoSql et PythonBase NoSql et Python
Base NoSql et Python
 
HTML & CSS
HTML & CSSHTML & CSS
HTML & CSS
 
Serveur web / Base de donnees Langages de développement
Serveur web / Base de donnees Langages de développementServeur web / Base de donnees Langages de développement
Serveur web / Base de donnees Langages de développement
 
developpement web HTML & CSS web Sémantique
developpement web HTML & CSS web Sémantiquedeveloppement web HTML & CSS web Sémantique
developpement web HTML & CSS web Sémantique
 

Cours HBase et Base de Données Orientées Colonnes (HBase, Column Oriented Database)

  • 1. HMIN313 : 2`eme Cours Les bases de donn´ees orient´ees colonnes HBase Hatim CHAHDI UMR Espace-DEV Universit´e de Montpellier 28 Septembre 2016 Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 1 / 47
  • 2. Objectifs du cours Comprendre la probl´ematique de stockage de donn´ees ´Etude approfondie des bases de donn´ees orient´ees colonnes Pr´esentation de HBase comme exemple d’une BD orient´ee colonnes Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 2 / 47
  • 3. Rappels : No-SQL, des alternatives ! Des besoins diff´erents. Des structures de stockage diff´erentes Les diff´erents types des SGBD No-SQL: Cl´e/Valeur Colonne Document Graphe No-SQL = Not Only SQL Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 3 / 47
  • 4. Base de donn´ees orient´ee Cl´e/Valeur Principes: Repr´esentation des donn´ees sous forme de cl´e/valeur . Les valeurs peuvent ˆetre de simple chaˆınes de caract`eres ou des objets s´erialis´es complexes. Utilisation: d´epˆot de donn´ees avec besoins de requˆetage simples (pr´ef´erences d’utilisateur, donn´ees de panier, les logs . . . ) Figure : mod`ele cl´e/valeur Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 4 / 47
  • 5. Base de donn´ees orient´ee Cl´e/Valeur Principes: Repr´esentation des donn´ees sous forme de cl´e/valeur . Les valeurs peuvent ˆetre de simple chaˆınes de caract`eres ou des objets s´erialis´es complexes. Utilisation: d´epˆot de donn´ees avec besoins de requˆetage simples (pr´ef´erences d’utilisateur, donn´ees de panier, les logs . . . ) Figure : mod`ele cl´e/valeur Exploitation bas´ee sur 4 op´erations (CRUD): Acc`es par la cl´e Create: Cr´eation d’un objet. Read: Lecture d’un objet. Update: Mise `a jour d’un objet. Delete: Suppression un objet. Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 4 / 47
  • 6. Base de donn´ees orient´ee document Principes: C’est une variante des SGBD cl´e/valeur, o`u la valeur est un document de type XML ou JSON. Les documents ont une structure arborescente, ils sont compos´es de champs et des valeurs associ´ees Ce type de SGBD permet d’effectuer des requˆetes sur le contenu des documents. Utilisation: Enregistrements d’´ev´enements, gestion de contenu . . . Figure : mod`ele document Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 5 / 47
  • 7. Base de donn´ees orient´ee document Principes: C’est une variante des SGBD cl´e/valeur, o`u la valeur est un document de type XML ou JSON. Les documents ont une structure arborescente, ils sont compos´es de champs et des valeurs associ´ees Ce type de SGBD permet d’effectuer des requˆetes sur le contenu des documents. Utilisation: Enregistrements d’´ev´enements, gestion de contenu . . . Figure : mod`ele document Impl´ementations connues CouchDB (fondation apache) MangoDB Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 5 / 47
  • 8. Base de donn´ees orient´ee graphe Principes Les donn´ees sont repr´esent´ees sous-forme de graphe : Des noeuds pour les entit´es, des arcs pour les relations entre les entit´es Ce type de SGBD est adapt´e `a la manipulation de donn´ees fortement connect´ees Utilisation: Syst`emes de recommandations, R´eseaux sociaux, Syst`emes de transport . . . Figure : mod`ele graphe Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 6 / 47
  • 9. Base de donn´ees orient´ee graphe Principes Les donn´ees sont repr´esent´ees sous-forme de graphe : Des noeuds pour les entit´es, des arcs pour les relations entre les entit´es Ce type de SGBD est adapt´e `a la manipulation de donn´ees fortement connect´ees Utilisation: Syst`emes de recommandations, R´eseaux sociaux, Syst`emes de transport . . . Figure : mod`ele graphe Impl´ementations connues Neo4J AllegroGraph Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 6 / 47
  • 10. Base de donn´ees orient´ee colonnes Principes: Proche du relationnel. Mais le stockage des donn´es se fait par colonne et non par ligne. Ajout de colonnes facile et dynamique Possibilit´e de compression des donn´ees Utilisation: Optimisation de la recherche, traitement et analyse de donn´ees structur´ees (BI) . . . Figure : mod`ele colonne Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 7 / 47
  • 11. Base de donn´ees orient´ee colonnes Principes: Proche du relationnel. Mais le stockage des donn´es se fait par colonne et non par ligne. Ajout de colonnes facile et dynamique Possibilit´e de compression des donn´ees Utilisation: Optimisation de la recherche, traitement et analyse de donn´ees structur´ees (BI) . . . Figure : mod`ele colonne Impl´ementation `a ´etudier dans ce cours Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 7 / 47
  • 12. Caract´erisation des syst`emes No-SQL: CAP Consistency, Availability, Partition tolerance Consistency ou coh´erence des donn´ees : toute modification de donn´ee est suivie d’effet pour tous les noeuds du syst`eme Availability ou disponibilit´e des donn´ees : toute requˆete ´emise et trait´ee par un noeud du syst`eme, re¸coit une r´eponse (mˆeme en situation d’´echec `a produire une r´eponse) Partition tolerance ou recouvrement des noeuds assurer une continuit´e du fonctionnement en cas d’ajout/suppression de noeud (ou partition) du syst`eme distribu´e Constat de Brewer : aucun des syst`emes distribu´es n’est `a mˆeme de satisfaire en mˆeme temps les principes C, A et P Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 8 / 47
  • 13. Th´eor`eme CAP : un choix `a faire ! Un syst`eme distribu´e va satisfaire deux des trois points CAP Consid´erations SGBDR / Syst`emes NoSQL SGBDR : Coh´erence et haute disponibilit´e (pas ou peu de P : de diff´erents noeuds syst`eme) Syst`emes NoSQL : Choix du P (syst`eme naturellement distribu´e) et s´election soit du C, soit du A abandon du A ⇐ Accepte d’attendre que les donn´ees soient coh´erentes abandon du C ⇐ Accepte de recevoir des donn´ees parfois incoh´erentes Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 9 / 47
  • 14. Exemple d’impl´ementations adopt´ees par des syst`emes No-SQL Table : Quelques syst`emes et leurs modes de repr´esentation Nom Type Cat´egorisation CAP CouchDB Document AP MongoDB Document CP Neo4j Graph CA Hbase Column CP Cassandra Column AP Riak Key-Value CP Project Voldemort Key-Value AP Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 10 / 47
  • 15. Exemple d’applications existantes Nom de l’entreprise Syst`eme No-SQL Type Google BigTable, LevelDB Column LinkedIn Voldemort Key-Value Facebook Cassandra Column Twitter Hadoop/Hbase, Cassandra Column Netflix SimpleDB, Hadoop/HBase, Cassandra Column CERN CouchDB Document Amazon Dynamo Key-Value Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 11 / 47
  • 16. Les Bases de Donn´ees orient´ees Colonnes Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 12 / 47
  • 17. Syst`emes No-SQL `a colonnes Confusion possible : le mod`ele physique est `a colonnes mais pas le mod`ele de donn´ees paradigmes cl´e/valeur avec ”cl´e d’adressage” composite Colonne : triplet : adresse de colonne / valeur de colonne / estampille (g´erer les versions et les conflits) Famille de colonnes : regrouper les colonnes qui sont partag´ees par un ensemble d’individus Familles de super colonnes : extension du mod`ele avec la notion de ”super colonnes” qui sont des collections de colonnes (poser des index `a diff´erents niveaux) Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 13 / 47
  • 18. Syst`emes No-SQL `a colonnes Illustration colonnes (qualifier) ... ... ... row_key_x ... ... ...timestamp_1 column_name_n column_value_n column_name_1 column_value_1 timestamp_n row_key_x => { column_name_1: column_value_1, ... column_name_n: column_value_n, } Figure : Vision g´en´erale Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 14 / 47
  • 19. Syst`emes No-SQL `a colonnes Illustration colonnes et ”taille” variable d’un tuple PatientCode Firstname 1256953732 LastName 1256953732 Marie Martin PatientCode B_A_0001 1256953732 Firstname Jean 1256953732 LastName Dupont 1256953732 Address Montpellier 1256953732 B_A_0001 B_A_0002 B_A_0002 1256953732 Function Commercial 1256953732 1256953732 OfficeNumber 17−03 Figure : Exemple de deux tuples d’une famille Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 15 / 47
  • 20. Syst`emes No-SQL `a colonnes ´Ecriture inspir´ee de la notation JSON B A 0001 => { G a l I n f o s : PatientCode :” B A 0001 ” , G a l I n f o s : Firstname : ”Jean ” , G a l I n f o s : LastName : ”Dupont ” , G a l I n f o s : Address : ” M on t p e l l i e r ” , A l l e r g y I n f o s : Sneezing : ” mild ” , A l l e r g y I n f o s : I t c h y T r oa t : ” s e v e r e ” , A l l e r g y I n f o s : Snuffy Nose : ”moderate ” , A l l e r g y I n f o s : Watery Eyes : ” mild ” , A l l e r g y I n f o s : Itchy Nose : ” s e v e r e ” } Listing 1: Un tuple Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 16 / 47
  • 21. Syst`emes No-SQL `a colonnes Illustration famille de colonnes PatientCode B_A_0001 1256953732 Firstname Jean 1256953732 LastName Dupont 1256953732 Address Montpellier 1256953732 B_A_0001 CF:Gal_Infos CF:Allergy_Infos B_A_0001 Sneezing mild 1256953666 severe Itchy_Troat 1256953666 Snuffy_Nose moderate 1256953666 Watery_Eyes mild 1256953666 Itchy_Nose severe 1256953666 Figure : Exemple de deux familles de colonnes Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 17 / 47
  • 22. HBase et Cassandra Deux solutions populaires inspir´ees largement de Google BigTable(1) Cassandra Hbase (1) BigTable - A distributed storage system for distributed data - Chang et al, 2006 Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 18 / 47
  • 23. HBase Distribu´e, privil´egie la coh´erence et la disponibilit´e des donn´ees sans oublier les performances S’appuie sur Hadoop ( Apache) qui facilite le traitement distribu´e de larges jeux de donn´ees et ses composants Hadoop Core = HDFS pour le stockage MasterServer : namenode (mode master/slave) RegionServer : datanode Zookeeper : infrastructure centralis´ee et services pour g´erer un ”cluster” de serveurs : parmi les activit´es : synchronization, choix du serveur maˆıtre et v´erification de la disponibilit´e des serveurs MapReduce : mod`ele de programmation distribu´ee Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 19 / 47
  • 24. Architecture de HBase Figure : Vision g´en´erale Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 20 / 47
  • 25. Structurellement parlant : Unit´e de base : table (keyspace) fragment´ee en parties ´egales = r´egions (intervalles de valeurs de cl´es) Tables tri´ees sur la valeur de la cl´e Familles : nombre quelconque de colonnes Colonne (qualifier) : dont les valeurs peuvent ˆetre en nombre quelconque de versions (horodatage) (table, row, column family, column qualifier, timestamp) -> value (la valeur de la donn´ee est stock´ee avec l’ensemble de ses coordonn´ees) `a noter : pas de super colonne avec HBase Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 21 / 47
  • 26. Organisation de la donn´ee Figure : Organisation sous-jacente `a tout tuple Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 22 / 47
  • 27. Aspects internes `a l’architecture de Hbase Structures mises en jeu 1 familles de colonnes (CF) dont les colonnes sont stock´ees dans les mˆemes fichiers bas niveau = HFile 2 une table est associ´ee `a une ou `a plusieurs r´egions (partition de valeurs) selon les besoins en mati`ere de place 3 HStore : une zone tampon par r´egion associ´ee `a une table : 4 MemStore : une m´emoire assign´ee au tri des tuples et `a l’´ecriture s´equentielle du flux de donn´ees dans les fichiers de donn´ees (HFile) - Sort & Flush 5 CachingBlock : tampon de donn´ees en m´emoire vive 6 HFile : 1 `a plusieurs fichiers de donn´ees par r´egion 7 HLog : 1 fichier journal par RegionServer 8 Block : unit´e d’´echange entre les m´emoires vive et de masse (64 Ko `a l’ordinaire) Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 23 / 47
  • 28. Orchestration de diff´erents composants HFile 1 1 stores 1 LogFile (WAL) RegionServerRegion CachingBlock HStore Column + name : byte[] + value : byte[] + time : timestamp Table + name : string locatedOn 1* * 1..*1 associatedTo 1 1 MemStore ColumnFamily + name : byte[] Figure : Diagramme de classes : structures internes Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 24 / 47
  • 29. Orchestration de diff´erents composants Figure : Extrait de HBase internals and schema design presentation Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 25 / 47
  • 30. M´ecanisme de reprise Figure : Ecriture dans fichier journal pour restauration ´eventuelle Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 26 / 47
  • 31. Fichiers de donn´ees Structure d’index : Log Structured Merge (LSM) Tree optimis´ee pour les acc`es s´equentiels Figure : Ordonnancement des valeurs des colonnes sur la base de la cl´e du tuple Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 27 / 47
  • 32. Page d’accueil (WebApp) Figure : Tables du m´etasch´ema : .META. (infos sur toutes les r´egions) et -ROOT- (localisation .META.) Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 28 / 47
  • 33. Acc`es et traitement des donn´ees Acc`es plus imp´eratif que d´eclaratif 1 pas de langage DSL `a l’exemple de SQL pour requˆeter les donn´ees 2 acc`es imperatif au travers d’API clientes : Java mais recours possible `a d’autres langages JRuby, Clojure, Scala, Jython, . . . 3 notion de coprocessor (proc´edure stock´ee) pour traiter directement les donn´ees au niveau d’un noeud de donn´ees (RegionServer) 4 compl´ementarit´e avec le framework MapReduce qui fournit des wrappers pour convertir les tables en collection de paires cl´e/valeur en entr´ee comme en sortie de diverses tˆaches d’analyse Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 29 / 47
  • 34. En pratique Clients HBase API Java Shell HBase (JRuby) Clients non-java serveurs Thrifts (Ruby, C++, Erlang, . . . ) serveurs Rest (Stargate) Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 30 / 47
  • 35. Construire une table et deux familles de colonnes avec JRuby c r e a t e ’ v i l l e ’ , ’ iG ’ , ’ ip10 ’ put ’ v i l l e ’ , ’01024 ’ , ’ iG : codeInsee ’ , ’01024 ’ put ’ v i l l e ’ , ’01024 ’ , ’ iG : nom ’ , ’ Attignat ’ put ’ v i l l e ’ , ’01024 ’ , ’ iG : popMun ’ , ’2850 ’ put ’ v i l l e ’ , ’34172 ’ , ’ iG : codeInsee ’ , ’34172 ’ put ’ v i l l e ’ , ’34172 ’ , ’ iG : nom ’ , ’ Montpellier ’ scan ’ v i l l e ’ ROW COLUMN+CELL 01024 column=iG : codeInsee , timestamp =1354564480805 , value =01024 01024 column=iG : nom , timestamp =1354564480902 , value=Attignat . . . Listing 2: shell JRuby Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 31 / 47
  • 36. Exemples API Java Op´erations ´el´ementaires 1 op´erations sur une table : create, scan, disable, drop 2 op´erations sur un tuple : put, delete, get 3 notions de filtre `a partir du parcours des tuples d’une table Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 32 / 47
  • 37. Cr´eation - Insertion (create, put) C on f i gu r a t i on hc = HBaseConfiguration . c r e a t e ( ) ; HTableDescriptor ht = new HTableDescriptor ( ” p a t i e n t ” ht . addFamily ( new HColumnDescriptor ( ” a l l e r g y ” ) ) ; Put p i e r r e P u t = new Put ( new S t r i n g (” P M 001 ”) . getBytes ( ) ) ; p i e r r e P u t . add (new S t r i n g (” a l l e r g y ”) . getBytes ( ) , new S t r i n g (” sneezing ”) . getBytes ( ) , new S t r i n g (” mild ”) . getBytes ( ) ) ; HBaseAdmin hba = new HBaseAdmin( hc ) ; System . out . p r i n t l n ( ” c r e a t i n g t a b l e . . . p a t i e n t ” ) ; hba . createTable ( ht ) ; HTable t a b l e = new HTable ( hc , ” p a t i e n t ”) ; System . out . p r i n t l n ( ” c r e a t i n g row . . . P i e r r e ” ) ; t a b l e . put ( p i e r r e P u t ) ; Listing 3: table Patient et un tuple Pierre Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 33 / 47
  • 38. Affichage du contenu d’une table (scan) C on f i gu r a t i on conf = HBaseConfiguration . c r e a t e ( ) ; HTable t a b l e = new HTable ( conf , ” personne ”) ; byte [ ] ge n e r a l = Bytes . toBytes (” ge n e r a l ”) ; byte [ ] nom = Bytes . toBytes (”nom ”) ; Scan scan = new Scan ( ) ; scan . addColumn ( general , nom ) ; ResultScanner scanner = t a b l e . getScanner ( scan ) ; f o r ( Result r e s u l t = scanner . next ( ) ; ( r e s u l t != n u l l ) ; r e s u l t = scanner . next ( ) ) { f o r ( KeyValue keyValue : r e s u l t . l i s t ( ) ) { System . out . p r i n t l n (” Q u a l i f i e r : ” + keyValue ” : Value : ” + Bytes . t oS t r i n g ( keyValue . getV } }}} Listing 4: Scan sur colonne Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 34 / 47
  • 39. Filtre : patients ˆag´es d’au moins 26 ans C on f i gu r a t i on conf = HBaseConfiguration . c r e a t e ( ) ; HTable t a b l e = new HTable ( conf , ” p a t i e n t ”) ; List <F i l t e r > f i l t e r s = new ArrayList <F i l t e r >(); F i l t e r f a m F i l t e r = new F a m i l y F i l t e r ( CompareFilter . CompareOp .EQUAL, new BinaryComparator ( Bytes . toBytes (” iG ” ) f i l t e r s . add ( f a m F i l t e r ) ; F i l t e r c o l F i l t e r = new Q u a l i f i e r F i l t e r ( CompareFilter . CompareOp .EQUAL, new BinaryComparator ( Bytes . toBytes (” age ” ) ) ) ; f i l t e r s . add ( c o l F i l t e r ) ; F i l t e r v a l F i l t e r = new V a l u e F i l t e r ( CompareFilter . CompareOp . GREATER OR EQUAL, new BinaryComparator ( Bytes . toBytes ( ”26”) f i l t e r s . add ( v a l F i l t e r ) ; Listing 5: Exemple de filtre Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 35 / 47
  • 40. Filtre Suite F i l t e r L i s t f l = new F i l t e r L i s t ( F i l t e r L i s t . Operator . MUST PASS ALL , f i l t e r s ) ; Scan scan = new Scan ( ) ; scan . s e t F i l t e r ( f l ) ; ResultScanner scanner = t a b l e . getScanner ( scan ) ; System . out . p r i n t l n (” Scanning t a b l e . . . ”) ; f o r ( Result r e s u l t : scanner ) { f o r ( KeyValue kv : r e s u l t . raw ( ) ) { System . out . p r i n t l n (” kv:”+kv +”, Key : ” + Bytes . t oS t r i n g ( kv . getRow ( ) ) + ” , Value : ” +Bytes . t oS t r i n g ( kv . getValue ( ) ) ) ; } } scanner . c l o s e ( ) ; Listing 6: Exemple de filtre Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 36 / 47
  • 41. Notion de ”Coprocessor” Analogie soit avec les d´eclencheurs, soit avec les proc´edures stock´ees en relationnel Coprocesseur : fonctionnalit´es d´efinies par l’usager pour ´etendre ou surcharger les fonctionnalit´es inh´erentes au syst`eme Observer (triggers) : au niveau DML (ex. prePut/postPut), DDL (ex. avant ou apr`es cr´eation d’une table), journalisation EndPoint (proc´edures stock´ees en relationnel) : ex. fonctions de calcul li´ees `a un regroupement (AggregationClient) sur une colonne ou sur un tuple : count, min, max, sum, avg . . . Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 37 / 47
  • 42. Rendre AggregationClient op´erationnel Deux fa¸cons de faire Ajout dans l e f i c h i e r hbase−s i t e . xml : <property > <name>hbase . c op r oc e s s or . user . r e gi on . c l a s s e s </name> <value > org . apache . hadoop . hbase . c op r oc e s s or . AggregateImplement </value > </property > M od i f i c a t i on de l a t a b l e dans l e s h e l l HBase 1. hbase> d i s a b l e ’Commune ’ 2. a j o u t e r l e programme hbase> a l t e r ’Commune ’ , METHOD => ’ t a b l e a t t ’ , ’ coprocessor ’=>’ | org . apache . hadoop . hbase . c op r oc e s s or . AggregateImplemen 3. hbase> enable ’Commune ’ Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 38 / 47
  • 43. Compter le nombre de communes avec AggregationClient p u b l i c c l a s s AgregationCommunes { p r i v a t e s t a t i c f i n a l byte [ ] TABLE NAME = Bytes . toB p r i v a t e s t a t i c f i n a l byte [ ] General = Bytes . toByte p u b l i c s t a t i c void main ( S t r i n g [ ] args ) throws Thro C on f i gu r a t i on c o n f i g u r a t i o n = HBaseConfiguration . c A ggr e ga t i on C l i e n t a g g r e g a t i o n C l i e n t = new A ggr e ga t c o n f i g u r a t i o n ) ; Scan scan = new Scan ( ) ; scan . addFamily ( General ) ; long rowCount = a g g r e g a t i o n C l i e n t . rowCount (TABLE NA System . out . p r i n t l n (” row count i s ” + rowCount ) ; }} Listing 8: Utiliser AggregationClient Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 39 / 47
  • 44. Compter le nombre de communes sans AggregationClient Ecrire votre propre code au risque d’une inefficacit´e du calcul p u b l i c s t a t i c void getCount ( S t r i n g tableName , C on f i g t r y { HTable t a b l e = new HTable ( conf , tableName Scan s = new Scan ( ) ; ResultScanner ss = t a b l e . getScanner ( s ) ; i n t Compteur = 0; f o r ( Result r : ss ){ Compteur++; } System . out . p r i n t (” nombre de t u p l e s } catch ( IOException e ){ e . printStackTrace ( ) ; } } Listing 9: Dans la classe ParcoursScanCommune Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 40 / 47
  • 45. Attributs multivalu´es Avec JRuby put ’CommuneJ ’ , ’34392 ’ , ’ population :2015 ’ , 110000 put ’CommuneJ ’ , ’34392 ’ , ’ population :2015 ’ , 111000 put ’CommuneJ ’ , ’34392 ’ , ’ population :2015 ’ , 112000 get ’CommuneJ ’ , ’34392 ’ , {COLUMN=>’population :2015 ’ ,VE Listing 10: Dans la classe ParcoursScanCommune Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 41 / 47
  • 46. Attributs multivalu´es Avec Java C on f i gu r a t i on hc = HBaseConfiguration . c r e a t e ( ) ; HTable t a b l = new HTable ( hc ,” CommuneJ ”) ; Get get = new Get ( Bytes . toBytes (”34392”)); get . addFamily ( Bytes . toBytes (” population ” ) ) ; get . setMaxVersions ( I n t e g e r .MAX VALUE) ; Result r e s u l t = t a b l . get ( get ) ; NavigableMap<byte [ ] , NavigableMap<byte [ ] , NavigableMap<Long , byte[]>>> map = r e s u l t . getMap ( ) ; . . . . p a r c o u r i r e n s u i t e l e s v a l e u r s Listing 11: Dans la classe ParcoursScanCommune Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 42 / 47
  • 47. Combiner l’information provenant de plusieurs tables Par exemple relevant d’une jointure Programmation Map/Reduce des classes facilitatrices de l’utilisation de plusieurs tables (cˆot´e Map) `a l’exemple de MultiTableInputFormat (`a partir de HBase 0.94.16)) Implanter les algorithmes de jointure boucles imbriqu´ees, tri-fusion, jointure par hachage Autres id´ees ? Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 43 / 47
  • 48. Boucles imbriqu´ees : le plus simple L’intuition : parcourir les valeurs (cl´e ou d’une colonne d’un tuple) et les comparer while ( r s e t 1 . next ( ) ) { System . out . p r i n t (” value ”+r s e t 1 . get ( colX ) ) ; while ( r s e t 2 . next ( ) ) { i f ( r s e t 1 . get ( colX)==( r s e t 2 . get ( colY ) ) ) { // a c t i on } } } Listing 12: Exemple Boucles Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 44 / 47
  • 49. Charger des donn´ees depuis des fichiers tabulaires Plusieurs choix possibles Programmation Map/Reduce lorsque gros volumes de donn´ees Migration depuis une BDR Exploiter JDBC pour ins´erer des tuples dans une table HBase (exemple donn´e) D´efinir un parseur (exemple extrait de la doc HBase) Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 45 / 47
  • 50. Synth`ese acc`es et manipulation des donn´ees Les mˆemes actions qu’avec une BD traditionnelle S´election, Projection avec scan, filter Jointure avec MultiTableInputFormat, r´e´ecriture des op´erateurs de jointure en s’appuyant sur les algorithmes existants Fonctions de calcul : notion de Coprocessor Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 46 / 47
  • 51. Conclusion Merci pour votre attention :) Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 47 / 47
  • 52. Conclusion Merci pour votre attention :) Salle TD/TP : 5.08, puis 5.05 Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 47 / 47