SlideShare une entreprise Scribd logo
1  sur  12
Télécharger pour lire hors ligne
Institut National des Sciences Appliquées et de Technologie Tunisie
Big Data
2015-2016
TP4- NOSQL ORIENTE
COLONNES AVEC
CASSANDRA
Dr. Lilia SFAXI
Objectifs du TP : Se familiariser avec les bases de données NOSQL,
orientées colonnes, avec Cassandra.
TP4 : NOSQL Orientées Colonnes avec Cassandra
Page 2
I. Présentation de Cassandra
Cassandra1 est une base de données NOSQL orientée colonnes, destinée
pour de grands volumes de données, hétérogènes, de structure et taille
évolutives et hautement disponibles, sans compromettre la performance.
Un très large panel d’entreprises, dont Twitter, Netflix et eBay, utilisent
Cassandra. Pour voir la liste complète de ses utilisateurs, visiter:
http://planetcassandra.org/companies/
II. Installer Cassandra
Pour les besoins de ce TP, nous allons installer Cassandra sur la machine
virtuelle CentOS que nous avons utilisé pour les deux premier TP sur Hadoop.
Pour cela, télécharger la dernière version de Cassandra sur:
http://cassandra.apache.org/download/
Décompresser simplement le fichier que vous venez de télécharger.
Désormais, on appellera le répertoire obtenu après décompression:
<cass_home>.
III. Démarrer Cassandra
Pour commencer:
1. Lancer le serveur Cassandra. (si on omet le –f, il se lancera en arrière
plan)
sudo <cass_home>/bin/cassandra –f
2. Pour arrêter Cassandra, cliquer sur:
Ctrl-C
3. Pour tuer le processus, taper:
pkill -f CassandraDaemon
1 Apache Cassandra : http://cassandra.apache.org/
TP4 : NOSQL Orientées Colonnes avec Cassandra
Page 3
IV. CQL : Cassandra Query Language
CQL est l’interface par défaut dans le SGBD Cassandra. C’est un langage
SQL-Like, pour la manipulation des données dans la base.
Nous citons ci-dessous les commandes de base de CQL. Pour plus de détails,
consulter le fichier CQL.html que je vous ai fourni dans le drive partagé.
IV.1. Notions de Base
- Pour se connecter à l’instance locale de CQL
<cass_home>/bin/cqlsh
- Créer un Keyspace :
CREATE KEYSPACE mykeyspace WITH REPLICATION =
{ 'class' : 'SimpleStrategy', 'replication_factor' : 1};
- Afficher l’ensemble des keyspaces:
select * from system.schema_keyspaces;
ou:
describe keyspaces;
- Se connecter au keyspace :
USE mykeyspace;
- Créer une table (il est possible de remplacer le terme TABLE par
COLUMNFAMILY).
CREATE TABLE users (
user_id int PRIMARY KEY,
fname text,
lname text
);
- Afficher les tables existantes:
describe tables;
- Remplir la table:
INSERT INTO users (user_id, fname, lname)
VALUES (1745, 'john', 'smith');
TP4 : NOSQL Orientées Colonnes avec Cassandra
Page 4
- Afficher les données insérées:
SELECT * FROM users;
- Créer un index sur une colonne, puis extraire les données selon cette
colonne :
CREATE INDEX ON users (lname);
SELECT * FROM users WHERE lname = 'smith';
- Créer une table avec une clef composée :
CREATE TABLE tab2 (
id1 int,
id2 int,
first_name varchar,
last_name varchar,
PRIMARY KEY (id1, id2));
- Ajouter un nouveau champ à la table:
ALTER TABLE users ADD telephone text;
- Modifier la valeur d’un enregistrement:
UPDATE users SET telephone = “21212121”
WHERE user_id=1745;
- Vider une table :
TRUNCATE users;
- Supprimer une table :
DROP users;
IV.2. Les Collections
Dans les bases de données relationnelles traditionnelles, il est fortement
déconseillé d’utiliser des valeurs multiples dans un même champs. Pour cela, il
faudrait créer une autre table, et faire une jointure.
Dans les bases NOSQL, le but ultime est de minimiser au maximum les jointures,
pour faciliter et accélerer la navigation. C’est pour cette raison que des
collections comme les sets, listes et maps sont utilisés.
TP4 : NOSQL Orientées Colonnes avec Cassandra
Page 5
Attention à ne pas abuser de ce type de champs: il faut s’assurer que les
collections stockent de petites quantités de données, car une requête
Cassandra lit une collection en entier, c’est à l’utilisateur de les parcourir
ensuite.
IV.2.1. Sets
Un ensemble (set) est un ensemble non ordonné de valeurs. En utlisant le type
de données set, il est possible de résoudre le problème de champs multiples,
comme les emails par exemple.
a. Création
Prenons par exemple le cas d’un ensemble d’emails pour un utilisateur. C’est
représenté par un seul champ, de type set<text>, et est défini dans la table
users comme ceci:
CREATE TABLE users (
user_id int PRIMARY KEY,
fname text,
lname text,
emails set<text>
);
b. Insertion
Pour insérer des données dans l’ensemble, placer les valeurs entre accolades
et les séparer par des virgules. Les différentes valeurs dans un ensemble
doivent être uniques.
INSERT INTO users (user_id, fname, lname, emails)
VALUES(1234, 'Frodo', 'Baggins',
{'f@baggins.com', 'baggins@gmail.com'});
c. Ajout
Ajouter un élément à un ensemble en utilisant la commande UPDATE :
UPDATE users
SET emails = emails + {'fb@friendsofmordor.org'}
WHERE user_id = 1234;
d. Extraction
TP4 : NOSQL Orientées Colonnes avec Cassandra
Page 6
Extraire les adresses email comme ceci:
SELECT user_id, emails FROM users WHERE user_id = 1234;
Les données extraites sont retournées par ordre, selon leur type. Par exemple,
les données textuelles sont ordonnées par ordre alphabétique.
e. Suppression
Pour supprimer un élément de l’ensemble, utiliser l’opérateur (-):
UPDATE users SET emails = emails - {'fb@friendsofmordor.org'}
WHERE user_id = 1234;
Pour supprimer tout l’ensemble:
UPDATE users SET emails = {} WHERE user_id = 1234;
ou bien :
DELETE emails FROM users WHERE user_id = 1234;
Une fois vidée, une collection (ensemble, liste ou map) est assimilée ainsi à la
valeur null.
IV.2.2. Listes
Une liste est utilisée quand l’ordre d’insertion des éléments compte, ou quand
on veut pouvoir insérer la même valeur plusieurs fois.
a. Création
Ajouter une liste des meilleurs endroits visités à la table users.
ALTER TABLE users ADD top_places list<text>;
b. Insertion
UPDATE users
SET top_places = [ 'rivendell', 'rohan' ]
WHERE user_id = 1234;
On remarquera ici que les éléments de la liste sont placés entre crochets.
c. Ajout
Pour ajouter un nouvel élément à la fin de la liste :
TP4 : NOSQL Orientées Colonnes avec Cassandra
Page 7
UPDATE users
SET top_places = top_places + [ 'mordor' ]
WHERE user_id = 1234;
Pour affecter un élément à un emplacement donné (écrase l’ancienne
valeur) :
UPDATE users
SET top_places[1] = 'riddermark' WHERE user_id = 1234;
Quand un élément est ajouté à la fin (ou au début) de la liste, cette dernière
n’est pas lue. On écrit directement la valeur à son emplacement. Par contre,
quand un élément est placé dans une position particulière, Cassandra lit la
liste entière, puis ajoute le nouvel élément, ce qui provoque une plus grande
latence.
d. Suppression
Supprimer un élément de la liste, en utilisant son index:
DELETE top_places[3] FROM users WHERE user_id = 1234;
Supprimer tous les éléments ayant une valeur donnée d’une liste:
SET top_places = top_places - ['riddermark']
WHERE user_id = 1234;
L’utilisation de cette dernière commande est meilleure que la première, car
elle protège contre les problèmes d’accès concurrent: avec la première
méthode, si un autre client ajoute des éléments à la liste en même temps, on
risque de supprimer la mauvaise valeur, ce qui n’est pas un problème avec la
deuxième méthode.
e. Extraction
SELECT user_id, top_places FROM users WHERE user_id = 1234;
IV.2.3. Maps
Une map permet d’associer deux éléments, sous forme de clef/valeur. Elle
peut être utilisée, par exemple, pour sauvegarder les horaires des différents
évènements dans un profil utilisateur.
TP4 : NOSQL Orientées Colonnes avec Cassandra
Page 8
Chaque élément dans une Map est stocké dans Cassandra comme étant
une colonne que vous pouvez modifier, remplacer et requêter.
a. Création
ALTER TABLE users ADD todo map<timestamp, text> ;
b. Insertion
Un élément dans une Map est un couple d’éléments entre accolades,
séparés par une virgule.
UPDATE users SET todo = {
'2012-9-24' : 'enter mordor',
'2012-10-2 12:00' : 'throw ring into mount doom'
} WHERE user_id = 1234;
c. Ajout
Ajouter un élément spécifique, en utilisant comme clef la valeur du
timestamp entre crochets:
UPDATE users
SET todo['2012-10-2 12:00'] = 'throw my precious into
mount doom' WHERE user_id = 1234;
Utiliser INSERT pour spécifier des données dans une Map :
INSERT INTO users (user_id,todo) VALUES ( 1234,
{ '2013-9-22 12:01' : 'birthday wishes to Bilbo',
'2013-10-1 18:00' : 'Check into Inn of Prancing Pony'
});
Ceci remplacera toute la Map pour l’utilisateur frodo.
d. Suppression
DELETE todo['2012-9-24'] FROM users WHERE user_id = 1234;
e. Extraction
SELECT user_id, todo FROM users WHERE user_id = 1234;
TP4 : NOSQL Orientées Colonnes avec Cassandra
Page 9
V. Manipulation de Cassandra avec Python
V.1. API pycassa
Pycassa est un client Python pour manipuler la base de données Cassandra.
Le module à intégrer dans python est récupéré à l'adresse suivante:
https://pypi.python.org/pypi/pycassa
V.2. Installer pycassa
Pour installer le module pycassa, comme tout autre module de Python sur une
machine Linux, suivre les étapes suivantes :
- Décompresser l'archive dans le répertoire de votre choix
- Avec l'invite de commande, déplacez-vous vers ce répertoire, vous
devriez y trouver un fichier setup.py
- Taper:
sudo python setup.py install
Une fois le module installé, l'instruction suivante ne devrait plus lancer
d'exception si on l'exécute avec python:
import pycassa
V.3. Utilisation de pycassa
Nous allons montrer dans ce qui suit les différentes instructions dont nous
aurons besoin pour manipuler la base Cassandra avec python. Pour plus
d'informations, consulter la documentation de pycassa, disponible en ligne à
l'adresse :
http://pycassa.github.io/pycassa/index.html
V.3.1. Connexion à Cassandra
Pour se connecter à un keyspace KS en localhost, utiliser les instructions
suivantes:
pool = pycassa.ConnectionPool(keyspace='KS',
server_list=['127.0.0.1:9160'])
Pour appeler une table (column family) cf1, utiliser:
TP4 : NOSQL Orientées Colonnes avec Cassandra
Page 10
cf1 = pycassa.ColumnFamily(pool, 'cf1')
V.3.2. Ecriture des données
Pour insérer les colonnes associées à la clef key1 dans une table cf1, utiliser:
cf1.insert(key1, {'col1': 'val1', 'col2': 'val2'})
V.3.3. Lecture des données
Pour extraire des données à partir de la table cf1, utiliser:
data = cf1.get(key1,columns=['col1','col2']);
Cela va extraire les valeurs des colonnes col1 et col2 associées à la clef key1,
et les stocker dans data, qui est de type orderedDict. orderedDict est une liste
de couples (clef,valeur) ordonnées.
Ainsi, dans notre variable data, les champs seront ordonnés comme suit :
{'col1': 'val1', 'col2': 'val2'}
Pour extraire le premier couple, utiliser :
data.items()[0]
Pour extraire la première valeur (val1), utiliser :
data.items()[0][1]
V.3.4. Nombre d'entrées
Pour connaitre le nombre d'entrées (lignes) dans une table cf1, utiliser :
len(list(cf1.get_range()
V.4. Objectifs du TP
Dans ce TP, le but est de charger des données volumineuses dans Cassandra,
et les manipuler avec l’API pycassa.
Pour cela, nous allons:
1. Créer la base de données avec Cassandra
2. Remplir la base de données
3. Afficher les données lues
TP4 : NOSQL Orientées Colonnes avec Cassandra
Page 11
V.5. Réalisation
V.5.1. Création de la base de données et des tables
Créer un keyspace Cassandra appelé wordcount, contenant une table bible
contenant un champs id (entier, clef primaire) et un champs line(texte)
Pour que pycassa puisse accéder aux données des tables, ces dernières
doivent être créées avec la mention “WITH COMPACT STORAGE“ insérée à la
fin de l'instruction de création.
V.5.2. Remplissage de la table bible
Pour remplir la table bible avec des lignes de texte, nous avons choisi d'utiliser
comme source le texte d'une bible, trouvé ici:
https://sites.google.com/site/ruwach/bibletext .
Créer un répertoire tp4 à l'emplacement de votre choix. C'est dans ce
répertoire que nous allons mettre tous les fichiers nécessaires à notre travail.
- Extraire l'archive donnée dans le répertoire tp3. Renommez le répertoire
obtenu en : bible.
- Ecrire un fichier populate.py, permettant d'utiliser l'API pycassa pour
stocker dans la table bible les lignes lues à partir de l'entrée standard.
Chaque ligne sera stockée en entier dans le champ line, avec comme
identifiant un entier incrémental.
- Pour exécuter le fichier populate.py et lui donner comme entrée le
contenu du répertoire bible, utiliser l'instruction suivante:
find bible -type f -name "*.txt" -print0 | xargs -0 cat | sed
"s/^[0-9 ]*//" | python populate.py
- Vérifier que votre table contient bien le texte. Pour cela, taper:
select * from bible where id = 20;
Et vérifier que le résultat est bien le suivant:
TP4 : NOSQL Orientées Colonnes avec Cassandra
Page 12
VI. Homework
• Choisir dans votre réseau social quels types de données pourront être
stockés dans une base de données NOSQL orientée colonnes.
• Concevoir vos tables, les créer avec Cassandra et les remplir avec de
premières données de test.
• Remarque : Vous pouvez utiliser python avec l’API pycassa (comme
dans le TP), ou alors Java grâce à l’API Datastax Java Driver

Contenu connexe

Tendances

Cours Big Data Chap3
Cours Big Data Chap3Cours Big Data Chap3
Cours Big Data Chap3Amal Abid
 
Big Data, Hadoop & Spark
Big Data, Hadoop & SparkBig Data, Hadoop & Spark
Big Data, Hadoop & SparkAlexia Audevart
 
BigData_TP5 : Neo4J
BigData_TP5 : Neo4JBigData_TP5 : Neo4J
BigData_TP5 : Neo4JLilia Sfaxi
 
Cours Big Data Chap2
Cours Big Data Chap2Cours Big Data Chap2
Cours Big Data Chap2Amal Abid
 
Cours Big Data Chap5
Cours Big Data Chap5Cours Big Data Chap5
Cours Big Data Chap5Amal Abid
 
Cours Big Data Chap1
Cours Big Data Chap1Cours Big Data Chap1
Cours Big Data Chap1Amal Abid
 
TP1 Big Data - MapReduce
TP1 Big Data - MapReduceTP1 Big Data - MapReduce
TP1 Big Data - MapReduceAmal Abid
 
Les Base de Données NOSQL -Presentation -
Les Base de Données NOSQL -Presentation -Les Base de Données NOSQL -Presentation -
Les Base de Données NOSQL -Presentation -IliasAEA
 
Cours HBase et Base de Données Orientées Colonnes (HBase, Column Oriented Dat...
Cours HBase et Base de Données Orientées Colonnes (HBase, Column Oriented Dat...Cours HBase et Base de Données Orientées Colonnes (HBase, Column Oriented Dat...
Cours HBase et Base de Données Orientées Colonnes (HBase, Column Oriented Dat...Hatim CHAHDI
 
BigData_Chp5: Putting it all together
BigData_Chp5: Putting it all togetherBigData_Chp5: Putting it all together
BigData_Chp5: Putting it all togetherLilia Sfaxi
 
Intégration des données avec Talend ETL
Intégration des données avec Talend ETLIntégration des données avec Talend ETL
Intégration des données avec Talend ETLLilia Sfaxi
 
exercices business intelligence
exercices business intelligence exercices business intelligence
exercices business intelligence Yassine Badri
 
TP2 Big Data HBase
TP2 Big Data HBaseTP2 Big Data HBase
TP2 Big Data HBaseAmal Abid
 
Rapport PFE : Développement D'une application de gestion des cartes de fidéli...
Rapport PFE : Développement D'une application de gestion des cartes de fidéli...Rapport PFE : Développement D'une application de gestion des cartes de fidéli...
Rapport PFE : Développement D'une application de gestion des cartes de fidéli...Riadh K.
 
Base de données NoSQL
Base de données NoSQLBase de données NoSQL
Base de données NoSQLOussama ARBI
 

Tendances (20)

Cours Big Data Chap3
Cours Big Data Chap3Cours Big Data Chap3
Cours Big Data Chap3
 
Big Data, Hadoop & Spark
Big Data, Hadoop & SparkBig Data, Hadoop & Spark
Big Data, Hadoop & Spark
 
BigData_TP5 : Neo4J
BigData_TP5 : Neo4JBigData_TP5 : Neo4J
BigData_TP5 : Neo4J
 
Cours Big Data Chap2
Cours Big Data Chap2Cours Big Data Chap2
Cours Big Data Chap2
 
Cours Big Data Chap5
Cours Big Data Chap5Cours Big Data Chap5
Cours Big Data Chap5
 
Les BD NoSQL
Les BD NoSQLLes BD NoSQL
Les BD NoSQL
 
Cours Big Data Chap1
Cours Big Data Chap1Cours Big Data Chap1
Cours Big Data Chap1
 
Hive ppt (1)
Hive ppt (1)Hive ppt (1)
Hive ppt (1)
 
TP1 Big Data - MapReduce
TP1 Big Data - MapReduceTP1 Big Data - MapReduce
TP1 Big Data - MapReduce
 
Les Base de Données NOSQL -Presentation -
Les Base de Données NOSQL -Presentation -Les Base de Données NOSQL -Presentation -
Les Base de Données NOSQL -Presentation -
 
Cours HBase et Base de Données Orientées Colonnes (HBase, Column Oriented Dat...
Cours HBase et Base de Données Orientées Colonnes (HBase, Column Oriented Dat...Cours HBase et Base de Données Orientées Colonnes (HBase, Column Oriented Dat...
Cours HBase et Base de Données Orientées Colonnes (HBase, Column Oriented Dat...
 
BigData_Chp5: Putting it all together
BigData_Chp5: Putting it all togetherBigData_Chp5: Putting it all together
BigData_Chp5: Putting it all together
 
Technologies pour le Big Data
Technologies pour le Big DataTechnologies pour le Big Data
Technologies pour le Big Data
 
Intégration des données avec Talend ETL
Intégration des données avec Talend ETLIntégration des données avec Talend ETL
Intégration des données avec Talend ETL
 
exercices business intelligence
exercices business intelligence exercices business intelligence
exercices business intelligence
 
TP2 Big Data HBase
TP2 Big Data HBaseTP2 Big Data HBase
TP2 Big Data HBase
 
Chapitre 3 spark
Chapitre 3 sparkChapitre 3 spark
Chapitre 3 spark
 
Rapport PFE : Développement D'une application de gestion des cartes de fidéli...
Rapport PFE : Développement D'une application de gestion des cartes de fidéli...Rapport PFE : Développement D'une application de gestion des cartes de fidéli...
Rapport PFE : Développement D'une application de gestion des cartes de fidéli...
 
Base de données NoSQL
Base de données NoSQLBase de données NoSQL
Base de données NoSQL
 
Chapitre 2 hadoop
Chapitre 2 hadoopChapitre 2 hadoop
Chapitre 2 hadoop
 

En vedette

Business Intelligence
Business IntelligenceBusiness Intelligence
Business IntelligenceLilia Sfaxi
 
Thinking Big - Big data: principes et architecture
Thinking Big - Big data: principes et architecture Thinking Big - Big data: principes et architecture
Thinking Big - Big data: principes et architecture Lilia Sfaxi
 
Client-side JavaScript
Client-side JavaScriptClient-side JavaScript
Client-side JavaScriptLilia Sfaxi
 
Introduction au Web
Introduction au WebIntroduction au Web
Introduction au WebLilia Sfaxi
 
Javascript Design Patterns
Javascript Design PatternsJavascript Design Patterns
Javascript Design PatternsLilia Sfaxi
 
Mobile developement
Mobile developementMobile developement
Mobile developementLilia Sfaxi
 
Server-side JS with NodeJS
Server-side JS with NodeJSServer-side JS with NodeJS
Server-side JS with NodeJSLilia Sfaxi
 

En vedette (12)

Business Intelligence
Business IntelligenceBusiness Intelligence
Business Intelligence
 
Thinking Big - Big data: principes et architecture
Thinking Big - Big data: principes et architecture Thinking Big - Big data: principes et architecture
Thinking Big - Big data: principes et architecture
 
Thinking BIG
Thinking BIGThinking BIG
Thinking BIG
 
Client-side JavaScript
Client-side JavaScriptClient-side JavaScript
Client-side JavaScript
 
Core JavaScript
Core JavaScriptCore JavaScript
Core JavaScript
 
Introduction au Web
Introduction au WebIntroduction au Web
Introduction au Web
 
Javascript Design Patterns
Javascript Design PatternsJavascript Design Patterns
Javascript Design Patterns
 
Angular
AngularAngular
Angular
 
Testing Angular
Testing AngularTesting Angular
Testing Angular
 
Mobile developement
Mobile developementMobile developement
Mobile developement
 
Server-side JS with NodeJS
Server-side JS with NodeJSServer-side JS with NodeJS
Server-side JS with NodeJS
 
Thinking big
Thinking bigThinking big
Thinking big
 

Similaire à BigData_TP4 : Cassandra

Activity
ActivityActivity
Activitydido
 
Base NoSql et Python
Base NoSql et PythonBase NoSql et Python
Base NoSql et Pythonyboussard
 
Digital GraphTour Paris - Neo4j 4.0, les nouveautés
Digital GraphTour Paris - Neo4j 4.0, les nouveautésDigital GraphTour Paris - Neo4j 4.0, les nouveautés
Digital GraphTour Paris - Neo4j 4.0, les nouveautésNeo4j
 
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...Normandy JUG
 
Modèle de domaine riche dans une application métier complexe un exemple pratique
Modèle de domaine riche dans une application métier complexe un exemple pratiqueModèle de domaine riche dans une application métier complexe un exemple pratique
Modèle de domaine riche dans une application métier complexe un exemple pratiqueVladyslav Riabchenko
 
Le futur d'apache cassandra
Le futur d'apache cassandraLe futur d'apache cassandra
Le futur d'apache cassandraDuyhai Doan
 
Présentation langage de programmationHive.pdf
Présentation langage de programmationHive.pdfPrésentation langage de programmationHive.pdf
Présentation langage de programmationHive.pdfkhalidmoussaid4
 
Php mysql cours
Php mysql coursPhp mysql cours
Php mysql courszan
 
c11-gerer-les-donnees-resume-theorique-partie1-6311eb2f1d745.pdf
c11-gerer-les-donnees-resume-theorique-partie1-6311eb2f1d745.pdfc11-gerer-les-donnees-resume-theorique-partie1-6311eb2f1d745.pdf
c11-gerer-les-donnees-resume-theorique-partie1-6311eb2f1d745.pdftepoha4848
 
Développement Web- PHP (partie II).pdf
Développement Web- PHP (partie II).pdfDéveloppement Web- PHP (partie II).pdf
Développement Web- PHP (partie II).pdfYasushiTsubakik
 

Similaire à BigData_TP4 : Cassandra (20)

Cassandra
CassandraCassandra
Cassandra
 
Activity
ActivityActivity
Activity
 
SQL-ORACLE.pdf
SQL-ORACLE.pdfSQL-ORACLE.pdf
SQL-ORACLE.pdf
 
SQL-ORACLE.pptx
SQL-ORACLE.pptxSQL-ORACLE.pptx
SQL-ORACLE.pptx
 
TP7_Master.pdf
TP7_Master.pdfTP7_Master.pdf
TP7_Master.pdf
 
TP7_Master.pdf
TP7_Master.pdfTP7_Master.pdf
TP7_Master.pdf
 
Base NoSql et Python
Base NoSql et PythonBase NoSql et Python
Base NoSql et Python
 
3-android.pdf
3-android.pdf3-android.pdf
3-android.pdf
 
Atelier18
Atelier18 Atelier18
Atelier18
 
Digital GraphTour Paris - Neo4j 4.0, les nouveautés
Digital GraphTour Paris - Neo4j 4.0, les nouveautésDigital GraphTour Paris - Neo4j 4.0, les nouveautés
Digital GraphTour Paris - Neo4j 4.0, les nouveautés
 
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
Fork / Join, Parallel Arrays, Lambdas : la programmation parallèle (trop ?) f...
 
Elastic serach
Elastic serachElastic serach
Elastic serach
 
Modèle de domaine riche dans une application métier complexe un exemple pratique
Modèle de domaine riche dans une application métier complexe un exemple pratiqueModèle de domaine riche dans une application métier complexe un exemple pratique
Modèle de domaine riche dans une application métier complexe un exemple pratique
 
Le futur d'apache cassandra
Le futur d'apache cassandraLe futur d'apache cassandra
Le futur d'apache cassandra
 
Présentation langage de programmationHive.pdf
Présentation langage de programmationHive.pdfPrésentation langage de programmationHive.pdf
Présentation langage de programmationHive.pdf
 
Php mysql cours
Php mysql coursPhp mysql cours
Php mysql cours
 
c11-gerer-les-donnees-resume-theorique-partie1-6311eb2f1d745.pdf
c11-gerer-les-donnees-resume-theorique-partie1-6311eb2f1d745.pdfc11-gerer-les-donnees-resume-theorique-partie1-6311eb2f1d745.pdf
c11-gerer-les-donnees-resume-theorique-partie1-6311eb2f1d745.pdf
 
Développement Web- PHP (partie II).pdf
Développement Web- PHP (partie II).pdfDéveloppement Web- PHP (partie II).pdf
Développement Web- PHP (partie II).pdf
 
Php1
Php1Php1
Php1
 
MariaDB une base de donnees NewSQL
MariaDB une base de donnees NewSQLMariaDB une base de donnees NewSQL
MariaDB une base de donnees NewSQL
 

Plus de Lilia Sfaxi

chp1-Intro à l'urbanisation des SI.pdf
chp1-Intro à l'urbanisation des SI.pdfchp1-Intro à l'urbanisation des SI.pdf
chp1-Intro à l'urbanisation des SI.pdfLilia Sfaxi
 
Plan d'études_INSAT_2022_2023.pdf
Plan d'études_INSAT_2022_2023.pdfPlan d'études_INSAT_2022_2023.pdf
Plan d'études_INSAT_2022_2023.pdfLilia Sfaxi
 
Lab1-DB-Cassandra
Lab1-DB-CassandraLab1-DB-Cassandra
Lab1-DB-CassandraLilia Sfaxi
 
TP2-UML-Correction
TP2-UML-CorrectionTP2-UML-Correction
TP2-UML-CorrectionLilia Sfaxi
 
TP1-UML-Correction
TP1-UML-CorrectionTP1-UML-Correction
TP1-UML-CorrectionLilia Sfaxi
 
TP0-UML-Correction
TP0-UML-CorrectionTP0-UML-Correction
TP0-UML-CorrectionLilia Sfaxi
 
TD4-UML-Correction
TD4-UML-CorrectionTD4-UML-Correction
TD4-UML-CorrectionLilia Sfaxi
 
TD3-UML-Séquences
TD3-UML-SéquencesTD3-UML-Séquences
TD3-UML-SéquencesLilia Sfaxi
 
TD3-UML-Correction
TD3-UML-CorrectionTD3-UML-Correction
TD3-UML-CorrectionLilia Sfaxi
 
TD2 - UML - Correction
TD2 - UML - CorrectionTD2 - UML - Correction
TD2 - UML - CorrectionLilia Sfaxi
 
TD1-UML-correction
TD1-UML-correctionTD1-UML-correction
TD1-UML-correctionLilia Sfaxi
 
Android - Tp1 - installation et démarrage
Android - Tp1 -   installation et démarrageAndroid - Tp1 -   installation et démarrage
Android - Tp1 - installation et démarrageLilia Sfaxi
 
Android - Tp2 - Elements graphiques
Android - Tp2 - Elements graphiques Android - Tp2 - Elements graphiques
Android - Tp2 - Elements graphiques Lilia Sfaxi
 
Android - Tp3 - intents
Android - Tp3 -  intentsAndroid - Tp3 -  intents
Android - Tp3 - intentsLilia Sfaxi
 
Android - TPBonus - web services
Android - TPBonus - web servicesAndroid - TPBonus - web services
Android - TPBonus - web servicesLilia Sfaxi
 
Android - Tp4 - graphiques avancés
Android - Tp4 - graphiques avancésAndroid - Tp4 - graphiques avancés
Android - Tp4 - graphiques avancésLilia Sfaxi
 

Plus de Lilia Sfaxi (20)

chp1-Intro à l'urbanisation des SI.pdf
chp1-Intro à l'urbanisation des SI.pdfchp1-Intro à l'urbanisation des SI.pdf
chp1-Intro à l'urbanisation des SI.pdf
 
Plan d'études_INSAT_2022_2023.pdf
Plan d'études_INSAT_2022_2023.pdfPlan d'études_INSAT_2022_2023.pdf
Plan d'études_INSAT_2022_2023.pdf
 
Lab3-DB_Neo4j
Lab3-DB_Neo4jLab3-DB_Neo4j
Lab3-DB_Neo4j
 
Lab2-DB-Mongodb
Lab2-DB-MongodbLab2-DB-Mongodb
Lab2-DB-Mongodb
 
Lab1-DB-Cassandra
Lab1-DB-CassandraLab1-DB-Cassandra
Lab1-DB-Cassandra
 
TP2-UML-Correction
TP2-UML-CorrectionTP2-UML-Correction
TP2-UML-Correction
 
TP1-UML-Correction
TP1-UML-CorrectionTP1-UML-Correction
TP1-UML-Correction
 
TP0-UML-Correction
TP0-UML-CorrectionTP0-UML-Correction
TP0-UML-Correction
 
TD4-UML
TD4-UMLTD4-UML
TD4-UML
 
TD4-UML-Correction
TD4-UML-CorrectionTD4-UML-Correction
TD4-UML-Correction
 
TD3-UML-Séquences
TD3-UML-SéquencesTD3-UML-Séquences
TD3-UML-Séquences
 
TD3-UML-Correction
TD3-UML-CorrectionTD3-UML-Correction
TD3-UML-Correction
 
TD2 - UML - Correction
TD2 - UML - CorrectionTD2 - UML - Correction
TD2 - UML - Correction
 
TD1 - UML - DCU
TD1 - UML - DCUTD1 - UML - DCU
TD1 - UML - DCU
 
TD1-UML-correction
TD1-UML-correctionTD1-UML-correction
TD1-UML-correction
 
Android - Tp1 - installation et démarrage
Android - Tp1 -   installation et démarrageAndroid - Tp1 -   installation et démarrage
Android - Tp1 - installation et démarrage
 
Android - Tp2 - Elements graphiques
Android - Tp2 - Elements graphiques Android - Tp2 - Elements graphiques
Android - Tp2 - Elements graphiques
 
Android - Tp3 - intents
Android - Tp3 -  intentsAndroid - Tp3 -  intents
Android - Tp3 - intents
 
Android - TPBonus - web services
Android - TPBonus - web servicesAndroid - TPBonus - web services
Android - TPBonus - web services
 
Android - Tp4 - graphiques avancés
Android - Tp4 - graphiques avancésAndroid - Tp4 - graphiques avancés
Android - Tp4 - graphiques avancés
 

BigData_TP4 : Cassandra

  • 1. Institut National des Sciences Appliquées et de Technologie Tunisie Big Data 2015-2016 TP4- NOSQL ORIENTE COLONNES AVEC CASSANDRA Dr. Lilia SFAXI Objectifs du TP : Se familiariser avec les bases de données NOSQL, orientées colonnes, avec Cassandra.
  • 2. TP4 : NOSQL Orientées Colonnes avec Cassandra Page 2 I. Présentation de Cassandra Cassandra1 est une base de données NOSQL orientée colonnes, destinée pour de grands volumes de données, hétérogènes, de structure et taille évolutives et hautement disponibles, sans compromettre la performance. Un très large panel d’entreprises, dont Twitter, Netflix et eBay, utilisent Cassandra. Pour voir la liste complète de ses utilisateurs, visiter: http://planetcassandra.org/companies/ II. Installer Cassandra Pour les besoins de ce TP, nous allons installer Cassandra sur la machine virtuelle CentOS que nous avons utilisé pour les deux premier TP sur Hadoop. Pour cela, télécharger la dernière version de Cassandra sur: http://cassandra.apache.org/download/ Décompresser simplement le fichier que vous venez de télécharger. Désormais, on appellera le répertoire obtenu après décompression: <cass_home>. III. Démarrer Cassandra Pour commencer: 1. Lancer le serveur Cassandra. (si on omet le –f, il se lancera en arrière plan) sudo <cass_home>/bin/cassandra –f 2. Pour arrêter Cassandra, cliquer sur: Ctrl-C 3. Pour tuer le processus, taper: pkill -f CassandraDaemon 1 Apache Cassandra : http://cassandra.apache.org/
  • 3. TP4 : NOSQL Orientées Colonnes avec Cassandra Page 3 IV. CQL : Cassandra Query Language CQL est l’interface par défaut dans le SGBD Cassandra. C’est un langage SQL-Like, pour la manipulation des données dans la base. Nous citons ci-dessous les commandes de base de CQL. Pour plus de détails, consulter le fichier CQL.html que je vous ai fourni dans le drive partagé. IV.1. Notions de Base - Pour se connecter à l’instance locale de CQL <cass_home>/bin/cqlsh - Créer un Keyspace : CREATE KEYSPACE mykeyspace WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 1}; - Afficher l’ensemble des keyspaces: select * from system.schema_keyspaces; ou: describe keyspaces; - Se connecter au keyspace : USE mykeyspace; - Créer une table (il est possible de remplacer le terme TABLE par COLUMNFAMILY). CREATE TABLE users ( user_id int PRIMARY KEY, fname text, lname text ); - Afficher les tables existantes: describe tables; - Remplir la table: INSERT INTO users (user_id, fname, lname) VALUES (1745, 'john', 'smith');
  • 4. TP4 : NOSQL Orientées Colonnes avec Cassandra Page 4 - Afficher les données insérées: SELECT * FROM users; - Créer un index sur une colonne, puis extraire les données selon cette colonne : CREATE INDEX ON users (lname); SELECT * FROM users WHERE lname = 'smith'; - Créer une table avec une clef composée : CREATE TABLE tab2 ( id1 int, id2 int, first_name varchar, last_name varchar, PRIMARY KEY (id1, id2)); - Ajouter un nouveau champ à la table: ALTER TABLE users ADD telephone text; - Modifier la valeur d’un enregistrement: UPDATE users SET telephone = “21212121” WHERE user_id=1745; - Vider une table : TRUNCATE users; - Supprimer une table : DROP users; IV.2. Les Collections Dans les bases de données relationnelles traditionnelles, il est fortement déconseillé d’utiliser des valeurs multiples dans un même champs. Pour cela, il faudrait créer une autre table, et faire une jointure. Dans les bases NOSQL, le but ultime est de minimiser au maximum les jointures, pour faciliter et accélerer la navigation. C’est pour cette raison que des collections comme les sets, listes et maps sont utilisés.
  • 5. TP4 : NOSQL Orientées Colonnes avec Cassandra Page 5 Attention à ne pas abuser de ce type de champs: il faut s’assurer que les collections stockent de petites quantités de données, car une requête Cassandra lit une collection en entier, c’est à l’utilisateur de les parcourir ensuite. IV.2.1. Sets Un ensemble (set) est un ensemble non ordonné de valeurs. En utlisant le type de données set, il est possible de résoudre le problème de champs multiples, comme les emails par exemple. a. Création Prenons par exemple le cas d’un ensemble d’emails pour un utilisateur. C’est représenté par un seul champ, de type set<text>, et est défini dans la table users comme ceci: CREATE TABLE users ( user_id int PRIMARY KEY, fname text, lname text, emails set<text> ); b. Insertion Pour insérer des données dans l’ensemble, placer les valeurs entre accolades et les séparer par des virgules. Les différentes valeurs dans un ensemble doivent être uniques. INSERT INTO users (user_id, fname, lname, emails) VALUES(1234, 'Frodo', 'Baggins', {'f@baggins.com', 'baggins@gmail.com'}); c. Ajout Ajouter un élément à un ensemble en utilisant la commande UPDATE : UPDATE users SET emails = emails + {'fb@friendsofmordor.org'} WHERE user_id = 1234; d. Extraction
  • 6. TP4 : NOSQL Orientées Colonnes avec Cassandra Page 6 Extraire les adresses email comme ceci: SELECT user_id, emails FROM users WHERE user_id = 1234; Les données extraites sont retournées par ordre, selon leur type. Par exemple, les données textuelles sont ordonnées par ordre alphabétique. e. Suppression Pour supprimer un élément de l’ensemble, utiliser l’opérateur (-): UPDATE users SET emails = emails - {'fb@friendsofmordor.org'} WHERE user_id = 1234; Pour supprimer tout l’ensemble: UPDATE users SET emails = {} WHERE user_id = 1234; ou bien : DELETE emails FROM users WHERE user_id = 1234; Une fois vidée, une collection (ensemble, liste ou map) est assimilée ainsi à la valeur null. IV.2.2. Listes Une liste est utilisée quand l’ordre d’insertion des éléments compte, ou quand on veut pouvoir insérer la même valeur plusieurs fois. a. Création Ajouter une liste des meilleurs endroits visités à la table users. ALTER TABLE users ADD top_places list<text>; b. Insertion UPDATE users SET top_places = [ 'rivendell', 'rohan' ] WHERE user_id = 1234; On remarquera ici que les éléments de la liste sont placés entre crochets. c. Ajout Pour ajouter un nouvel élément à la fin de la liste :
  • 7. TP4 : NOSQL Orientées Colonnes avec Cassandra Page 7 UPDATE users SET top_places = top_places + [ 'mordor' ] WHERE user_id = 1234; Pour affecter un élément à un emplacement donné (écrase l’ancienne valeur) : UPDATE users SET top_places[1] = 'riddermark' WHERE user_id = 1234; Quand un élément est ajouté à la fin (ou au début) de la liste, cette dernière n’est pas lue. On écrit directement la valeur à son emplacement. Par contre, quand un élément est placé dans une position particulière, Cassandra lit la liste entière, puis ajoute le nouvel élément, ce qui provoque une plus grande latence. d. Suppression Supprimer un élément de la liste, en utilisant son index: DELETE top_places[3] FROM users WHERE user_id = 1234; Supprimer tous les éléments ayant une valeur donnée d’une liste: SET top_places = top_places - ['riddermark'] WHERE user_id = 1234; L’utilisation de cette dernière commande est meilleure que la première, car elle protège contre les problèmes d’accès concurrent: avec la première méthode, si un autre client ajoute des éléments à la liste en même temps, on risque de supprimer la mauvaise valeur, ce qui n’est pas un problème avec la deuxième méthode. e. Extraction SELECT user_id, top_places FROM users WHERE user_id = 1234; IV.2.3. Maps Une map permet d’associer deux éléments, sous forme de clef/valeur. Elle peut être utilisée, par exemple, pour sauvegarder les horaires des différents évènements dans un profil utilisateur.
  • 8. TP4 : NOSQL Orientées Colonnes avec Cassandra Page 8 Chaque élément dans une Map est stocké dans Cassandra comme étant une colonne que vous pouvez modifier, remplacer et requêter. a. Création ALTER TABLE users ADD todo map<timestamp, text> ; b. Insertion Un élément dans une Map est un couple d’éléments entre accolades, séparés par une virgule. UPDATE users SET todo = { '2012-9-24' : 'enter mordor', '2012-10-2 12:00' : 'throw ring into mount doom' } WHERE user_id = 1234; c. Ajout Ajouter un élément spécifique, en utilisant comme clef la valeur du timestamp entre crochets: UPDATE users SET todo['2012-10-2 12:00'] = 'throw my precious into mount doom' WHERE user_id = 1234; Utiliser INSERT pour spécifier des données dans une Map : INSERT INTO users (user_id,todo) VALUES ( 1234, { '2013-9-22 12:01' : 'birthday wishes to Bilbo', '2013-10-1 18:00' : 'Check into Inn of Prancing Pony' }); Ceci remplacera toute la Map pour l’utilisateur frodo. d. Suppression DELETE todo['2012-9-24'] FROM users WHERE user_id = 1234; e. Extraction SELECT user_id, todo FROM users WHERE user_id = 1234;
  • 9. TP4 : NOSQL Orientées Colonnes avec Cassandra Page 9 V. Manipulation de Cassandra avec Python V.1. API pycassa Pycassa est un client Python pour manipuler la base de données Cassandra. Le module à intégrer dans python est récupéré à l'adresse suivante: https://pypi.python.org/pypi/pycassa V.2. Installer pycassa Pour installer le module pycassa, comme tout autre module de Python sur une machine Linux, suivre les étapes suivantes : - Décompresser l'archive dans le répertoire de votre choix - Avec l'invite de commande, déplacez-vous vers ce répertoire, vous devriez y trouver un fichier setup.py - Taper: sudo python setup.py install Une fois le module installé, l'instruction suivante ne devrait plus lancer d'exception si on l'exécute avec python: import pycassa V.3. Utilisation de pycassa Nous allons montrer dans ce qui suit les différentes instructions dont nous aurons besoin pour manipuler la base Cassandra avec python. Pour plus d'informations, consulter la documentation de pycassa, disponible en ligne à l'adresse : http://pycassa.github.io/pycassa/index.html V.3.1. Connexion à Cassandra Pour se connecter à un keyspace KS en localhost, utiliser les instructions suivantes: pool = pycassa.ConnectionPool(keyspace='KS', server_list=['127.0.0.1:9160']) Pour appeler une table (column family) cf1, utiliser:
  • 10. TP4 : NOSQL Orientées Colonnes avec Cassandra Page 10 cf1 = pycassa.ColumnFamily(pool, 'cf1') V.3.2. Ecriture des données Pour insérer les colonnes associées à la clef key1 dans une table cf1, utiliser: cf1.insert(key1, {'col1': 'val1', 'col2': 'val2'}) V.3.3. Lecture des données Pour extraire des données à partir de la table cf1, utiliser: data = cf1.get(key1,columns=['col1','col2']); Cela va extraire les valeurs des colonnes col1 et col2 associées à la clef key1, et les stocker dans data, qui est de type orderedDict. orderedDict est une liste de couples (clef,valeur) ordonnées. Ainsi, dans notre variable data, les champs seront ordonnés comme suit : {'col1': 'val1', 'col2': 'val2'} Pour extraire le premier couple, utiliser : data.items()[0] Pour extraire la première valeur (val1), utiliser : data.items()[0][1] V.3.4. Nombre d'entrées Pour connaitre le nombre d'entrées (lignes) dans une table cf1, utiliser : len(list(cf1.get_range() V.4. Objectifs du TP Dans ce TP, le but est de charger des données volumineuses dans Cassandra, et les manipuler avec l’API pycassa. Pour cela, nous allons: 1. Créer la base de données avec Cassandra 2. Remplir la base de données 3. Afficher les données lues
  • 11. TP4 : NOSQL Orientées Colonnes avec Cassandra Page 11 V.5. Réalisation V.5.1. Création de la base de données et des tables Créer un keyspace Cassandra appelé wordcount, contenant une table bible contenant un champs id (entier, clef primaire) et un champs line(texte) Pour que pycassa puisse accéder aux données des tables, ces dernières doivent être créées avec la mention “WITH COMPACT STORAGE“ insérée à la fin de l'instruction de création. V.5.2. Remplissage de la table bible Pour remplir la table bible avec des lignes de texte, nous avons choisi d'utiliser comme source le texte d'une bible, trouvé ici: https://sites.google.com/site/ruwach/bibletext . Créer un répertoire tp4 à l'emplacement de votre choix. C'est dans ce répertoire que nous allons mettre tous les fichiers nécessaires à notre travail. - Extraire l'archive donnée dans le répertoire tp3. Renommez le répertoire obtenu en : bible. - Ecrire un fichier populate.py, permettant d'utiliser l'API pycassa pour stocker dans la table bible les lignes lues à partir de l'entrée standard. Chaque ligne sera stockée en entier dans le champ line, avec comme identifiant un entier incrémental. - Pour exécuter le fichier populate.py et lui donner comme entrée le contenu du répertoire bible, utiliser l'instruction suivante: find bible -type f -name "*.txt" -print0 | xargs -0 cat | sed "s/^[0-9 ]*//" | python populate.py - Vérifier que votre table contient bien le texte. Pour cela, taper: select * from bible where id = 20; Et vérifier que le résultat est bien le suivant:
  • 12. TP4 : NOSQL Orientées Colonnes avec Cassandra Page 12 VI. Homework • Choisir dans votre réseau social quels types de données pourront être stockés dans une base de données NOSQL orientée colonnes. • Concevoir vos tables, les créer avec Cassandra et les remplir avec de premières données de test. • Remarque : Vous pouvez utiliser python avec l’API pycassa (comme dans le TP), ou alors Java grâce à l’API Datastax Java Driver