Post on 16-Jul-2015
Cassandra et Spark Streaming
Architecture événementielle et Analytique temps réel
Victor Coustenoble Petit Déjeuner OCTO TechnologyIngénieur Solutions 14/04/15victor.coustenoble@datastax.com@vizanalytics
Agenda
Confidential 2
• Cassandra / DataStax
• Spark / Spark Streaming
• Architecture / Cas métiers
• Démonstrations
3
DataStax délivre une plateforme de la base de données
Apache Cassandra, conçue spécifiquement pour les
besoins en Performance et Disponibilité exigés par les
applications d’Internet des Objets, Web ou Mobiles, en
offrant aux entreprises une base de données Sécurisée
toujours disponible, qui reste Simple à administrer même
pour des déploiements à grande échelle, dans un seul ou
de Multiples Data Centers et dans le Cloud.
Cas d’usage fréquents
Messagerie
Collections/
Playlists
Détection de
Fraude
Recommandation/
Personnalisation
Objets connectés/
Données de Capteurs
DataStax
Fondé en avril 2010
~35 500+
Santa Clara, Austin, New York, London, Paris, Sydney
400+Employés Pourcent Clients
5
Straightening the road
RELATIONAL DATABASES
CQL SQL
OpsCenter / DevCenter Management tools
DSE for search & analytics Integration
Security Security
Support, consulting & training 30 years ecosystem
• Sans Maître-Esclave (peer-to-peer), sans Point Unique de Défaillance (No SPOF)
• Distribuée avec la possibilité de Data Center
• 100% Disponible (replication)
• Massivement scalable
• Montée en charge linéaire
• Haute Performance (lecture ET écriture)
• Multi Data Center
• Séries Temporelles
• Multi Modèle
• Simple à Exploiter
• Language CQL (comme SQL)
• Outils OpsCenter / DevCenter
Apache Cassandra™
7
Confidential 8
DataStax Enterprise
Confiance
d’utilisatio
n
Fonctionnalités
d’entreprise
DataStax Enterprise
DataStax supporte la communauté open source et les entreprises
9
Open Source/Communauté Enterprise Software
• DataStax emploie le président du
projet Apache et développe 80+% du
code de Apache Cassandra
• DataStax Community Edition
• DataStax Simple OpsCenter
• DataStax DevCenter
• DataStax Drivers/Connecteurs
• Documentation en ligne
• Formation en ligne
• Mailing lists et forums
• DataStax Enterprise Edition
• Cassandra Certifié
• In-Memory
• Analytique intégré (Hadoop, Spark)
• Recherche intégrée (Solr)
• Securité d’entreprise
• DataStax OpsCenter Avancé
• Services d’Administration Automatique
• Support Expert
• Aide et Consulting
• Formation Professionnelle
Confidential 10
Pourquoi Spark + Cassandra ?
Analytique Opérationnelle / Temps Réel
©2014 DataStax Confidential. Do not distribute without consent. 11
Enrichissement des Données
Contraintes d’intégrité
Détection de dépassement de seuil
Batch Processing
Machine Learning
Agrégats pré-calculés
Création de KPI
Données
Traitement
Flux
Cassandra a besoin d’un framework de traitement distribué
Pour des requêtes indépendates du modèle de données
Pour des opérations cross-table (JOIN, UNION)
Pour des analyses complexes (machine learning)
Pour des transformation, des aggrégations
Pour des traitements de flux
…
• Spark = Traitement Distribué
• “In-memory Map/Reduce”, multi-thread, caching
• Intégration poussée de Spark avec Cassandra
• Partenariat DataStax / Databricks
• x10 – x100 plus rapide que Hadoop MapReduce
©2014 DataStax Confidential. Do not distribute without consent. 13
Replication
Cassandra
Application
Opérationnelle
Noeuds
Spark
Le SDK du « Big Data »
Cas d’utilisation de Spark pour Cassandra
14
Load data from various
sources
Analytics (join, aggregate, transform, …)
Sanitize, validate, normalize data
Schema migration,
Data conversion
©2013 DataStax Confidential. Do not distribute without consent. 15
• Fast, distributed, scalable and fault
tolerant cluster compute system
• Enables Low-latency with complex
analytics
• Developed in 2009 at UC Berkeley
AMPLab, open sourced in 2010, and
became a top-level Apache project in
February, 2014
Spark – Représentation Conceptuelle
©2013 DataStax Confidential. Do not distribute without consent. 16
RDDRDD
RDDRDD
Transformations
Action Value
counts = lines.flatMap(lambda s: s.split(“ ”)) \.map(lambda word: (word, 1)) \.reduceByKey(lambda x, y: x + y)
counts.saveAsTextFile(sys.argv[2])
lines = sc.textFile(sys.argv[1])
1
2
3
Resilient Distributed Datasets (RDDs) – Spark’s datasets
Fault tolerant collection of elements that enable parallel processing
Transformation and Actions are executed against RDDs
Can persist in Memory, on Disk, or both
Can be partitioned to control parallel processing
Can be reused
Composants Spark + Cassandra
Shark
or
Spark SQLStructured
Spark
StreamingReal-time
MLlibMachine learning
Spark (General execution engine)
GraphXGraph
Cassandra
Connecteur Cassandra Spark
C*
C*
C*C*
Spark Executor
C* Java Driver
Spark-Cassandra Connector
User Application
Cassandra
Connecteur Cassandra Spark
•Tables Cassandra tables exposées en temps que RDDs Spark
•Chargement des données depuis Cassandra vers Spark
•Ecriture des données depuis Spark vers Cassandra
•Object mapper : Mapping des tables Cassandra en objets Scala/Java
•Conversions des types Cassandra en type Scala/Java
•Sélection et filtres des données au niveau de Cassandra
•API Scala, Java et Pyhton
Lecture des données
val table_rdd = sc
.cassandraTable[CassandraRow]("db", "tweets")
.select("user_name", "message")
.where("user_name = ?", "ewa")
row
representation keyspace table
server side column
and row selection
Ecriture des données
CREATE TABLE test.words(word TEXT PRIMARY KEY, count INT);
val collection_rdd = sc.parallelize(Seq(("foo", 2), ("bar", 5)))
collection_rdd.saveToCassandra("test", "words", SomeColumns("word", "count"))
cqlsh:test> select * from words;
word | count
------+-------
bar | 5
foo | 2
(2 rows)
“Je veux des résultats en continue depuis un flux de données”
“Je veux une garantie que mes messages soient traités une seule fois”
DStream (Discretized Stream)
Flux continu de micro batchs pour:
• Traitements complexes avec un minimal d’effort
• Calculs sur des flux dans un petit interval de temps
Une transformation sur DStream = transformations sur ses RDDs
Quand le batch n’est plus suffisant
Spark Streaming Input
Données en entrée depuis:
• une socket TCP
• des messages depuis Kafka
• des logs depuis Flume
• des fichiers depuis HDFS (monitorer la création de
nouveaux fichiers)
• une file MQ (type ZeroMQ)
• des tweets depuis Twitter (API Twitter4J)
• …
Utilisation de Spark Streaming
L’API de Spark Streaming est identique à l’API classique de Spark
=> Des portions de code batch et de flux peuvent être partagés
import com.datastax.spark.connector.streaming._
// Spark connection optionsval conf = new SparkConf(true)...
// streaming with 1 second batch windowval ssc = new StreamingContext(conf, Seconds(1))
// stream inputval lines = ssc.socketTextStream(serverIP, serverPort)
// count wordsval wordCounts = lines.flatMap(_.split(" ")).map(word => (word, 1)).reduceByKey(_ + _)
// stream outputwordCounts.saveToCassandra("test", "words")
// start processingssc.start() ssc.awaitTermination()
Et dans une architecture ?
Cassandra + Spark = Recommandation + Analytique
©2014 DataStax Confidential. Do not distribute without consent. 26
Enrichissement des Données
Batch Processing
Machine Learning
Agrégats pré-calculésDonnéesPas d’ETL
“Pour du calcul de prévisions, j’ai besoin d’un accès rapide à
mes données historiques couplé à des données en temps réel
provenant d’un flux”
Architecture Lambda
Une architecture de traitement de données conçue pour gérer des énormes
quantités de données en tirant avantage à la fois des méthodes de traitement batch
et des traitements de flux.
Architecture Lambda
Confidential 30
Applications Capteurs Web Mobiles
Détection
d’intrusion
Détection de
panne
Analyse de
navigation
Analyse de
métriques
réseaux
Détection de
fraude
Optimisation
dynamique de
processus
Recommandatio
ns
Publicité
géolocalisée
Traitement de LogPlanning de
logistique
Analyse de
sentiment
Analyse et traitement temps réel
Démonstrations Spark Streaming + Cassandra
• Dans des intervals de 5 secondes, comptage et stockage du nombre de Tweetscontenant les mots "love", "hate", "cat" ou "lol"
• https://github.com/doanduyhai/Cassandra-Spark-Demo
Meetup RSVP
• Nombre total de participants par pays (depuis le démarrage de l’application). Rafraichissement toutes les 5 secondes, traitement simple d’un flux.
• Les sujets des Meetups les plus populaires dans les 5 dernières minutes. Rafraichissement toutes les 10 secondes, traitement dans une plage de temps.
• https://github.com/rstml/datastax-spark-streaming-demo
© 2014 DataStax, All Rights Reserved. Company Confidential 31
Merci, Questions ?
We power the big data apps that transform business.
©2013 DataStax Confidential. Do not distribute without consent.
victor.coustenoble@datastax.com
@vizanalytics