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