Ce cours introduit les bases de données orientées colonnes et leurs spécificités. Il détaille par la suite l'architecture d'HBase et explique les moyens nécessaires à sa mise en place et à son exploitation.
Libérer le Potentiel à l'Ère de la Transformation Numérique pour des Organisa...
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
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