P49 column mieke loncke ifma_une source d'inspiration pour les architectes
Cours HBase et Base de Données Orientées Colonnes (HBase, Column Oriented Database)
-
Upload
hatim-chahdi -
Category
Data & Analytics
-
view
209 -
download
7
Transcript of Cours HBase et Base de Données Orientées Colonnes (HBase, Column Oriented Database)
HMIN313 : 2eme Cours
Les bases de donnees orientees colonnes
HBase
Hatim CHAHDI
UMR Espace-DEV
Universite de Montpellier
28 Septembre 2016
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 1 / 47
Objectifs du cours
Comprendre la problematique de stockage de donnees
Etude approfondie des bases de donnees orientees colonnes
Presentation de HBase comme exemple d’une BD orientee colonnes
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 2 / 47
Rappels : No-SQL, des alternatives !
Des besoins differents. Des structures de
stockage differentes
Les differents types des SGBD No-SQL:
Cle/Valeur
Colonne
Document
Graphe
No-SQL = Not Only SQL
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 3 / 47
Base de donnees orientee Cle/Valeur
Principes: Representation des donnees sous forme de cle/valeur .Les valeurs peuvent etre de simple chaınes de caracteres ou des objetsserialises complexes.
Utilisation: depot de donnees avec besoins de requetage simples(preferences d’utilisateur, donnees de panier, les logs . . . )
Figure : modele cle/valeur
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 4 / 47
Base de donnees orientee Cle/Valeur
Principes: Representation des donnees sous forme de cle/valeur .Les valeurs peuvent etre de simple chaınes de caracteres ou des objetsserialises complexes.
Utilisation: depot de donnees avec besoins de requetage simples(preferences d’utilisateur, donnees de panier, les logs . . . )
Figure : modele cle/valeur
Exploitation basee sur 4operations (CRUD): Acces parla cle
Create: Creation d’un objet.
Read: Lecture d’un objet.
Update: Mise a jour d’unobjet.
Delete: Suppression un objet.
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 4 / 47
Base de donnees orientee document
Principes: C’est une variante des SGBD cle/valeur, ou la valeur estun document de type XML ou JSON.
Les documents ont une structure arborescente, ils sont composes dechamps et des valeurs associeesCe type de SGBD permet d’effectuer des requetes sur le contenu desdocuments.
Utilisation: Enregistrements d’evenements, gestion de contenu . . .
Figure : modele documentHatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 5 / 47
Base de donnees orientee document
Principes: C’est une variante des SGBD cle/valeur, ou la valeur estun document de type XML ou JSON.
Les documents ont une structure arborescente, ils sont composes dechamps et des valeurs associeesCe type de SGBD permet d’effectuer des requetes sur le contenu desdocuments.
Utilisation: Enregistrements d’evenements, gestion de contenu . . .
Figure : modele document
Implementations connues
CouchDB (fondationapache)
MangoDB
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 5 / 47
Base de donnees orientee graphe
Principes
Les donnees sont representees sous-forme de graphe : Des noeuds pourles entites, des arcs pour les relations entre les entitesCe type de SGBD est adapte a la manipulation de donnees fortementconnectees
Utilisation: Systemes de recommandations, Reseaux sociaux,Systemes de transport . . .
Figure : modele graphe
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 6 / 47
Base de donnees orientee graphe
Principes
Les donnees sont representees sous-forme de graphe : Des noeuds pourles entites, des arcs pour les relations entre les entitesCe type de SGBD est adapte a la manipulation de donnees fortementconnectees
Utilisation: Systemes de recommandations, Reseaux sociaux,Systemes de transport . . .
Figure : modele graphe
Implementations connues
Neo4J
AllegroGraph
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 6 / 47
Base de donnees orientee colonnes
Principes: Proche du relationnel. Mais le stockage des donnes se faitpar colonne et non par ligne.
Ajout de colonnes facile et dynamiquePossibilite de compression des donnees
Utilisation: Optimisation de la recherche, traitement et analyse dedonnees structurees (BI) . . .
Figure : modele colonne
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 7 / 47
Base de donnees orientee colonnes
Principes: Proche du relationnel. Mais le stockage des donnes se faitpar colonne et non par ligne.
Ajout de colonnes facile et dynamiquePossibilite de compression des donnees
Utilisation: Optimisation de la recherche, traitement et analyse dedonnees structurees (BI) . . .
Figure : modele colonne
Implementation a etudier dansce cours
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 7 / 47
Caracterisation des systemes No-SQL: CAP
Consistency, Availability, Partition tolerance
Consistency ou coherence des donnees : toute modification dedonnee est suivie d’effet pour tous les noeuds du systeme
Availability ou disponibilite des donnees : toute requete emise ettraitee par un noeud du systeme, recoit une reponse (meme ensituation d’echec a produire une reponse)
Partition tolerance ou recouvrement des noeuds assurer unecontinuite du fonctionnement en cas d’ajout/suppression de noeud(ou partition) du systeme distribue
Constat de Brewer : aucun des systemes distribues n’est a meme desatisfaire en meme temps les principes C, A et P
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 8 / 47
Theoreme CAP : un choix a faire !
Un systeme distribue va satisfaire deux des trois points CAP
Considerations SGBDR / Systemes NoSQL
SGBDR : Coherence et haute disponibilite (pas ou peu de P : dedifferents noeuds systeme)
Systemes NoSQL : Choix du P (systeme naturellement distribue) etselection soit du C, soit du A
abandon du A ⇐ Accepte d’attendre que les donnees soient coherentesabandon du C ⇐ Accepte de recevoir des donnees parfois incoherentes
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 9 / 47
Exemple d’implementations adoptees par des systemes
No-SQL
Table : Quelques systemes et leurs modes de representation
Nom Type Categorisation CAP
CouchDB Document APMongoDB Document CPNeo4j Graph CAHbase Column CPCassandra Column APRiak Key-Value CPProject 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 Systeme No-SQL Type
Google BigTable, LevelDB ColumnLinkedIn Voldemort Key-ValueFacebook Cassandra ColumnTwitter Hadoop/Hbase, Cassandra ColumnNetflix SimpleDB, Hadoop/HBase, Cassandra ColumnCERN CouchDB DocumentAmazon Dynamo Key-Value
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 11 / 47
Les Bases de Donnees orientees
Colonnes
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 12 / 47
Systemes No-SQL a colonnes
Confusion possible : le modele physique est a colonnes mais pas le modelede donnees
paradigmes cle/valeur avec ”cle d’adressage” composite
Colonne : triplet : adresse de colonne / valeur de colonne /estampille (gerer les versions et les conflits)
Famille de colonnes : regrouper les colonnes qui sont partagees parun ensemble d’individus
Familles de super colonnes : extension du modele avec la notion de”super colonnes” qui sont des collections de colonnes (poser des indexa differents niveaux)
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 13 / 47
Systemes 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 generale
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 14 / 47
Systemes 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
Systemes No-SQL a colonnes
Ecriture inspiree de la notation JSON
B A 0001 => {Ga l I n f o s : Pat i en tCode : ” B A 0001 ” ,G a l I n f o s : F i r s t name : ” Jean ” ,G a l I n f o s : LastName : ”Dupont ” ,G a l I n f o s : Addres s : ” Mon t p e l l i e r ” ,A l l e r g y I n f o s : Sneez i ng : ”mi ld ” ,A l l e r g y I n f o s : I t c h y T r o a t : ” s e v e r e ” ,A l l e r g y I n f o s : Snu f f y Nose : ”moderate ” ,A l l e r g y I n f o s : Watery Eyes : ”mi ld ” ,A l l e r g y I n f o s : I t c h y Nos e : ” s e v e r e ”}
Listing 1: Un tuple
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 16 / 47
Systemes 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 inspirees largement de Google BigTable(1)
Cassandra
Hbase
(1) BigTable - A distributed storage system for distributed data - Chang etal, 2006
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 18 / 47
HBase
Distribue, privilegie la coherence et la disponibilite des donnees sans oublierles performances
S’appuie sur Hadoop ( Apache) qui facilite le traitement distribue delarges jeux de donnees et ses composants
Hadoop Core =
HDFS pour le stockage
MasterServer : namenode (mode master/slave)RegionServer : datanode
Zookeeper : infrastructure centralisee et services pour gerer un”cluster” de serveurs : parmi les activites : synchronization, choix duserveur maıtre et verification de la disponibilite des serveurs
MapReduce : modele de programmation distribuee
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 19 / 47
Architecture de HBase
Figure : Vision generale
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 20 / 47
Structurellement parlant :
Unite de base : table (keyspace) fragmentee en parties egales = regions(intervalles de valeurs de cles)
Tables triees sur la valeur de la cle
Familles : nombre quelconque de colonnes
Colonne (qualifier) : dont les valeurs peuvent etre en nombrequelconque de versions (horodatage)
(table, row, column family, column qualifier, timestamp) -> value (lavaleur de la donnee est stockee avec l’ensemble de ses coordonnees)
a noter : pas de super colonne avec HBase
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 21 / 47
Organisation de la donnee
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 stockees dans lesmemes fichiers bas niveau = HFile
2 une table est associee a une ou a plusieurs regions (partition devaleurs) selon les besoins en matiere de place
3 HStore : une zone tampon par region associee a une table :
4 MemStore : une memoire assignee au tri des tuples et a l’ecrituresequentielle du flux de donnees dans les fichiers de donnees (HFile) -Sort & Flush
5 CachingBlock : tampon de donnees en memoire vive
6 HFile : 1 a plusieurs fichiers de donnees par region
7 HLog : 1 fichier journal par RegionServer
8 Block : unite d’echange entre les memoires vive et de masse (64 Ko al’ordinaire)
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 23 / 47
Orchestration de differents composants
HFile
1
1stores
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 differents composants
Figure : Extrait de HBase internals and schema design presentation
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 25 / 47
Mecanisme 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 donnees
Structure d’index : Log Structured Merge (LSM) Tree optimisee pour lesacces sequentiels
Figure : Ordonnancement des valeurs des colonnes sur la base de la cle du tuple
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 27 / 47
Page d’accueil (WebApp)
Figure : Tables du metaschema : .META. (infos sur toutes les regions) et-ROOT- (localisation .META.)
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 28 / 47
Acces et traitement des donnees
Acces plus imperatif que declaratif
1 pas de langage DSL a l’exemple de SQL pour requeter les donnees
2 acces imperatif au travers d’API clientes : Java mais recours possiblea d’autres langages JRuby, Clojure, Scala, Jython, . . .
3 notion de coprocessor (procedure stockee) pour traiter directementles donnees au niveau d’un noeud de donnees (RegionServer)
4 complementarite avec le framework MapReduce qui fournit deswrappers pour convertir les tables en collection de paires cle/valeur enentree comme en sortie de diverses taches 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 : code In s ee ’ , ’01024 ’put ’ v i l l e ’ , ’ 01024 ’ , ’ iG : nom ’ , ’ A t t i gna t ’put ’ v i l l e ’ , ’ 01024 ’ , ’ iG : popMun ’ , ’ 2 850 ’put ’ v i l l e ’ , ’ 34172 ’ , ’ iG : code In s ee ’ , ’34172 ’put ’ v i l l e ’ , ’ 34172 ’ , ’ iG : nom ’ , ’ Mon t p e l l i e r ’scan ’ v i l l e ’
ROW COLUMN+CELL01024 column=iG : code In s ee , t imestamp =1354564480805 ,
v a l u e=0102401024 column=iG : nom , t imestamp =1354564480902 ,
v a l u e=At t i gn a t. . .
Listing 2: shell JRubyHatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 31 / 47
Exemples API Java
Operations elementaires
1 operations sur une table : create, scan, disable, drop
2 operations 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
Creation - Insertion (create, put)
Con f i g u r a t i o n hc = HBaseCon f i gu ra t i on . c r e a t e ( ) ;HTab l eDes c r i p t o r ht = new HTab l eDes c r i p t o r ( ” p a t i e n t ”ht . addFami ly ( new HColumnDescr iptor ( ” a l l e r g y ” ) ) ;Put p i e r r ePu t = new Put ( new S t r i n g (” P M 001 ” ) .ge tBy t e s ( ) ) ;p i e r r ePu t . add (new S t r i n g (” a l l e r g y ” ) . ge tBy t e s ( ) ,new S t r i n g (” s n e e z i n g ” ) . ge tBy t e s ( ) ,new S t r i n g (” mi ld ” ) . ge tBy t e s ( ) ) ;
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 . c r e a t eTab l e ( 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 ePu 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)
Con f i g u r a t i o n con f = HBaseCon f i gu ra t i on . c r e a t e ( ) ;HTable t a b l e = new HTable ( conf , ” per sonne ” ) ;by te [ ] g e n e r a l = Bytes . t oBy t e s (” g e n e r a l ” ) ;by te [ ] nom = Bytes . t oBy t e s (”nom” ) ;
Scan scan = new Scan ( ) ;scan . addColumn ( gene ra l , nom ) ;Resu l tS canne r s canne r = t a b l e . ge tS canne r ( scan ) ;
f o r ( R e s u l t r e s u l t = scanne r . nex t ( ) ;( r e s u l t != n u l l ) ;r e s u l t = scanne r . nex t ( ) ) {
f o r ( KeyValue keyVa lue : 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 : ” + keyVa lue” : Va lue : ” + Bytes . t o S t r i n g ( keyVa lue . ge tV
} }}}
Listing 4: Scan sur colonne
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 34 / 47
Filtre : patients ages d’au moins 26 ans
Con f i g u r a t i o n con f = HBaseCon f i gu ra t i on . c r e a t e ( ) ;HTable t a b l e = new HTable ( conf , ” p a t i e n t ” ) ;L i s t<F i l t e r > f i l t e r s = new A r r a yL i s t<F i l t e r >() ;F i l t e r f amF i l t e r = new F am i l y F i l t e r ( Compa reF i l t e r .CompareOp .EQUAL,
new BinaryComparator ( Bytes . t oBy t e s (” iG ” )f i l t e r s . add ( f amF 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 (Compa reF i l t e r . CompareOp .EQUAL,
new BinaryComparator ( Bytes . t oBy t e s (” 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 ( Compa reF i l t e r .CompareOp .GREATER OR EQUAL,
new BinaryComparator ( Bytes . t oBy t e s ( ” 2 6 ” )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 . Opera tor .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 ) ;Re su l tS canne r s canne r = t a b l e . ge tS canne r ( scan ) ;
System . out . p r i n t l n (” Scanning t a b l e . . . ” ) ;f o r ( R e s u l t r e s u l t : s canne r ) {
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 o S t r i n g ( kv . getRow ( ) )+ ” , Va lue : ” +Bytes . t o S t r i n g ( kv . ge tVa l ue ( ) ) ) ;
}}
s canne r . 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 declencheurs, soit avec les procedures stockees enrelationnel
Coprocesseur : fonctionnalites definies par l’usager pour etendre ousurcharger les fonctionnalites inherentes au systeme
Observer (triggers) : au niveau DML (ex. prePut/postPut), DDL (ex.avant ou apres creation d’une table), journalisation
EndPoint (procedures stockees en relationnel) : ex. fonctions decalcul liees a un regroupement (AggregationClient) sur une colonneou sur un tuple : count, min, max, sum, avg . . .
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 37 / 47
Rendre AggregationClient operationnel
Deux facons de faire
Ajout dans l e f i c h i e r hbase−s i t e . xml :<p rope r t y><name>hbase . c o p r o c e s s o r . u s e r . r e g i o n . c l a s s e s </name><va lue>org . apache . hadoop . hbase . c o p r o c e s s o r . Agg r ega t e Imp l emen t</va lue></p rope r t y>
Mod i f i c a t i o n de l a t a b l e dans l e s h e l l HBase1 . hbase> d i s a b l e ’Commune ’2 . a j o u t e r l e programmehbase> a l t e r ’Commune ’ , METHOD => ’ t a b l e a t t ’ ,’ c op r o c e s s o r ’=> ’| org . apache . hadoop . hbase . c o p r o c e s s o r . Agg r ega t e Imp l emen3 . hbase> enab l e ’Commune ’
Listing 7: AggregationClientHatim 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 by te [ ] TABLE NAME = Bytes . t oBp r i v a t e s t a t i c f i n a l by te [ ] Gene ra l = Bytes . t oBy t ep u b l i c s t a t i c vo i d main ( S t r i n g [ ] a r g s ) th rows ThroCon f i g u r a t i o n c o n f i g u r a t i o n = HBaseCon f i gu ra t i on . cA gg r e g a t i o nC l i e n t a g g r e g a t i o n C l i e n t = new Agg r e g a t
c o n f i g u r a t i o n ) ;Scan scan = new Scan ( ) ;scan . addFami ly ( Gene ra l ) ;l ong rowCount = a g g r e g a t i o n C l i e n t . rowCount (TABLE NASystem . 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 inefficacite du calcul
p u b l i c s t a t i c vo i d getCount ( S t r i n g tableName , Con f i gt r y {
HTable t a b l e = new HTable ( conf , tableNameScan s = new Scan ( ) ;Re su l tS canne r s s = t a b l e . ge tS canne r ( s ) ;i n t Compteur = 0 ;
f o r ( R e s u l t r : s s ){ Compteur++; }System . out . p r i n t (” nombre de t u p l e s
} ca tch ( IOExcept i on e ){e . p r i n t S t a ckT r a c e ( ) ;
}}
Listing 9: Dans la classe ParcoursScanCommune
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 40 / 47
Attributs multivalues
Avec JRuby
put ’CommuneJ ’ , ’34392 ’ , ’ p opu l a t i on :2015 ’ , 110000put ’CommuneJ ’ , ’34392 ’ , ’ p opu l a t i on :2015 ’ , 111000put ’CommuneJ ’ , ’34392 ’ , ’ p opu l a t i on :2015 ’ , 112000
get ’CommuneJ ’ , ’34392 ’ , {COLUMN=>’ p opu l a t i on :2015 ’ ,VE
Listing 10: Dans la classe ParcoursScanCommune
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 41 / 47
Attributs multivalues
Avec Java
Con f i g u r a t i o n hc = HBaseCon f i gu ra t i on . c r e a t e ( ) ;HTable t a b l = new HTable ( hc , ”CommuneJ ” ) ;Get get = new Get ( Bytes . t oBy t e s ( ”34392” ) ) ;get . addFami ly ( Bytes . t oBy t e s (” popu l a t i on ” ) ) ;get . s e tMaxVer s i on s ( I n t e g e r .MAX VALUE) ;R e s u l t 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 del’utilisation de plusieurs tables (cote Map) a l’exemple deMultiTableInputFormat (a partir de HBase 0.94.16))
Implanter les algorithmes de jointure boucles imbriquees,tri-fusion, jointure par hachage
Autres idees ?
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 43 / 47
Boucles imbriquees : le plus simple
L’intuition : parcourir les valeurs (cle ou d’une colonne d’un tuple) et lescomparer
wh i l e ( r s e t 1 . nex t ( ) ){
System . out . p r i n t (” v a l u e ”+r s e t 1 . get ( co lX ) ) ;
wh i l e ( r s e t 2 . nex t ( ) ){
i f ( r s e t 1 . get ( co lX)==( r s e t 2 . get ( co lY ) ) ){
// a c t i o n}
}}
Listing 12: Exemple Boucles
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 44 / 47
Charger des donnees depuis des fichiers tabulaires
Plusieurs choix possibles
Programmation Map/Reduce lorsque gros volumes de donnees
Migration depuis une BDR Exploiter JDBC pour inserer des tuplesdans une table HBase (exemple donne)
Definir un parseur (exemple extrait de la doc HBase)
Hatim CHAHDI (Espace Dev - UM) BD Colonnes, HBase 28 Septembre 2016 45 / 47
Synthese acces et manipulation des donnees
Les memes actions qu’avec une BD traditionnelle
Selection, Projection avec scan, filter
Jointure avec MultiTableInputFormat, reecriture des operateurs dejointure 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