Université Sultan Moulay Slimane
Ecole National des Sciences Appliquées
Khouribga
- Base de Données NoSQL -
TP 6 : HBase – API Java
Objectif du TP : Manipulation de la base de données HBase via l’API Java pour
réaliser des opérations DDL et DML
‒ HBase fournit une API en Java pour pouvoir manipuler programmatiquement
les données de la base.
‒ HBase stocke des données binaires quelconques : chaînes, nombres, images,
etc. Il faut seulement les convertir en byte[] comme suit:
byte[] octets = [Link](donnée);
Partie I : Opérations DDL
Dans votre machine virtuelle « Cloudera », démarrer les services nécessaires
pour assurer le bon fonctionnement de HBase.
1. Lancer « Eclipse » et créer un nouveau projet.
2. Importer à votre projet tous les jars situés aux répertoires /user/lib/hbase et
/user/lib/hadoop.
3. Créer une classe « HbaseOperations » contenant une méthode main gérant
l’exception IOException.
4. Importer les classes suivantes :
import [Link];
import [Link].*;
import [Link].*;
import [Link].*;
5. Pour établir une connexion avec le serveur Hbase, utiliser le code suivant :
Configuration config = [Link]();
HBaseAdmin admin = new HBaseAdmin(config);
try {
//le code des opérations voulus
TP Base de Données NoSQL 1 Pr. Nassima SOUSSI
Université Sultan Moulay Slimane
Ecole National des Sciences Appliquées
Khouribga
} finally {
[Link]();
}
6. Pour créer la table «employes_2», écrivez la méthode static void
CreerTable(HBaseAdmin admin, String nomtable, List<String>
famillesCols) en suivant les étapes ci-dessous :
a. Créer une instance de la classe HTableDescription qui opère sur le nom de la
table convertie en byte.
b. Pour ajouter les familles de colonnes, utilisez la méthode addFamily (appelé
sur l’objet HTableDescription créé précédemment) pour chaque famille de
colonne :
Htd_obj.addFamily(new HColumnDescriptor(FC));
c. Appliquer la méthode createTable sur l’objet admin et ajouter un affichage à
la console indiquant la réussite de l’ajout.
d. Créer la table « employes_2 » avec deux familles de colonnes « info_maj »
et « info_sup » via la méthode CreerTable.
e. Exécuter ce code et vérifier la création de la table via hbase shell.
7. Pour la suppression de la table « employes_2 », créer la méthode static void
SupprimerTable(HBaseAdmin admin, String nomtable) comme suit :
a. Si la table existe déjà, appelez la méthode disableTable(table_name) pour
pouvoir supprimer la table par la suite via deleteTable(table_name).
b. Instancier la méthode SupprimerTable dans le main() pour supprimer la
table « employes_2 » si elle existe déjà avant de la recréer avec la méthode
CreerTable.
c. Ré-exécuter le tous et vérifier le résultat final.
Partie II : Opérations DML
Dans cette partie, on va effectuer des opérations DML sur les données de la
table « employes_2 ». Pour cela, il faut récupérer un objet HTable représentant la
table. Il est important de libérer cet objet dès qu’il ne sert plus.
TP Base de Données NoSQL 2 Pr. Nassima SOUSSI
Université Sultan Moulay Slimane
Ecole National des Sciences Appliquées
Khouribga
Remarque : Prévoir l’arrivée de IOException à tout moment
8. L’insertion d’une valeur consiste à créer une instance de la classe Put. Cet objet
spécifie la valeur à insérer :
‒ identifiant du n-uplet auquel elle appartient,
‒ nom de la famille,
‒ nom de la colonne,
‒ valeur,
‒ le timestamp à lui affecter (facultatif).
NB : toutes les données concernées doivent être converties en tableaux d’octets.
Pour créer la méthode static
void AjouterValeur(Configuration
config,String nomtable, String id,String fam, String col, String
val) qui réalisera cette fonction d’insertion, suivez les étapes ci-dessous :
a. Créer un objet HTable. Libérer le à la fin de la méthode (obj_htable.close()).
b. Créer un objet de la classe Put en spécifiant l’id de la valeur à ajoutée.
c. Ajouter à cet objet les autres informations (famile de colonne, colonne et la
valeur elle-même). Pour ce faire, utiliser la méthode obj_Put.add(…)
d. Ajouter cet objet Put à la table via la méthode put(obj_Put).
e. Utiliser cette méthode dans le main pour ajouter à la table « employes_2 »
les informations suivantes :
CF info_maj info_sup
id
001A
salaire depno
002B
12350 21
9. La récupération d’une cellule fait appel à un Get. Il se construit avec
l’identifiant du n-uplet voulu. Ensuite, on applique ce Get à la table. Elle
retourne un Result contenant les cellules du n-uplet.
TP Base de Données NoSQL 3 Pr. Nassima SOUSSI
Université Sultan Moulay Slimane
Ecole National des Sciences Appliquées
Khouribga
Etape1 : Création de la méthode static void
AfficherNuplet(Configuration config, String nomtable,
String id) :
a. Créer un objet de type Get en utilisant l’id de la valeur voulue.
b. Créer un objet HTable. Libérer le à la fin de la méthode.
c. Récupérer le résultat (de type Result) via la fonction get(obj_Get).
d. Parcourir l’ensemble des cellules de ce résultat pour l’afficher à
l’utilisateur :
for (Cell cell: obj_result.listCells()) {
AfficherCell(cell);
}
Etape2 : Définition de la méthode static void AfficherCell(Cell
cell):
a. Extraire la famille de colonne :
String fam = [Link]([Link](),
[Link](), [Link]());
b. Extraire la colonne (qualifier) et la valeur de la même manière.
c. Afficher le résultat sous la forme de:
Famille_de_colonne : colonne = valeur
10. Le parcours d’une table est réalisé avec un Scan. Il faut fournir la clé de départ
et celle d’arrêt (ou alors le scan se fait sur toute la table). Pour construire la
méthode static void ParcourirTable(Configuration config, String
nomtable, String start, String stop) , suivez les étapes ci-dessous :
a. Créer un objet de type Scan en utilisant la clé de départ (start) et la clé
d’arrivée (stop).
b. Créer un objet HTable.
c. Appliquer la méthode getScanner(scan_obj) sur l’objet HTable créé. Elle
retourne un résultat de type ResultScanner.
d. Parcourir ce résultat pour afficher les cellules de toutes les lignes. Penser à
se servir de la méthode AfficherCell(cell).
11. Appelez les méthodes précédentes dans le main et vérifier le résultat final.
TP Base de Données NoSQL 4 Pr. Nassima SOUSSI