Leveraging the Power of Solr with Spark

393 Aufrufe

Veröffentlicht am

Interaktive Datenanalyse mit Solr Cloud und Spark: Datenverarbeitung im Milliardenbereich
Vortrag von @JohannesWeigend (CTO bei QAware) auf der JAX 2016, Mainz

Apache Solr is a distributed NoSQL database with impressive search capabilities. Apache Spark makes M/R faster and richer. In this code-intense session Johannes shows how to combine both to solve real-time search and processing problems. The demos feature a portable Solr Cloud / Spark Cluster based on Intel NUC Hardware.

Veröffentlicht in: Daten & Analysen
0 Kommentare
2 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

Keine Downloads
Aufrufe
Aufrufe insgesamt
393
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
11
Aktionen
Geteilt
0
Downloads
6
Kommentare
0
Gefällt mir
2
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Leveraging the Power of Solr with Spark

  1. 1. Leveraging the Power of Solr with Spark Interaktive Datenanalyse mit Solr Cloud und Spark Mainz, 21.04.2016 | Johannes Weigend | QAware GmbH
  2. 2. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH Stellen Sie Ihre Fragen direkt oder per Twitter mit dem Hashtag #cloudnativenerd
  3. 3. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH Welches Problem wollen wir lösen? ■Interaktive Analyseanwendungen mit Laufzeiten unter einer Sekunde! ■Datenverarbeitung im Milliardenbereich (>109 Datensätze) ■Kontinuierlicher Import von Daten (Quasi-Echtzeit) ■Anwendungen nach dem Reactive Manifesto bauen
  4. 4. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH
  5. 5. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH
  6. 6. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH Horizontal skalieren ist schwierig! ■Horizontale Skalierung von Funktionalität ■Trivial ■Loadbalancing von (zustandslosen) Services (Makro- / Microservices) ■Mehr Benutzer à Mehr Maschinen ■Nicht trivial ■Mehr Maschinen à Geringer Antwortzeit ■Horizontale Skalierung von Daten ■Trivial ■Lineare Aufteilung von Daten auf Maschinen ■Mehr Maschinen à Mehr Daten ■Nicht trivial ■Konstante Laufzeit bei steigendem Datenvolumen
  7. 7. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH Hadoop liefert als Antworten auf horizontale Skalierung von Daten und Funktionalität
  8. 8. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH
  9. 9. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH Die Verarbeitung von verteilten Daten kann langsam sein 9 Datenfluss Read Read Read Filter Filter Filter Map Map Map Reduce foreach() -> Minutes / Hours HDFS / NFS / NoSQL
  10. 10. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH Durch Indizieren und intelligente Suche entfällt das vollständige Lesen der Ausgangsdaten 10 Filter Search Search Search Map Map Map Reduce DatenflussFilter Filter foreach() -> Seconds/Minutes Search / NoSQL
  11. 11. Spark Search Search Search Map Map Map Reduce Distributed Data Cluster Processing Business Layer Frontend
  12. 12. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH DEMO
  13. 13. Spark 1. Solr Cloud für Analyseanwendungen Filter Search Search Search Map Map Map Reduce DatenflussFilter Filter Search / NoSQL
  14. 14. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH ■Suchoptimierte, Dokumentenoritentierte NoSQL Datenbank ■Ein Dokument ist eine Sammlung von Feldern (string, number, date, …) ■Einfache und Multiple Felder (Felder können Arrays sein) ■Geschachtelte Dokumente (Nested) ■Statisches und dynamisches Schema ■Mächtige Query-Sprache (Lucene) ■Horizontal Skalierbar (Solr Cloud) ■Verteilte Daten in Shards ■Resilent durch Replikation ■Mächtige Aggregationsfunktionen (Facets) ■Stabil—> V 6.0 14 Cloud
  15. 15. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH Shard2 Die (T) Architektur von Solr Cloud Solr Server Zookeeper Solr ServerSolr Server Shard1 Zookeeper Zookeeper Zookeeper Cluster Solr Cloud Leader Scale Out Shard3 Replika8 Replika9 Shard5Shard4 Shard6 Shard8Shard7 Shard9 Replika2 Replika3 Replika5 Shards Replicas Collection Replica4 Replica7 Replika1 Shard6
  16. 16. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH Solr speichert alle Daten flach in einer “Tabelle“ (BigTable). Die Suche ist mächtig und extrem performant.* Kunde Bestellung *1 Name Amount Adresse Produkt Typ ID Name Adresse Anzahl Produkt K2B Kunde 1 K 1 A 1 - - [3,5] Kunde 2 K 2 A 2 - - [4] Bestellung 3 - - Z 1 P 1 [1] Bestellung 4 - - Z 2 P 2 [2] ... SolrDocument SolrDocument SolrDocument SolrDocument (*) Bei 100 Mio Datansätzen pro Shard liegen die Laufzeiten im Bereich von wenigen Millisekunden bis zu einer Sekunde
  17. 17. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH Eine lokale Solr Cloud kann einfach gestartet werden ■Schema anlegen und anpassen ■ Im Verzeichnis $SOLR_HOME/server/solr/configsets liegenBeispiel-Konfigurationen die kopiert und angepasst werden koennen ■Solr starten ■Testen cp $SOLR_HOME/server/solr/configset/basic_configs $SOLR_HOME/server/solr/configsets/jax2016 $SOLR_HOME/bin/solr start –e cloud curl localhost:8983/solr/jax2016/query?q=*:*
  18. 18. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH Über die Solr Cloud Collection REST API können Shards angelegt, verändert oder gelöscht werden. ■Collection anlegen ■Collection löschen <<SOLR URL>>/solr/admin/collections?action=DELETE& name=ekgdata <<SOLR URL>>/solr/admin/collections?action=CREATE& name=ekgdata&numShards=16& replicationFactor=2& maxShardsPerNode=8& collection.configName=ekgdata https://cwiki.apache.org/confluence/display/solr/Collections+API
  19. 19. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH Bei einer verteilten Solr Cloud muss Zookeeper gestartet werden und die Solr Konfigurationen geladen werden. 1.Starte Zookeeper auf 2n+1-Knoten (ungerade Anzahl) 2.Lade die Solr Konfiguration in den Zookeeper Cluster 3.Starte Solr Server im Cloud Modus auf n-Knoten mit Zookeeper Cluster 4.Erzeuge eine Collection mit Shards und Replicas unter Angabe des Konfigurationsnamens in Zookeeper $SOLR_HOME/bin/solr start –c -z 192.168.1.100:2181,192.168.1.101:2181,192.168.1.102 $SOLR_HOME/server/scripts/cloud-scripts$ ./zkcli.sh -cmd upconfig -zkhost 192.168.1.100:2181,192.168.1.101:2181,192.168.1.102 -confname ekgdata -solrhome /opt/solr/server/solr -confdir /opt/solr/server/solr/configsets/ekgdata_configs/conf $ZOO_HOME/bin/zkServer.sh start
  20. 20. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH Bespiel: Solr Cloud für die Analyse von Versicherungsdaten ■Versicherungsdaten einer Autoversicherung mit den folgenden Feldern Education IncomeGender ...
  21. 21. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH DEMO
  22. 22. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH Solr unterstützt JSON Queries im HTTP-Post Header
  23. 23. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH Mit Term Facets können Felder gruppiert und gezählt werden. 23
  24. 24. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH Function Facets sind Aggregationsfunktonen 24 http://yonik.com/solr-facet-functions/
  25. 25. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH Facets können hierarchisch zu Pivot Facets geschachtelt werden. 25
  26. 26. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH Solr und SQL ■Solr 6 unterstützt verteiltes SQL in der Solr Cloud ■Der JDBC Treiber ist Teil des SolrJ Clients ■Eine Collection wird als Single Table abgebildet ■ Collection -> Table ■ SolrDocument -> Row ■ Field -> Column ■Stand April 2016: Keine Metadaten, keine Prepared Statements
  27. 27. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH Resilience ■Die Anzahl der Replikas pro Shard kann beliebig hoch konfiguriert werden (replication factor) ■Diese Anzahl korrespondiert mit der Anzahl der Server die im Betrieb ausfallen können ■Zookeeper kann in mehreren Instanzen betrieben werden. Einer Instanz wird automatisch der Status “Leader“ zugewiesen. ■Die Solr Cloud kennt per Konfiguration alle Zookeeper Instanzen. Minimal muss ein Zookeeper erreichbar bleiben
  28. 28. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH Alles super! – Oder?
  29. 29. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH Alles Super! – Oder? ■Clientseitiges Weiterverarbeiten von Solr Dokumenten skaliert nicht ■Keine Möglichkeit eigene Businesslogik parallel in Solr auszuführen ■Die Ablage von großen Daten macht in Solr keinen Sinn ■Bilder ■Videos ■Binaries / large text documents ■Keine Schnittstellen zu Machine Learing, Statistik (R) ... 29
  30. 30. Spark Distributed In-Memory Computing mit Apache Spark Filter Search Search Search Map Map Map Reduce DatenflussFilter Filter Search / NoSQL
  31. 31. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH ■Distributed Computing (100x schneller als Hadoop (M/R) ■Verteiltes Map/Reduce auf verteilten In-Memory Daten ■Programmiert in Scala (JVM) ■Java/Scala/Python APIs ■Verarbeitet Daten aus verteilten und nicht-verteilten Datenquellen ■Textfiles (accessible from all nodes) ■Hadoop File System (HDFS) ■Databases (JDBC) ■Solr per Lucidworks API ■... 31 READ THIS: https://www.cs.berkeley.edu/~matei/papers/2012/nsdi_spark.pdf
  32. 32. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH Cluster JVM Slave Slave JVM JVM JVM Slave Master / Yarn / Mesos JVM Executor Executor JVM JVM JVM Executor start start start Task Task(s) Worker Host Worker Host Worker Host Master Host Spark Context MasterURL Resilient Distributed Dataset RDD Driver Node erzeugt Driver Anwendung Anwendungscode nutzt Partition Task(s) Partition Task(s) Partition Die Spark Architektur im Überblick
  33. 33. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH Ein erstes Spark Programm
  34. 34. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH Spark Pattern 1: Verteilter Task mit Parametern
  35. 35. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH Spark Pattern 2: Verteiltes Lesen aus externen Quellen
  36. 36. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH Spark Pattern 3: Caching und Weiterverarbeitung als RDD
  37. 37. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH
  38. 38. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH DEMO
  39. 39. Spark Putting all together Solr & Spark in Action Filter Search Search Search Map Map Map Reduce DatenflussFilter Filter Search / NoSQL
  40. 40. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH Wie implementiert man readFromShard() mit Solr ■SolrJ: SolrStream ■ /export Handler kann Massendaten aus SOLR streamen ■ Unterstützt nur JSON Export (Kein Binary Format !) ■Oder: SolrJ Cursor Marks verwenden ■Oder: Eigenen Export Handler bauen (Nach dem obigen Vorbild) http://localhost:8983/solr/jax2016/export?q=*:*&sort=id%20asc&fl=id&wt=xml Filter Search Map
  41. 41. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH LucidWorks hat bereits eine fertige RDD Implementierung. https://github.com/lucidworks/spark-solr
  42. 42. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH 1 2 3 4 Lucidworks Solr-Spark Adapter V 2.1
  43. 43. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH Beispiele für Logfile Analyse mit Solr und Spark ■Histogramm aller Ausnahmen der Server A,B,C im Zeitraum D ■Schritt 1: Suche ■Solr Query (q=*Exception AND (server: A OR server:B OR server:C) AND timestamp between [1.1.2015, 31.12.2015] ■Schritt 2: Erzeuge eine Map mit Key = << Name der Ausname >>, Value = Anzahl mit Spark ■Spark Grouping
  44. 44. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH 44
  45. 45. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH DEMO +
  46. 46. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH Technische Daten – Intel NUC6i5SYK 46 6th generation Intel® Core™ i5-6260U processor with Intel® Iris™ graphics (1.9 GHz up to 2.8 GHz Turbo, Dual Core, 4 MB Cache, 15W TDP) CPU 32 GB Dual-channel DDR4 SODIMMs 1.2V, 2133 MHz RAM 256 GB Samsung M.2 internal SSDDISK à Der Koffer ist so leistungsfähig wie 4 Laptops 8 Cores, 16 HT Units, 128 GB RAM, 1 TB DiskTotal
  47. 47. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH 47 Technische Cluster Architektur NFS Ubuntu Linux Solr Cloud Zookeeper #1 Spark Zeppelin Master JVM Slave JVM Executor JVM #1 Ubuntu Linux Solr Cloud Zookeeper #2 Spark Zeppelin Master JVM #2 Slave JVM #2 Executor JVM #2 Ubuntu Linux Solr Cloud Spark Master JVM #4 Slave JVM #4 Executor JVM #4 Ubuntu Linux Solr Cloud Zookeeper #3 Spark Master JVM #3 Slave JVM #3 Executor JVM #3 s1 s2 s3 s4 s5 s6 s7 s8 s13 s14 s15 s16 s9 s10 s11 s12 1 23 4
  48. 48. SPARK Worker SOLR 5.3 48 Odroid XU4 2 GB RAM 64 GB eMMC Disk Ubuntu Linux 70$ SPARK Worker SOLR 5.3 SPARK Worker SOLR 5.3 SPARK Worker SOLR 5.3 SPARK Master SOLR 5.3 SPARK Worker ZOOKEEPER 40 Cores 10 GB RAM 320 GB eMMC Disk
  49. 49. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH
  50. 50. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH Zusammenfassung ■SOLR Cloud und Spark sind eine mächtige Kombination für interaktive, Analyse- und Recherche-Anwendungen ■Die Herausforderungen für Entwickler sind hoch. Es gilt nach wie vor das erste Gesetz der verteilten Verarbeitung: „Verteile nur wenn Du es wirklich musst“ ■100% Open Source ■Beide Bausteine lassen relativ einfach miteinander integrieren ■Falls ein Kaufprodukt auf der technischen Basis verwendet werden soll, bietet sich Lucidworks Fusion an. Fusion integriert Solr und Spark zu einer offenen Plattform und liefert professionellen Produktsupport
  51. 51. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH @JohannesWeigend @qaware slideshare.net/qaware blog.qaware.de
  52. 52. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH Alle Demos & Technologien kann man heute Abend im Meetup live anfassen. Herzliche Einladung! Unter anderem mit Jake Mannix, Twitter/Lucidworks, Apache Mahout Commiter, Solr und Spark Experte Jörg Schad, Mesosphere, Experte für DCOS und verteilte Betriebssysteme und dem Cloudcase ®

×