Elastic Stack in A Day
Milano – 16 Giugno 2016
ElasticSearch e le piattaforme BigData
Agenda
•
•
•
•
•
•
•
BigData
NoSQL
Architettura BigData
Spark
Integrazione con ElasticSearch
Live coding
Apache Kafka
Ø Laureato in Ingegneria Informatica (POLIMI)
Ø Technical Advisor per Seacom e BNova
Ø Autore di due libri su ElasticSearch + 6 Tech review
Ø Lavoro principalmente in Scala e su tecnologie BD (Akka, Playframework, Apache Spark) e NoSQL
(Accumulo, HBase, ElasticSearch)
Ø Evangelist linguaggio Scala e Scala.JS
Trasformare Big Data in Valore: La ‘Datafication’
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Ø
Attività
Conversazioni
Testo
Voce
Social Media
Browser log
Foto
Video
Sensori
Etc.
Volume
Big Data Analysing:
Ø
Ø
Velocity
Ø
Ø
Variety
Ø
Ø
Veracity
Text analytics
Sentiment analysis
Face recognition
Voice analytics
Movement analytics
Etc.
Valore
NoSQL -­‐ Definizione
Ø
Ø
Ø
Ø
Ogni database che non è un “Database relazionale”
Il termine fu coniato durante un meet-­‐up
“Non-­‐relational Databases”
Not Only SQL
NoSQL -­‐ Tipologie
Key-­Value
Ø Redis
Ø Voldemort
Ø Dynomite
Ø Tokio*
Document
Ø ElasticSearch
Ø CouchDB
Ø MongoDB
BigTable Clones
Ø Accumulo
Ø Hbase
Ø Cassandra
GraphDB
Ø Neo4j
Ø OrientDB
Ø *Graph
Architettura Standard
Hadoop / Spark
Hadoop MapReduce
HDFS
Read
Input
HDFS
Write
HDFS
Read
Iter 1
HDFS
Write
Iter 2
HDFS
HDFS
Apache Spark
Input
Iter 1
Evoluzione del modello Map Reduce
Iter 2
Apache Spark
Ø Scritto in Scala con API in Java, Python e R
Ø Evoluzione del modello Map/Reduce
Ø Potenti moduli a corredo:
Ø Spark SQL
Ø Spark Streaming
Ø MLLib (Machine Learning)
Ø GraphX (graph)
Apache Spark e ElasticSearch
Ø Da 2.1 supporto nativo per RDD
Ø Computazione su dati filtrati
Ø Supporto a query SQL via SparkSQL
Ø val names = sqlContext.sql("SELECT name FROM myIndex WHERE id >=1 AND id <= 10")
Ø Potente manipolazione dei documenti
Ø Estensione per analytics non disponibili/eseguibili in ElasticSearch
Ø Join sui documenti
Ø Supporto per streaming
Spark => ElasticSearch
Ø Esempio scrittura su ElasticSearch
import org.elasticsearch.spark.rdd.Metadata._ val otp = Map("iata" -­‐> "OTP", "name" -­‐> "Otopeni")
val muc = Map("iata" -­‐> "MUC", "name" -­‐> "Munich")
val sfo = Map("iata" -­‐> "SFO", "name" -­‐> "San Fran")
// metadata for each document
val otpMeta = Map(ID -­‐> 1, TTL -­‐> "3h") val mucMeta = Map(ID -­‐> 2, VERSION -­‐> "23") val sfoMeta = Map(ID -­‐> 3) // instance of SparkContextval
sc = ...
val airportsRDD = sc.makeRDD(Seq((otpMeta, otp), (mucMeta, muc), (sfoMeta, sfo)))
pairRDD.saveToEsWithMeta(airportsRDD, "airports/2015") Spark <= ElasticSearch
Ø Esempio lettura su ElasticSearch
// as a DataFrameval
df = sqlContext.read().format("org.elasticsearch.spark.sql").load("spark/trips")
df.printSchema()
// root
//|-­‐-­‐ departure: string (nullable = true)
//|-­‐-­‐ arrival: string (nullable = true)
//|-­‐-­‐ days: long (nullable = true)
val filter = df.filter(df("arrival").equalTo("OTP").and(df("days").gt(3))
O
sqlContext.sql(”CREATE TEMPORARY TABLE trips USING org.elasticsearch.spark.sql OPTIONS (path "spark/trips") SELECT departure FROM trips WHERE arrival = "OTP" and days > 3”)
Apache Kafka
Ø Message Broker scritto in Scala
Ø ”It provides a unified, high-­‐throughput, low-­‐latency platform for handling real-­‐time data feeds.”
Ø Funziona da buffer per scritture boost.
Ø Facilmente integrabile
con logstash.
Apache Kafka
afka -­‐ Integrazione
GRAZIE
Per l’attenzione
Q&A