View
1.909
Download
0
Category
Preview:
Citation preview
Lyon Cassandra Users
Apache CassandraConcepts et fonctionnalités
Romain Hardouin
Plan
Présentation de Cassandra
Concepts clés
Installation
Les outils DataStax : DevCenter et OpsCenter
Modèle de données
Requêtes
Présentation de Cassandra
“Semblable à l'Aphrodite d'or” – Homère
Lyon Cassandra Users
NoSQL*
* ≠ Big Data
Lyon Cassandra Users
Big Data*
* 3V = Volume, Vélocité, Variété
● SGBD NoSQL orienté colonnes● Distribué : P2P● Haute disponibilité : no SPOF● Massivement parallèle● Scalabilité linéaire● Multi data centers● Réplication native● Open source : Facebook → Apache
Cassandra
Lyon Cassandra Users
● No single points of failure
● Highly scalable writes (we have highly variable write traffic)
● A healthy and productive open source community
– Ryan King
What were the top reasons for going with Cassandra?
Qui l'utilise ?
Qui l'utilise ?
Concepts clés
Architecture
Cluster
● Noeud = Instance de Cassandra● Cluster = Ring = Ensemble des noeuds
Théoreme CAP
● Seuls deux des trois sont réalisables
P
A
C
@eric_brewer
Haute disponibilité
CohérenceTolérance aux partitionnements
Théoreme CAP
● En pratique– Continuum
– Consistency Level (CL)
– Latence !
P
A
C
Cohérence in fine
● Eventually consistency● A un instant T, la donnée la plus récente n'est
pas présente partout● Pas de suppression instantanée
– Tombstone
Cohérence paramétrable
● Combien de répliques écrites/lues avant aquittement
● ONE, QUORUM, ALL● ANY● SERIAL
– Datacenter aware :● LOCAL_ONE, LOCAL_QUORUM● EACH_QUORUM
Gossip
● Protocole epidémique de communication P2P● Echange d'informations chaque seconde● Réseau overlay maillé complet
Partitioner
● Token = f (row)
– Murmur3, MD5
– BOP
● Token => noeud
Lyonpays gentilé
FR Lyonnais
Venisepays gentilé
IT Vénitiens
Facteur de réplication
● Nombre d'occurrences d'une donnée– Replication Factor (RF)
RF = 2
Réplication
● Replica placement strategy– NetworkTopologyStrategy
RF = 2
Lyonpays gentilé
FR Lyonnais
Snitch
● Comment connaitre la topologie du réseau ?– PropertyFile, GossipingPropertyFile
– EC2(MultiRegion)
– RackInferring
10 . 1 . 2 . 3
DCRack
Noeud
Coordinator
● P2P => on contacte n'importe quel noeud● Noeud contacté = coordinateur● Le coordinateur contacte les répliques (proxy)
Client
Ecriture
● Exemple avec RF = 2, CL = ONE
Client
Repair
● Hinted-handoff– Fenêtre paramétrable
● Read repair– Probabilité paramétrable
● Anti-entropy repair– Indispensable
– Généralement hebdomadaire
Installation
Installation
● Linux– Production
● Windows● Mac OS● Ne pas mixer les OS
Java
● Oracle JDK– Cassandra 1 : v6
– Cassandra 2 : v7
● Production– Java Native Access (JNA)
Debian
● Apache– deb http://www.apache.org/dist/cassandra/debian V main
● V = 12x, 20x
● DataStax– deb http://debian.datastax.com/community stable main
● Cassandra, DevCenter, OpsCenter, DSC● apt-get install cassandra → v2.0● apt-get install cassandra=1.2.15
RedHat / CentOS
● DataStax– http://rpm.datastax.com/community
● Cassandra, DevCenter, OpsCenter, DSC
Les outils DataStax
DevCenter et OpsCenter
DevCenter
OpsCenter
OpsCenter
Modèle de données
SGBD orienté colonnes
Column
● Identifiée par son nom● Valeur et nom typés
– blob, int, text, timestamp, timeuuid, uuid, ...
Nom
Valeur
Timestamp
Résout les conflits => NTP, VMWare tools
≤ 9 MO conseilléMax 2 GO
Column
● Time to live– Ne remplace pas une purge métier
Nom
Valeur
Timestamp
TTL
Column
● Compteur distribué– Type spécial
Nom
Valeur
Timestamp
Column
● Nom porteur d'informations– Colonne composite
– Intérêt : requêtage
rhone:lyon
Valeur
Timestamp
rhone:villeurbanne
Valeur
Timestamp
rhone:bron
Valeur
Timestamp
“ rhone:* ”
Row
● Identifiée par sa clé (typée)● Contient des colonnes, triées par nom● Une ligne est stockée sur un seul noeud *
CléNom colonne 1 ... NValeur colonne 1
Timestamp
2.109
* hors réplication
Column Family (CF)
● Regroupe les lignes et donc les colonnes● Les lignes ne sont pas triées * ● Arena allocation : ≤ 1000 CF
Nom CF
Clé 1
Colonne 1 ... N
Valeur 1
Timestamp
... ...
Clé N
Colonne 1 ... N
Valeur 1
Timestamp
* sauf si le ByteOrderedPartitioner est utilisé
Nom keyspace 1
Keyspace
● Regroupe les column families● Peut coûteux en mémoire
Nom CF 1
Clé 1
Colonne 1 ... N
Valeur 1
Timestamp
...
Colonne 1 ... N
Valeur 1
Timestamp
Nom CF N
Clé 1
Colonne 1 ... N
Valeur 1
Timestamp
...
Colonne 1 ... N
Valeur 1
Timestamp...
meetup.com
Keyspace
● Exemple– Timestamp non représentés
members
bobfirstname ...
Robert
... ...
billfirstname ...
William
events
30a9e2d2event_name event_date
Cassandra 2014-02-25
... ... ...
31369e8eevent_name event_date
Hadoop 2014-03-13
Requêtes
SELECT * FROM big_data
NoSQL
● Les applications doivent en faire plus– Moins de fonctionnalités que les SGBDR
– Dénormalisation
● Pas de transactions– V1.0 : Row level isolation
– v2.0 : Lightweight transactions, CAS
● Pas de jointures● Pas de «GROUP BY»
Par où commencer
● Penser “requête”– Critères de recherches
– Tris
● Penser “alimentation”– Comment les données arrivent ?
– Données brutes ?
Penser "requêtes"
● Comment faire sans jointures ?– Peu de données : 2 requêtes + filtre mémoire
– Big data : autant de Column Family que de requêtes
● Exemple : – Rechercher les meetup d'une ville
– SELECT * FROM events WHERE city = 'Lyon'
– Column Family "events by city"
"events by city"
events
30a9e2d2event_name event_date
Cassandra 2014-02-25
... ... ...
31369e8eevent_name event_date
Hadoop 2014-03-13
events_by_city
lyon 31369e8e ... 30a9e2d2
<valueless> ... <valueless>
TimeUUID
Valueless pattern
Penser "requêtes"
● Comment faire sans aggregation ?– Peu de données : travail en mémoire
– Big data : Hadoop, Hive, Pig, etc.
Penser "alimentation"
Exemple : séries temporelles => wide rows– Données financières
● Actions, produits dérivés, etc.
– Données brutes● Capteurs, satellites, etc.
sensors
Sensor_1:<date> e598170e e53a9da4 ... e408c24e
<blob> <blob> ... <blob>
100 mesures / s => 8 640 000 colonnes
CQL
● Simplifie l'utilisation– cqlsh, DevCenter
● CQL 3 – Cassandra >= 1.2
CQL Implémentation
CQL
CREATE TABLE members (username text,firstname text,email list<text>,PRIMARY KEY (username)
);
members
bobfirstname ...
Robert
... ... ...
billfirstname ...
William
INSERT INTO members (username, firstname, email)VALUES ('bob', 'Robert',
['bob@gmail.com', 'bob@yahoo.fr']);
Référence
DataStax : datastax.com
www.datastax.com/docs
Interview Ryan King (Twitter) :http://nosql.mypopescu.com/post/407159447/cassandra-twitter-an-interview-with-ryan-king
Recommended