Mais conteúdo relacionado Semelhante a Leveraging the Power of Solr with Spark (20) Leveraging the Power of Solr with Spark1. Leveraging the Power of Solr with Spark
Interaktive Datenanalyse mit Solr Cloud und Spark
Mainz, 21.04.2016 | Johannes Weigend | QAware GmbH
2. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH
Stellen Sie Ihre Fragen direkt oder
per Twitter mit dem Hashtag #cloudnativenerd
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
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. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH
Hadoop liefert als Antworten auf horizontale
Skalierung von Daten und Funktionalität
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. 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
12. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH
DEMO
13. Spark
1. Solr Cloud für Analyseanwendungen
Filter
Search Search Search
Map Map Map
Reduce
DatenflussFilter Filter
Search / NoSQL
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. 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. 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. 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. 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. 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. 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. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH
DEMO
22. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH
Solr unterstützt JSON Queries im HTTP-Post Header
23. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH
Mit Term Facets können Felder gruppiert und gezählt
werden.
23
24. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH
Function Facets sind Aggregationsfunktonen
24
http://yonik.com/solr-facet-functions/
25. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH
Facets können hierarchisch zu Pivot Facets geschachtelt
werden.
25
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. 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. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH
Alles super! – Oder?
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
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. 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. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH
Ein erstes Spark Programm
34. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH
Spark Pattern 1: Verteilter Task mit Parametern
35. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH
Spark Pattern 2: Verteiltes Lesen aus externen Quellen
36. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH
Spark Pattern 3: Caching und Weiterverarbeitung als RDD
38. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH
DEMO
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. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH
LucidWorks hat bereits eine fertige RDD Implementierung.
https://github.com/lucidworks/spark-solr
42. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH
1
2
3
4
Lucidworks Solr-Spark
Adapter V 2.1
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
45. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH
DEMO
+
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. 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. 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
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. JAX 2016 Mainz | 21.04.2016 | Johannes Weigend | © QAware GmbH
@JohannesWeigend
@qaware
slideshare.net/qaware
blog.qaware.de
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 ®