sujet TP

Transcription

sujet TP
Travaux pratiques : HBase
Jonathan Lejeune
Objectifs
Ce sujet de travaux pratiques vous permettra de vous initier à l'utilisation de Hbase
ainsi que son installation dans un environnement UNIX.
Exercice 1 Installation et démarrage
Tapez la commande :
Question 1
cat /etc/hosts
Vériez que la sortie de cette commande comporte bien les lignes suivantes
127.0.0.1 localhost
127.0.1.1 <nom de votre machine locale>
Téléchargez Hbase à l'URL suivante.
Question 2
http://apache.crihan.fr/dist/hbase/stable/hbase-1.2.4-bin.tar.gz
.
Extrayez le contenu de l'archive dans votre home (attention aux quota). Au même
titre qu'Hadoop, Hbase a besoin que la variable d'environnement JAVA_HOME soit
dénie.
ajoutez la ligne suivante dans votre
:
.bashrc
Si ce n'est pas déjà fait
export JAVA_HOME=<chemin vers la JVM courante de votre machine>
Ajouter ensuite les lignes suivantes :
export MY_HBASE_HOME=<votre_repertoire_installation_hbase>
export PATH=$PATH:$MY_HBASE_HOME/bin
Pour prendre en compte ces modications dans votre terminal ouvert tapez :
source ~/.bashrc
1
Vériez que Hbase est opérationnel en tapant :
hbase version
La sortie terminale de cette commande doit être :
HBase 1.2.4
Source code repository git://asf-dev/home/busbey/projects/hbase revision=67592f3d062743907f8c5ae00dbbe1ae4f69e5af
Compiled by busbey on Tue Oct 25 18:10:20 CDT 2016
From source with checksum b45f19b5ac28d9651aa2433a5fa33aa0
Nous allons congurer Hbase en mode pseudo-distribué (tout les démons Hbase en
une seule machine) sur le HDFS. Pour cela éditez le chier
en
ajoutant les properties suivantes :
<property>
Question 3
conf/hbase-site.xml
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
Ceci indique que Hbase sera en mode distribué (plusieurs processus).
<property>
<name>hbase.rootdir</name>
<value>hdfs://localhost:9000/hbase</value>
</property>
Ceci indique le chemin HDFS à utiliser pour stocker les données. Ici ça sera le
dossier
.
/hbase
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>/tmp/zookeeper</value>
</property>
Ceci indique où Zookeeper stockera ses informations sur votre système de chiers
local.
Démarrez les démons du HDFS et de Hbase.
Question 4
start-dfs.sh
start-hbase.sh
Ceci démarre trois démons : Zookeeper, hbase master et regionserver. Vériez que
ces trois démons ont bien été démarrés en tapant la commande
ps aux | grep jvm
Vériez que le dossier
Question 5
Found 8 items
drwxr-xr-x drwxr-xr-x drwxr-xr-x drwxr-xr-x -rw-r--r-- 1
hbase
jlejeune
jlejeune
jlejeune
jlejeune
jlejeune
a bien été créé sur le HDFS et que son contenu soit :
supergroup
supergroup
supergroup
supergroup
supergroup
Page 2
0
0
0
0
42
2016-06-13
2016-06-13
2016-06-13
2016-06-13
2016-06-13
12:26
12:26
12:27
12:19
12:19
/hbase/.tmp
/hbase/MasterProcWALs
/hbase/WALs
/hbase/data
/hbase/hbase.id
-rw-r--r-drwxr-xr-x
1 jlejeune supergroup
- jlejeune supergroup
7 2016-06-13 12:19 /hbase/hbase.version
0 2016-06-13 12:26 /hbase/oldWALs
Contrairement à Hadoop, il est possible de lancer plusieurs démons du même type
sur la même machine. Nous allons démarrer 3 regionServer supplémentaires. Bien que
ceci n'ai pas beaucoup de sens en réalité, ce mécanisme nous permettra cependant
d'émuler un cluster en considérant plusieurs n÷uds regionServer. Le regionServer
écoute sur 2 ports : 16201 et 16301. Pour éviter le conit de port d'écoute, il existe
une commande qui permet de démarrer des démons supplémentaires en décalant le
numéro de port d'écoute de ces dernier. Pour cela tapez :
Question 6
local-regionservers.sh start 2 3 4
Ceci démarrera trois regionServer supplémentaires, écoutant respectivement sur 16202/16302,
16203/16303 et 16204/16304
N.B. : Sur ce même principe il est également possible de lancer des masters de backup
en local mais nous nous limiterons à un seul master dans ce TP.
Une fois que la plate-forme est démarrée, chaque démon démarre un serveur web
sur la machine hôte (localhost) an de pouvoir superviser son état à l'aide d'un
navigateur. Vous pouvez voir l'interface Web du master au port 16010 et les interfaces
des diérents RegionServer au port 1630X où X représente l'oset.
Pour taper des commandes shell Hbase, il vous est possible de lancer la commande :
Question 7
Question 8
hbase shell
qui vous ouvrira un nouvel invite de commande et vous permettra de lancer des
commandes Hbase en mode interactif (pour revenir au shell bash, taper ). Il est
également possible d'utiliser le shell hbase en mode non interactif, c'est à dire en
lançant les commandes Hbase directement depuis le shell bash. Pour cela il sut
d'envoyer la commande à exécuter sur l'entrée standard de
. Achez le
contenu de la table hbase : meta avec le mode non interactif.
exit
hbase shell
Exercice 2 Création d'une table
Dans cet exercice nous allons créer une table HBase pour stocker des données de l'entreprise Booble (voir TD Map-Reduce). Nous souhaitons donc avoir la table
ayant le schéma suivant :
cf1
rowkey date hour address keywords
... ... ... ...
...
connections
Créez une telle table.
An de remplir cette table nous allons créer un chier de données qui sera lu par un
programme. Au fur et à mesure de la lecture les données seront insérées dans la table.
Question 1
Page 3
Créez un chier de données de 8 Mo correspondant au format Booble grâce au script
python generateData.py qui vous a été fourni.
Une première solution serait de remplir la table à partir du chier de données créé
à la question précédente avec l'utilisation d'un script bash suivant que l'on écrirait
dans un chier
Question 2
Question 3
script.sh
#!/bin/bash
cpt=0
while read date hour adress keywords
do
echo "put
echo "put
echo "put
echo "put
cpt=`expr
'connections','row$cpt','cf1:date','$date'"
'connections','row$cpt','cf1:hour','$hour'"
'connections','row$cpt','cf1:adress','$adress'"
'connections','row$cpt','cf1:keywords','$keywords'"
$cpt + 1` # attention ici ce sont des back-quotes (AltGR - 7)
done
et que l'on appellerait de la manière suivante
cat fichier_donne | script.sh | hbase shell
Cette solution est-elle une bonne solution?
Pour la suite, repartir d'une table
vierge (eacez-la et recréez-la si nécessaire).
La deuxième solution que nous proposons pour remplir la table est l'utilisation d'un
programme Map-Reduce. Pour cela démarrez yarn et copiez le chier de données sur
la racine du HDFS.
Pour que la compilation se passe bien dans Eclipse, pensez à ajouter dans le build
path de votre projet eclipse les chiers jar présents dans le dossier
Question 4
connections
Question 5
Question 6
$MY_HBASE_HOME/lib
Attention il peut y avoir des conit de nom de classe lors de l'ajout automatique des
import. Le cas échéant, choississez les classes issues des packages :
org.apache.hadoop.mapreduce
org.apache.hadoop.fs
org.apache.hadoop.conf
org.apache.hadoop.fs
org.apache.hadoop.io
org.apache.hadoop.hbase.client
org.apache.hadoop.hbase.mapreduce
org.apache.hadoop.hbase.util
Page 4
Créez dans votre projet Eclipse un package hbase. Dans ce package créez une classe
FileToHbase qui sera un programme map-reduce. Ce programme map-reduce aura
pour entrée un chier de donnée et qui écrira sa sortie dans une base Hbase. Ce
programme doit permettre d'importer n'importe quel chier texte vers une table de
Hbase. Ainsi ce programme prendra 3 arguments :
le nom de la table HBase à remplir
le chemin HDFS du chier source
le nom des colonnes de la table séparées par des " ". Le nieme nom de colonne
cet argument
Dansdenotre
exemple correspond
la commandeau ànieme
lancermot
serad'une
: ligne de chier
Question 7
_
yarn jar votre_jar.jar
hbase.FileToHbase connections /Booble_0 "cf1:date_cf1:hour_cf1:address_cf1:keywords"
Les rowkeys seront un hashage md5 de la ligne. Vous utiliserez la méthode
byte[] DigestUtils.md5(String line);
pour passer aux diérentes tâches de map ou reduce des informations depuis le
programme main, vous pouvez utiliser les méthodes set et gets de la classe Conguration. Par exemple, si l'on souhaite communiquer la valeur du 3ème argument
faire dans le main
conf.set("argument3", args[2]);
Vous pouvez récupérer l'information dans les tâches de map ou de reduce via le
contexte passé en paramètre :
Indications complémentaires :
context.getConfiguration().get("argument3");
, créez votre chier jar
(appelons-le foo.jar) avec les chiers class de votre programme (voir TP Hadoop pour
la commande). Avant de lancer le job map-reduce, il faut ajouter dans l'archive jar
créées précédemment les chiers jar de HBase. Pour cela tapez :
Question 8
Une fois que votre programme compile correctement
tmp=$PWD && cd $MY_HBASE_HOME && jar uvf $tmp/foo.jar lib && cd $tmp
Lancez votre programme et assurez vous que la table "connections" est remplie correctement.
Testez votre programme avec un chier plus gros.
Testez votre programme avec les autres type de données comme LastFM et StereoPrix.
Question 9
Question 10
Exercice 3 Table HBase vers chier HDFS
A présent notre objectif est l'inverse du précédent exercice : lire une table HBase et de
produire en sortie un seul chier texte ayant le même format que le chier initial. Nous
garderons comme table d'entrée, la table "connections" stockant les données de l'entreprise Booble. Cependant nous souhaiterons que les lignes du chier de sortie apparaissent
dans l'ordre chronologique (date + heure croissantes).
Expliquez pourquoi la clé intermédiaire nécessitera la création d'une classe spécique
qui implémentera l'interface WritableComparable.
Question 1
Page 5
Dans votre package Java hbase, écrivez la classe permettant d'implémenter la clé
intermédiaire.
Codez la classe BoobleHBaseToFile qui sera un programme map-reduce permettant
de réaliser l'objectif de l'exercice.
Question 2
Question 3
Exercice 4 MapReduce et Hbase en lecture/écriture
Recoder le calcul map-reduce de Booble en utilisant en entrée et en sortie une table
HBase.
Question 1
Page 6

Documents pareils