HMIN313 : 2`eme Cours
Les bases de donn´ees orient´ees colonnes
HBase
Hatim CHAHDI
UMR Espace-DEV
Universit´e de Montpelli...
Objectifs du cours
Comprendre la probl´ematique de stockage de donn´ees
´Etude approfondie des bases de donn´ees orient´ee...
Rappels : No-SQL, des alternatives !
Des besoins diff´erents. Des structures de
stockage diff´erentes
Les diff´erents types d...
Base de donn´ees orient´ee Cl´e/Valeur
Principes: Repr´esentation des donn´ees sous forme de cl´e/valeur .
Les valeurs peu...
Base de donn´ees orient´ee Cl´e/Valeur
Principes: Repr´esentation des donn´ees sous forme de cl´e/valeur .
Les valeurs peu...
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 t...
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 t...
Base de donn´ees orient´ee graphe
Principes
Les donn´ees sont repr´esent´ees sous-forme de graphe : Des noeuds pour
les en...
Base de donn´ees orient´ee graphe
Principes
Les donn´ees sont repr´esent´ees sous-forme de graphe : Des noeuds pour
les en...
Base de donn´ees orient´ee colonnes
Principes: Proche du relationnel. Mais le stockage des donn´es se fait
par colonne et ...
Base de donn´ees orient´ee colonnes
Principes: Proche du relationnel. Mais le stockage des donn´es se fait
par colonne et ...
Caract´erisation des syst`emes No-SQL: CAP
Consistency, Availability, Partition tolerance
Consistency ou coh´erence des do...
Th´eor`eme CAP : un choix `a faire !
Un syst`eme distribu´e va satisfaire deux des trois points CAP
Consid´erations SGBDR ...
Exemple d’impl´ementations adopt´ees par des syst`emes
No-SQL
Table : Quelques syst`emes et leurs modes de repr´esentation...
Exemple d’applications existantes
Nom de l’entreprise Syst`eme No-SQL Type
Google BigTable, LevelDB Column
LinkedIn Voldem...
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
para...
Syst`emes No-SQL `a colonnes
Illustration colonnes (qualifier)
...
...
...
row_key_x
...
...
...timestamp_1
column_name_n
...
Syst`emes No-SQL `a colonnes
Illustration colonnes et ”taille” variable d’un tuple
PatientCode Firstname
1256953732
LastNa...
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 00...
Syst`emes No-SQL `a colonnes
Illustration famille de colonnes
PatientCode
B_A_0001
1256953732
Firstname
Jean
1256953732
La...
HBase et Cassandra
Deux solutions populaires inspir´ees largement de Google BigTable(1)
Cassandra
Hbase
(1) BigTable - A d...
HBase
Distribu´e, privil´egie la coh´erence et la disponibilit´e des donn´ees sans oublier
les performances
S’appuie sur H...
Architecture de HBase
Figure : Vision g´en´erale
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 20 / ...
Structurellement parlant :
Unit´e de base : table (keyspace) fragment´ee en parties ´egales = r´egions
(intervalles de val...
Organisation de la donn´ee
Figure : Organisation sous-jacente `a tout tuple
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HB...
Aspects internes `a l’architecture de Hbase
Structures mises en jeu
1 familles de colonnes (CF) dont les colonnes sont sto...
Orchestration de diff´erents composants
HFile
1
1
stores
1
LogFile (WAL)
RegionServerRegion
CachingBlock
HStore
Column
+ na...
Orchestration de diff´erents composants
Figure : Extrait de HBase internals and schema design presentation
Hatim CHAHDI (Es...
M´ecanisme de reprise
Figure : Ecriture dans fichier journal pour restauration ´eventuelle
Hatim CHAHDI (Espace Dev - UM) B...
Fichiers de donn´ees
Structure d’index : Log Structured Merge (LSM) Tree optimis´ee pour les
acc`es s´equentiels
Figure : ...
Page d’accueil (WebApp)
Figure : Tables du m´etasch´ema : .META. (infos sur toutes les r´egions) et
-ROOT- (localisation ....
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 req...
En pratique
Clients HBase
API Java
Shell HBase (JRuby)
Clients non-java
serveurs Thrifts (Ruby, C++, Erlang, . . . )
serve...
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...
Exemples API Java
Op´erations ´el´ementaires
1 op´erations sur une table : create, scan, disable, drop
2 op´erations sur u...
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...
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 ...
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...
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 ...
Notion de ”Coprocessor”
Analogie soit avec les d´eclencheurs, soit avec les proc´edures stock´ees en
relationnel
Coprocess...
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 ...
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 ...
Compter le nombre de communes sans AggregationClient
Ecrire votre propre code au risque d’une inefficacit´e du calcul
p u b ...
Attributs multivalu´es
Avec JRuby
put ’CommuneJ ’ , ’34392 ’ , ’ population :2015 ’ , 110000
put ’CommuneJ ’ , ’34392 ’ , ...
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 H...
Combiner l’information provenant de plusieurs tables
Par exemple relevant d’une jointure
Programmation Map/Reduce des clas...
Boucles imbriqu´ees : le plus simple
L’intuition : parcourir les valeurs (cl´e ou d’une colonne d’un tuple) et les
compare...
Charger des donn´ees depuis des fichiers tabulaires
Plusieurs choix possibles
Programmation Map/Reduce lorsque gros volumes...
Synth`ese acc`es et manipulation des donn´ees
Les mˆemes actions qu’avec une BD traditionnelle
S´election, Projection avec...
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 2...
Prochain SlideShare
Chargement dans…5
×

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

114 vues

Publié le

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.

Publié dans : Données & analyses
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
114
Sur SlideShare
0
Issues des intégrations
0
Intégrations
2
Actions
Partages
0
Téléchargements
7
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

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

  1. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 16. Les Bases de Donn´ees orient´ees Colonnes Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 12 / 47
  17. 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. 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. 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. 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. 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. 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. 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. 24. Architecture de HBase Figure : Vision g´en´erale Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 20 / 47
  25. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 51. Conclusion Merci pour votre attention :) Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 47 / 47
  52. 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

×