NoSQL et Big Data
Arnaud Cogoluègnes - Zenika
ADIRA - 8 octobre 2014
This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.
NoSQL
Hadoop
MapReduce
HDFS
Théorème CAP
Eventual consistency
Hive
Pig
Architecture
lambda
Cascading
MongoDB
Cassandra
Big Data
Agenda
Que faire du NoSQL
Hadoop et moi
NoSQL et Hadoop en action
NoSQL
Retour vers le futur : les SGDBR
Les garanties ACID
Standard, portable
SQL-86 ... SQL:2011
select * from Book
Un point d’intégration
Image : http://www.eaipatterns.com/SharedDataBaseIntegration.html
ORM : les premières tensions
Une fausse bonne idée ?
?
Service : les tensions continuent
Services
Application A Application B Application C
Le web : comment “scaler” ?
SGBDR : généraliste
NoSQL
Moins de fonctionnalités
Plus spécialisés
Garanties relachées
Principes des “pipes” Unix
NoSQL viable, les aggrégats
CommandeClient
Ligne
Produit
1 *
1
*
*
1
"commandes" : [
{
"id" : 32,
"clientId" : 2,
"lignes" : [
{
"articleId" : 79,
"prix" : 29,
"nom" : "Spring in Action"
}
]
}
]
Les aggrégats
+
Unité atomique
Données co-localisées
-
Usage unique
Vues à créer par usage
Partition (Sharding)
Alan
Bob
...
Zoe
Alan Bob Zoe
<< A >> << B >> << Z >>
…
Pas de sharding
Sharding
Réplication
Alan
…
Alan Alan
Partition et réplication
Alan Bob Zoe
…
Zoe Alan Bob
Bob Zoe Alan
Relacher la durabilité
commit()
fsync()
store()
fsync()
Stockage mémoire et réplication
Alan
…
Alan Alan
Théorème CAP
Alan Alan
Partition réseau
Choisir disponibilité ou cohérence
Disponibilité = update autorisé
Cohérence = update interdit
Bases de données NoSQL
Clustering
Open source
Scalabilité
Pas de schéma
Clé/valeur
Pas bien pour…
Requêtes sur les données
Transactions sur plusieurs objets
Relations complexes
Bien pour…
Session
Profil
Cache
Implémentations
Redis
Riak
Hazelcast
"user1" => "login : alan ; gender : M"
"user2" => "login : zoe ; gender : F"
Orientées colonnes
Pas bien pour…
Requêtes
Agrégations
Bien pour…
Mesures
Logs
Expiration
Implémentations
Cassandra
HBase
stationID : 1234 =>
date : 20140914 value : 12
date : 20140915 value : 22
value : 18date : 20140916
stationID : 6789 =>
date : 20140914 value : 25
date : 20140915 value : 28
value : 27date : 20140916
Orientées documents
Pas bien pour…
Transactions sur plusieurs
collections
Requêtes avec jointures
Bien pour…
Logs
CMS
E-commerce
Implémentations
MongoDB
CouchBase
"commandes" : [
{
"id" : 32,
"clientId" : 2,
"lignes" : [
{
"articleId" : 79,
"prix" : 29,
"nom" : "Spring in Action"
}
]
}
]
Orientées graphes
Pas bien pour…
Grosse volumétrie
Mises à jour massives
Bien pour…
Données “connectées”
Routage, données localisées
Recommandations
Implémentations
Neo4j
Arnaud
Spring Batch
in Action
Zenika
Alan
auteur
employé
lecteur
Moteur d’indexation
Pas bien pour…
Transactions
Bien pour…
Indexation
Recherche plain/text
Implémentations
ElasticSearch
Solr
Hadoop
Hadoop, un système distribué
● Système de fichiers distribué : HDFS
● API de programmation : MapReduce, YARN
Hadoop
HDFS
MapReduce, YARN
Votre application
HDFS
HDFS
MapReduce, YARN
Votre application
Tolérant aux pannes
Scalable
Formats de fichiers
Compression
Blocs, datanodes, namenode
file.csv B1 B2 B3 fichier composé de 3 blocs (taille par défaut d’un bloc : 128 Mo)
B1 B2 B1 B3
B1 B2 B2 B3
DN 1 DN 2
DN 4DN 3
les datanodes stockent les blocs
(le bloc 3 est ici sous-répliqué)
B1 : 1, 2, 3 B2 : 1, 3, 4
B3 : 2, 4
Namenode
le namenode gère les méta-données et s’assure de la réplication
HDFS, les limitations
Fichiers “append-only”
Bien pour “write once, read many times”
Peu de gros fichiers, bien
Plein de petits fichiers, pas bien
MapReduce
HDFS
MapReduce
Votre application
Simple
Batch
Scalable
Jointure, distinct, group by
MapReduce
file.csv B1 B2 B3
Mapper
Mapper
Mapper
B1
B2
B3
Reducer
Reducer
k1,v1
k1,v2
k1 [v1,v2]
Le code va à la donnée
file.csv B1 B2 B3
Mapper
Mapper
Mapper
B1
B2
B3
Reducer
Reducer
k1,v1
k1,v2
k1 [v1,v2]
B1 B2 B1 B3
B1 B2 B2 B3
DN 1 DN 2
DN 4DN 3
DN 1
DN 3
DN 4
Hadoop 1
HDFS
MapReduce
Hadoop 2
HDFS
YARN
MapReduce
Votre
application
MapReduce, les limitations
Code bas niveau
Ré-utilisation difficile
Préférer les abstractions comme Cascading
Comment stocker ?
Formats de fichiers
Compression
Parquet
SequenceFile
Texte
Avro
Pas de compression
Snappy
Deflate
GZIP
La panoplie
MapReduce
Cascading
API Java
Hive
SQL
Pig
Script ETL
Votre application
Spark
Spark
Votre application
Tez
Apache Tez
MapReduce nouvelle génération
Cascading
API Java
Hive
SQL
Pig
Script ETL
Votre application
NoSQL et Hadoop
en action
Architecture lambda : objectifs
● Tolérant aux pannes
● Latence faible
● Scalable
● Générique
● Extensible
● Requêtes “ad hoc”
● Maintenance minimale
● Debuggable
Layers
Speed layer
Serving layer
Batch layer
Batch layer
Speed layer
Serving layer
Batch layer
Stockage des données.
Création des vues.
Serving layer
Speed layer
Serving layer
Batch layer
Accès aux vues batch.
Speed layer
Speed layer
Serving layer
Batch layer
Accès temps réel.
Batch layer
Speed layer
Serving layer
Batch layer
Hadoop (MapReduce, HDFS).
Thrift, Cascalog.
Serving layer
Speed layer
Serving layer
Batch layer
ElephantDB, BerkeleyDB.
Speed layer
Speed layer
Serving layer
Batch layer
Cassandra, Storm, Kafka.
Jointure flux et référentiel
Hadoop
Traitement
(jointures, transformation)
Flux
Reporting
Données de référence
Gestion de données
Données brutes
Données
parsées
Traitement et
insertion
Archives Vues Transformations
Avro, GZIP
Rétention permanente
Parquet, Snappy
Rétention 2 ans glissants
Traitement (Cascading)
HDFS BD temps réel
Cinématique avec Spring Batch
Archivage
Traitement Traitement Traitement
Nettoyage
Java, API HDFS
Cascading
MapReduce
Hive, Pig, Cascading
UDF : User Defined Function
Hive
+
SQL (non-standard)
Prise en main rapide
Extensible avec UDF
-
Testabilité médiocre
Réutilisabilité médiocre
Pas de contrle du flot
Logique disséminée
Programmation par UDF
Pig
+
Pig Latin
Prise en main rapide
Extensible avec UDF
-
Testabilité médiocre
Réutilisabilité médiocre
Logique disséminée
Programmation par UDF
Cascading
+
API Java
Testable unitairement
Contrôle du flot
Bonne réutilisabilité
-
Programmation nécessaire
Comment commencer
● Identifier les cas d’utilisation
● Caractériser les données
○ volume, fraîcheur nécessaire, append-only
● En déduire les produits adaptés
● Virtualiser ou pas
● Penser au déploiement et à la maintenance
● Penser au cloud pour le prototypage
Conclusion
NoSQL : de nouveaux outils ciblés
Big Data : de nouvelles possibilités
Des architectures, des patterns émergents

NoSQL et Big Data