SlideShare ist ein Scribd-Unternehmen logo
1 von 30
Spark vs. PL/SQL
Christopher Thomsen
Senior Consultant
OPITZ CONSULTING Deutschland GmbH
Marian Strüby
Senior Consultant
Spark?
Was ist
Fast and Expressive
Cluster Computing System
Skalierungsframework für
Sparks Kernkonzept
●Transformationen auf verteiltenResilent Distributed Datasets ausführen
●Verteilung der Datenim„shared-nothing Cluster“ im Arbeitsspeicher oder der Festplatte
Mit RDDs arbeiten
RDDRDDRDDRDD Transformation
Aktion Result
val file = sc textFile “myfile.csv“ val data = file map (_ split “;“)
data saveAsTextFile “myresult.txt“
Hadoop?
Und was ist dieses
Hadoop ist ...
●ein Framework für die Verwaltung vonCluster-Kapazitäten.
●eine Software, welcheRedundanz und Lastverteilung gewährleistet.
●auf Skalierung mit kostengünstigercommodity Hardware ausgelegt.
HerstellernutzenHadoopum ...
●ihre Software leichter skalierbarer zu machen.
●performanceoptimierte Appliancelösungen anbzubieten.
●eine kostengünstige Storagealternative anbieten zu können.
Data Node Data Node Data Node
Data Node Data Node Data Node
MasterNode i
Die Hadoop Infrastrukturbietet mit YARNeine stan
Data Node Data Node Data Node
Data Node Data Node Data Node
MasterNode Konsumenti
Das Hadoop Filesystem (HDFS) bietet eine redundanteundlastverteilte Storageplattform für aufliegendeApplikationen.
Cluster
Betriebs-
system
YARN, Mesos
Server x86, ARM
Algorithmus MapReduce, Tez, Slider,
Spark, Flink
Sprache Java, Scala, Python, HiveQL, PigLatin, ...
Applikation Datameer, RapidMiner,
Big Data Discovery, ...
Beowulf, Aiyara
Meine Applikation
Spark Context
Cluster Manager
Worker
Spark
Executor
HDFS
Worker
Spark
Executor
Worker
Spark
Executor
programmiert
Und wie
010010010
101001001
101101101
010101001
111010111
Man in Spark?
Unterstützte Programmiersprachen
val result = sc textFile “myfile.csv“ map (_ split “;“) filter (_(1) contains “Spark“)
result = sc.textFile(“myfile.csv“).map(lambda s: s.split(“;“)).filter(lambda s: “Spark“ in s[1])
JavaRDD<String[]> result = sc.textFile(“myfile.csv“).map.(new Function<String, String[]> () {
String[] call(String s) { return s.split(“;“); }
}).filter(new Function<String[], Boolean>() {
Boolean call(String[] s) { return s[1].contains(“Spark“); }
})
df <- lapply(textFile(sc, “myfile.csv“) function(s) { strsplit(s, “;“) })
result <- filter(df, grepl(df[1], “Spark“)
Oracle
Datenbank?
Aber gehtdas nicht
auch in PL/SQLmit meiner
Relationale Datenbankensind ...
●Allrounder
●ACID konform
●für interaktive Nutzung durch Konsumenten ausgelegt
Siescheitern häufig an ...
●Datenvolumen im Terabytebereich
●Streaming Applikationen
●nicht tabellarischen Daten
●Kostenstrukturen für Low Value Daten
●Anforderungen die Spezialistentools benötigen
C
A
P
Eine Datenbank
kannnur 2 dieser
Kriterien erfüllen
Consistency Partition
tolerance
Availability
VieleHadoop Tools sind ...
●Batchorientierte Werkzeuge
●Generische Plattformen
●Auf maximalen Datendurchsatz optimiert
●für die Verwaltung sehr großer Dateien undTabellen optimiert
Sie sind NICHT geeignet für ..
●wahlfreie Zugriffe
●Abfragen mitniedriger Latenzanforderung
●direkten Zugriffdurch Endkonsumenten
●Die Arbeit mit vielen kleinen Dateienoder vielen kleinen Tabellen
PL/SQL Sprachgrundlagen im Vergleich
CREATE FUNCTION myFunc(
someNum IN NUMBER)
RETURN NUMBER
IS
result NUMBER := 0;
BEGIN
FOR a in (SELECT num FROM someTable)
LOOP
BEGIN
IF a.num < 2 ** someNum THEN
result := result – a.num / 2;
ELSE
result := result + a.num - 1
END;
END LOOP;
END;
def myFunc(someNum: Long) = {
Sc textFile "someTable" map { a =>
val num = a.num
if (num < math.pow(2, someN
num / 2
else
num - 1
} reduce (_ + _)
}
PL/SQL Spark
Map und Reduce
Schritt statt
Zählervariable
Order
id NUMBER
client NUMBER
item NUMBER
amount FLOAT
status VARCHAR
modified DATE
Client
id NUMBER
name VARCHAR
address VARCHAR
city VARCHAR
country VARCHAR
Item
id NUMBER
name VARCHAR
price FLOAT
density FLOAT
New Orders
PriceHistory
id NUMBER
item NUMBER
price FLOAT
valid DATE
Report
Order
id NUMBER
client NUMBER
item NUMBER
amount FLOAT
status VARCHAR
modified DATE
SELECT *
FROM Order
WHERE amount >= 1
AND status LIKE 'Transport%';
SELECT client, ROUND(amount)
FROM Order;
SELECT COUNT(DISTINCT client) FROM Order
WHERE modified >= '2015-11-17';
SELECT item, SUM(amount)
FROM order
GROUP BY amount;
order filter (o => o.amount >= 1
&& o.status startsWith "Transport")
order map (o => o.client -> o.amount.toInt)
(order filter (_.modified.getTime >= format
parse "2015-11-17") map (_.client) distinct
).count
order map (o => o.item -> o.amount)
reduceByKey (_ + _)
case class Order(id: Long, client: Long,
item: Long, amount: Float,
status: String, modified: Date)
val dateFormat = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss")
val order = sc textFile "Order.csv" map (_ split ";")
map (o => new Order((0).toLong, o(1).toLong,
o(2).toLong, o(3).toFloat, o(4),
dateFormat parse o(5))
SQL Spark
Order
id NUMBER
client NUMBER
item NUMBER
amount FLOAT
status VARCHAR
modified DATE
Item
id NUMBER
name VARCHAR
price FLOAT
density FLOAT
Client
id NUMBER
name VARCHAR
address VARCHAR
city VARCHAR
country VARCHAR
Wie viel m³ werden heute in Richtung Südkorea verschifft?
SQL Spark
SELECT SUM(o.amount / i.density)
FROM Order o
INNER JOIN Client c
ON o.client = c.id
INNER JOIN Item i
ON o.item = i.id
WHERE o.status = 'Transport via See'
AND c.country = 'Südkorea'
AND o.modified >= '2015-11-17'
val itemPair = item map (i => i.id -> i)
val targetClient = client filter (
_.country == "Südkorea") map (_.id) first
order filter {
o => o.status == "Transport via See"
&& o.modified.getTime >= new Date().getTime
} map (o => o.item -> o) join itemPair map {
e => e._2._1.amount / e._2._2.density
} reduce (_ + _)
neworder.csv
Order
id NUMBER
client NUMBER
item NUMBER
amount FLOAT
status VARCHAR
modified DATE
Client
id NUMBER
name VARCHAR
address VARCHAR
city VARCHAR
country VARCHAR
1;ArcelorMittal;Avenue de la Liberte 12;Luxemburg;Luxemburg
2;Hebei Iron and Steel;Shijiazhuang;Hebei;China
3;POSCO;Dongchon-dong 5;Pohang;Südkorea
4;Tata Steel;Bombay House 24;Mumbai;Indien
5;Gerdau;Av. Farrapos 1811;Porto Alegre;Brasilien
6;ThyssenKrupp;Mannesmannstraße 101;Duisburg;Deutschland
7;Evraz;6 Saint Andrew Street;London;Vereinigtes Königreich
8;Severstal;ul. Stalevarov 45А;Cherepovets;Russland
1010;Hebei Iron and Steel;Shijiazhuang;Hebei;China;Zink;54.07;2015-11-15 09:26:28
1011;Nucor;1915 Rexford Rd 400;Charlotte;Vereinigte Staaten von Amerika;Zink;9.01;2015-11-15 05:27:19
1012;Gerdau;Av. Farrapos 1811;Porto Alegre;Brasilien;Nickel;69.53;2015-11-15 12:47:05
Neue Datensätze hinzufügen
neworder.csv
SQL Spark
INSERT into client
SELECT seq_dim_client.nextval,
a.name, a.address, a.city, a.country
FROM (
SELECT DISTINCT
s.client_name,s.address,
s.city, s.country
FROM ext_neworder s
WHERE NOT EXISTS (
SELECT 'x' FROM client t
WHERE s.client_name = t.name
AND s.address = t.address
AND s.city = t.city
AND s.country = t.country)
) a
val nextClientId = client.reduce((a, b) =>
if (a.id > b.id) a else b) map (_.id)
{
{
neworder filter (o => !(client exists {
c => c.name == o.clientName
&& c.address == o
&& c.city == o.city
&& c.country == o
})
}.distinct.zipWithIndex map (
o => new Client(nextClientId + o._2,
o._1.clientName, o._1.addres
o._1.city, o._1.country))
++ client
} saveAsTextFile "stage/client.csv“
Client
id NUMBER
name VARCHAR
address VARCHAR
city VARCHAR
country VARCHAR
Item
id NUMBER
name VARCHAR
price FLOAT
density FLOAT
PriceHistory
id NUMBER
item NUMBER
price FLOAT
valid DATE
SQL Spark
INSERT into price_history
SELECT
seq_price_history.nextval, s.id,
s.price, sysdate
FROM ext_item s
WHERE NOT EXISTS (
SELECT 'x'
FROM price_history t
JOIN (
SELECT id, MAX(valid) valid
FROM price_history
GROUP BY id
) h
ON t.id = h.id
AND t.valid = h.valid
WHERE s.id = t.item
AND s.price = t.price);
val recentPrice = priceHistory groupBy (_.item)
map (p => p._1 -> p._2 sortBy (_.valid) last)
{
{
item map (i => i.name -> new )
leftOuterJoin recentPrice
filter (_._2._2.isEmpty)
map (_._2._1)
} ++ priceHistory
} saveAsTextFile "stage/priceHistory.csv“
● Hadoop - Eine Erweiterung für die Oracle DB? (Matthias Fuchs)
17.11.2015 16:00 Uhr Kiew
● Using Analytical SQL to Intelligently Explore Big Data (Keith Laker)
18.11.2015 17:00 Uhr Oslo
● How to choose between Hadoop, NoSQL or Oracle Database
(Jean-Pierre Dijcks) 19.11.2015 12:00 Uhr Stockholm
● Big Data Processing mit Spark (Matthias Höreth)
20.11.2015 9:00 Uhr Helsinki
Weitere Vorträge zu diesem Thema auf der DOAG ...
27
•BI Community Event im Rahmen der DOAG K+A
Di. 17.11.2015 ab 18:30 im Landbierparadies Nürnberg Wodanstr. 15
•Unconference: OWB – Was Nun?
Di. 17.11.2015 / 15 Uhr
•Data Vault Forum
Mi. 18.11.2015 / 15 Uhr Galileo Lounge, Ebene 3
•Data Integration Day 2015
Mi. 9.12.2015 / 10 Uhr, Sulzbach (Taunus)
•DOAG BI
8.-9.6.2016, Bonn, Kameha
BI Community - Veranstaltungen
28
TO DO BIG DATA
Viel Spaß
aufder
DOAG
Konferenz
© OPITZ CONSULTING GmbH 2015
Seite 30
Enterprise Big Data Testmanagement
Kontakt
Christopher Thomsen, Senior Consultant
OPITZ CONSULTING GmbH
christopher.thomsen@opitz-consulting.com
Telefon +49 40 741122 1350
Mobil +49 173 7279604
Marian Strüby, Senior Consultant
OPITZ CONSULTING GmbH
marian.strueby@opitz-consulting.com
Telefon +49 30 6298889 1625
Mobil +49 173 7279144
youtube.com/opitzconsulting
@OC_WIRE
slideshare.net/opitzconsulting
xing.com/net/opitzconsulting

Weitere ähnliche Inhalte

Ähnlich wie Spark vs. PL/SQL

Differenzial Analyse in der Praxis (Florian Walther)
Differenzial Analyse in der Praxis (Florian Walther)Differenzial Analyse in der Praxis (Florian Walther)
Differenzial Analyse in der Praxis (Florian Walther)
GEEKcon
 

Ähnlich wie Spark vs. PL/SQL (20)

Apache CouchDB at PHPUG Karlsruhe, Germany (Jan 27th 2009)
Apache CouchDB at PHPUG Karlsruhe, Germany (Jan 27th 2009)Apache CouchDB at PHPUG Karlsruhe, Germany (Jan 27th 2009)
Apache CouchDB at PHPUG Karlsruhe, Germany (Jan 27th 2009)
 
Oracle Performance-Analyse mit frei verfügbaren Mitteln
Oracle Performance-Analyse mit frei verfügbaren Mitteln Oracle Performance-Analyse mit frei verfügbaren Mitteln
Oracle Performance-Analyse mit frei verfügbaren Mitteln
 
Performance-Analyse mit Bordmitteln
Performance-Analyse mit BordmittelnPerformance-Analyse mit Bordmitteln
Performance-Analyse mit Bordmitteln
 
Go - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeGo - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare Systeme
 
Dynamische Websites mit XML
Dynamische Websites mit XMLDynamische Websites mit XML
Dynamische Websites mit XML
 
FMK2022 Drucken über Dateigrenzen hinweg von Philipp Puls
FMK2022 Drucken über Dateigrenzen hinweg von Philipp PulsFMK2022 Drucken über Dateigrenzen hinweg von Philipp Puls
FMK2022 Drucken über Dateigrenzen hinweg von Philipp Puls
 
Oracle12c für Entwickler
Oracle12c für EntwicklerOracle12c für Entwickler
Oracle12c für Entwickler
 
Oracle12c für Entwickler
Oracle12c für EntwicklerOracle12c für Entwickler
Oracle12c für Entwickler
 
XML-Socket-Server zur Kommunikation mit Flash
XML-Socket-Server zur Kommunikation mit FlashXML-Socket-Server zur Kommunikation mit Flash
XML-Socket-Server zur Kommunikation mit Flash
 
Modell der Zusammenarbeit. Migration von Progress 4GL nach C#.NET
Modell der Zusammenarbeit. Migration von Progress 4GL nach C#.NET Modell der Zusammenarbeit. Migration von Progress 4GL nach C#.NET
Modell der Zusammenarbeit. Migration von Progress 4GL nach C#.NET
 
OSMC 2012 | Performance graphing mit inGraph by Eric Lippmann
OSMC 2012 | Performance graphing mit inGraph by Eric LippmannOSMC 2012 | Performance graphing mit inGraph by Eric Lippmann
OSMC 2012 | Performance graphing mit inGraph by Eric Lippmann
 
Elegantes In-Memory Computing mit Apache Ignite und Kubernetes. @data2day
Elegantes In-Memory Computing mit Apache Ignite und Kubernetes. @data2dayElegantes In-Memory Computing mit Apache Ignite und Kubernetes. @data2day
Elegantes In-Memory Computing mit Apache Ignite und Kubernetes. @data2day
 
In-Memory Computing mit Apache Ignite und Kubernetes
In-Memory Computing mit Apache Ignite und KubernetesIn-Memory Computing mit Apache Ignite und Kubernetes
In-Memory Computing mit Apache Ignite und Kubernetes
 
PureSQL APEX Connect
PureSQL APEX ConnectPureSQL APEX Connect
PureSQL APEX Connect
 
Pure SQL for batch processing
Pure SQL for batch processingPure SQL for batch processing
Pure SQL for batch processing
 
Amazon Redshift
Amazon RedshiftAmazon Redshift
Amazon Redshift
 
OPAL - Open Data Portal Germany
OPAL - Open Data Portal GermanyOPAL - Open Data Portal Germany
OPAL - Open Data Portal Germany
 
Differenzial Analyse in der Praxis (Florian Walther)
Differenzial Analyse in der Praxis (Florian Walther)Differenzial Analyse in der Praxis (Florian Walther)
Differenzial Analyse in der Praxis (Florian Walther)
 
MySQL Performance Tuning für Oracle-DBA's
MySQL Performance Tuning für Oracle-DBA'sMySQL Performance Tuning für Oracle-DBA's
MySQL Performance Tuning für Oracle-DBA's
 
Praesentation TYPO3Camp Berlin Speed mit Extbase
Praesentation TYPO3Camp Berlin Speed mit ExtbasePraesentation TYPO3Camp Berlin Speed mit Extbase
Praesentation TYPO3Camp Berlin Speed mit Extbase
 

Mehr von OPITZ CONSULTING Deutschland

Mehr von OPITZ CONSULTING Deutschland (20)

OC|Webcast: Grundlagen der Oracle Lizenzierung
OC|Webcast: Grundlagen der Oracle LizenzierungOC|Webcast: Grundlagen der Oracle Lizenzierung
OC|Webcast: Grundlagen der Oracle Lizenzierung
 
OC|Webcast "Java heute" vom 28.09.2021
OC|Webcast "Java heute" vom 28.09.2021OC|Webcast "Java heute" vom 28.09.2021
OC|Webcast "Java heute" vom 28.09.2021
 
OC|Webcast "Java heute" vom 24.08.2021
OC|Webcast "Java heute" vom 24.08.2021OC|Webcast "Java heute" vom 24.08.2021
OC|Webcast "Java heute" vom 24.08.2021
 
OC|Webcast "Daten wirklich nutzen"
OC|Webcast "Daten wirklich nutzen"OC|Webcast "Daten wirklich nutzen"
OC|Webcast "Daten wirklich nutzen"
 
Architecture Room Stuttgart - "Cloud-native ist nur ein Teil des Spiels!"
Architecture Room Stuttgart - "Cloud-native ist nur ein Teil des Spiels!"Architecture Room Stuttgart - "Cloud-native ist nur ein Teil des Spiels!"
Architecture Room Stuttgart - "Cloud-native ist nur ein Teil des Spiels!"
 
OC|Webcast "Willkommen in der Cloud!"
OC|Webcast "Willkommen in der Cloud!"OC|Webcast "Willkommen in der Cloud!"
OC|Webcast "Willkommen in der Cloud!"
 
OC|Webcast "Die neue Welt der Virtualisierung"
OC|Webcast "Die neue Welt der Virtualisierung"OC|Webcast "Die neue Welt der Virtualisierung"
OC|Webcast "Die neue Welt der Virtualisierung"
 
10 Thesen zur professionellen Softwareentwicklung
10 Thesen zur professionellen Softwareentwicklung10 Thesen zur professionellen Softwareentwicklung
10 Thesen zur professionellen Softwareentwicklung
 
OC|Webcast: Oracle Lizenzierung - Lizenznews 2021
OC|Webcast: Oracle Lizenzierung - Lizenznews 2021OC|Webcast: Oracle Lizenzierung - Lizenznews 2021
OC|Webcast: Oracle Lizenzierung - Lizenznews 2021
 
OC|Webcast: Oracle Lizenzierung - Die größten Fallen in der Praxis
OC|Webcast: Oracle Lizenzierung - Die größten Fallen in der PraxisOC|Webcast: Oracle Lizenzierung - Die größten Fallen in der Praxis
OC|Webcast: Oracle Lizenzierung - Die größten Fallen in der Praxis
 
OC|Webcast: Oracle Lizenzierung - Virtualisierung und Cloud
OC|Webcast: Oracle Lizenzierung - Virtualisierung und CloudOC|Webcast: Oracle Lizenzierung - Virtualisierung und Cloud
OC|Webcast: Oracle Lizenzierung - Virtualisierung und Cloud
 
OC|Webcast: Grundlagen der Oracle-Lizenzierung
OC|Webcast: Grundlagen der Oracle-LizenzierungOC|Webcast: Grundlagen der Oracle-Lizenzierung
OC|Webcast: Grundlagen der Oracle-Lizenzierung
 
OC|Weekly Talk: Inspect’n’Adapt – Make Change come true!
OC|Weekly Talk: Inspect’n’Adapt – Make Change come true!OC|Weekly Talk: Inspect’n’Adapt – Make Change come true!
OC|Weekly Talk: Inspect’n’Adapt – Make Change come true!
 
OC|Webcast: Schnell und clever in die AWS Cloud – Migrationsszenarien und Han...
OC|Webcast: Schnell und clever in die AWS Cloud – Migrationsszenarien und Han...OC|Webcast: Schnell und clever in die AWS Cloud – Migrationsszenarien und Han...
OC|Webcast: Schnell und clever in die AWS Cloud – Migrationsszenarien und Han...
 
OC|Weekly Talk The Power of DevOps…
OC|Weekly Talk  The Power of DevOps…OC|Weekly Talk  The Power of DevOps…
OC|Weekly Talk The Power of DevOps…
 
OC|Weekly Talk: "Das müsste man mal digitalisieren" - Mit Low-Code schnell zu...
OC|Weekly Talk: "Das müsste man mal digitalisieren" - Mit Low-Code schnell zu...OC|Weekly Talk: "Das müsste man mal digitalisieren" - Mit Low-Code schnell zu...
OC|Weekly Talk: "Das müsste man mal digitalisieren" - Mit Low-Code schnell zu...
 
OC|Weekly Talk: Service Management – Was hat sich durch Corona geändert?
OC|Weekly Talk: Service Management – Was hat sich durch Corona geändert?OC|Weekly Talk: Service Management – Was hat sich durch Corona geändert?
OC|Weekly Talk: Service Management – Was hat sich durch Corona geändert?
 
OC|Weekly Talk - Digitales Coaching & Smart Sparring
OC|Weekly Talk - Digitales Coaching & Smart Sparring OC|Weekly Talk - Digitales Coaching & Smart Sparring
OC|Weekly Talk - Digitales Coaching & Smart Sparring
 
OC|Weekly Talk - Beratung remote
OC|Weekly Talk - Beratung remoteOC|Weekly Talk - Beratung remote
OC|Weekly Talk - Beratung remote
 
Effiziente Betriebsoptimierung durch Cloud Nutzung
Effiziente Betriebsoptimierung durch Cloud NutzungEffiziente Betriebsoptimierung durch Cloud Nutzung
Effiziente Betriebsoptimierung durch Cloud Nutzung
 

Spark vs. PL/SQL

  • 1. Spark vs. PL/SQL Christopher Thomsen Senior Consultant OPITZ CONSULTING Deutschland GmbH Marian Strüby Senior Consultant
  • 3. Fast and Expressive Cluster Computing System Skalierungsframework für
  • 4. Sparks Kernkonzept ●Transformationen auf verteiltenResilent Distributed Datasets ausführen ●Verteilung der Datenim„shared-nothing Cluster“ im Arbeitsspeicher oder der Festplatte
  • 5. Mit RDDs arbeiten RDDRDDRDDRDD Transformation Aktion Result val file = sc textFile “myfile.csv“ val data = file map (_ split “;“) data saveAsTextFile “myresult.txt“
  • 7. Hadoop ist ... ●ein Framework für die Verwaltung vonCluster-Kapazitäten. ●eine Software, welcheRedundanz und Lastverteilung gewährleistet. ●auf Skalierung mit kostengünstigercommodity Hardware ausgelegt.
  • 8. HerstellernutzenHadoopum ... ●ihre Software leichter skalierbarer zu machen. ●performanceoptimierte Appliancelösungen anbzubieten. ●eine kostengünstige Storagealternative anbieten zu können.
  • 9. Data Node Data Node Data Node Data Node Data Node Data Node MasterNode i Die Hadoop Infrastrukturbietet mit YARNeine stan
  • 10. Data Node Data Node Data Node Data Node Data Node Data Node MasterNode Konsumenti Das Hadoop Filesystem (HDFS) bietet eine redundanteundlastverteilte Storageplattform für aufliegendeApplikationen.
  • 11. Cluster Betriebs- system YARN, Mesos Server x86, ARM Algorithmus MapReduce, Tez, Slider, Spark, Flink Sprache Java, Scala, Python, HiveQL, PigLatin, ... Applikation Datameer, RapidMiner, Big Data Discovery, ... Beowulf, Aiyara
  • 12. Meine Applikation Spark Context Cluster Manager Worker Spark Executor HDFS Worker Spark Executor Worker Spark Executor
  • 14. Unterstützte Programmiersprachen val result = sc textFile “myfile.csv“ map (_ split “;“) filter (_(1) contains “Spark“) result = sc.textFile(“myfile.csv“).map(lambda s: s.split(“;“)).filter(lambda s: “Spark“ in s[1]) JavaRDD<String[]> result = sc.textFile(“myfile.csv“).map.(new Function<String, String[]> () { String[] call(String s) { return s.split(“;“); } }).filter(new Function<String[], Boolean>() { Boolean call(String[] s) { return s[1].contains(“Spark“); } }) df <- lapply(textFile(sc, “myfile.csv“) function(s) { strsplit(s, “;“) }) result <- filter(df, grepl(df[1], “Spark“)
  • 15.
  • 17. Relationale Datenbankensind ... ●Allrounder ●ACID konform ●für interaktive Nutzung durch Konsumenten ausgelegt Siescheitern häufig an ... ●Datenvolumen im Terabytebereich ●Streaming Applikationen ●nicht tabellarischen Daten ●Kostenstrukturen für Low Value Daten ●Anforderungen die Spezialistentools benötigen
  • 18. C A P Eine Datenbank kannnur 2 dieser Kriterien erfüllen Consistency Partition tolerance Availability
  • 19. VieleHadoop Tools sind ... ●Batchorientierte Werkzeuge ●Generische Plattformen ●Auf maximalen Datendurchsatz optimiert ●für die Verwaltung sehr großer Dateien undTabellen optimiert Sie sind NICHT geeignet für .. ●wahlfreie Zugriffe ●Abfragen mitniedriger Latenzanforderung ●direkten Zugriffdurch Endkonsumenten ●Die Arbeit mit vielen kleinen Dateienoder vielen kleinen Tabellen
  • 20. PL/SQL Sprachgrundlagen im Vergleich CREATE FUNCTION myFunc( someNum IN NUMBER) RETURN NUMBER IS result NUMBER := 0; BEGIN FOR a in (SELECT num FROM someTable) LOOP BEGIN IF a.num < 2 ** someNum THEN result := result – a.num / 2; ELSE result := result + a.num - 1 END; END LOOP; END; def myFunc(someNum: Long) = { Sc textFile "someTable" map { a => val num = a.num if (num < math.pow(2, someN num / 2 else num - 1 } reduce (_ + _) } PL/SQL Spark Map und Reduce Schritt statt Zählervariable
  • 21. Order id NUMBER client NUMBER item NUMBER amount FLOAT status VARCHAR modified DATE Client id NUMBER name VARCHAR address VARCHAR city VARCHAR country VARCHAR Item id NUMBER name VARCHAR price FLOAT density FLOAT New Orders PriceHistory id NUMBER item NUMBER price FLOAT valid DATE Report
  • 22. Order id NUMBER client NUMBER item NUMBER amount FLOAT status VARCHAR modified DATE SELECT * FROM Order WHERE amount >= 1 AND status LIKE 'Transport%'; SELECT client, ROUND(amount) FROM Order; SELECT COUNT(DISTINCT client) FROM Order WHERE modified >= '2015-11-17'; SELECT item, SUM(amount) FROM order GROUP BY amount; order filter (o => o.amount >= 1 && o.status startsWith "Transport") order map (o => o.client -> o.amount.toInt) (order filter (_.modified.getTime >= format parse "2015-11-17") map (_.client) distinct ).count order map (o => o.item -> o.amount) reduceByKey (_ + _) case class Order(id: Long, client: Long, item: Long, amount: Float, status: String, modified: Date) val dateFormat = new SimpleDateFormat( "yyyy-MM-dd HH:mm:ss") val order = sc textFile "Order.csv" map (_ split ";") map (o => new Order((0).toLong, o(1).toLong, o(2).toLong, o(3).toFloat, o(4), dateFormat parse o(5)) SQL Spark
  • 23. Order id NUMBER client NUMBER item NUMBER amount FLOAT status VARCHAR modified DATE Item id NUMBER name VARCHAR price FLOAT density FLOAT Client id NUMBER name VARCHAR address VARCHAR city VARCHAR country VARCHAR Wie viel m³ werden heute in Richtung Südkorea verschifft? SQL Spark SELECT SUM(o.amount / i.density) FROM Order o INNER JOIN Client c ON o.client = c.id INNER JOIN Item i ON o.item = i.id WHERE o.status = 'Transport via See' AND c.country = 'Südkorea' AND o.modified >= '2015-11-17' val itemPair = item map (i => i.id -> i) val targetClient = client filter ( _.country == "Südkorea") map (_.id) first order filter { o => o.status == "Transport via See" && o.modified.getTime >= new Date().getTime } map (o => o.item -> o) join itemPair map { e => e._2._1.amount / e._2._2.density } reduce (_ + _)
  • 24. neworder.csv Order id NUMBER client NUMBER item NUMBER amount FLOAT status VARCHAR modified DATE Client id NUMBER name VARCHAR address VARCHAR city VARCHAR country VARCHAR 1;ArcelorMittal;Avenue de la Liberte 12;Luxemburg;Luxemburg 2;Hebei Iron and Steel;Shijiazhuang;Hebei;China 3;POSCO;Dongchon-dong 5;Pohang;Südkorea 4;Tata Steel;Bombay House 24;Mumbai;Indien 5;Gerdau;Av. Farrapos 1811;Porto Alegre;Brasilien 6;ThyssenKrupp;Mannesmannstraße 101;Duisburg;Deutschland 7;Evraz;6 Saint Andrew Street;London;Vereinigtes Königreich 8;Severstal;ul. Stalevarov 45А;Cherepovets;Russland 1010;Hebei Iron and Steel;Shijiazhuang;Hebei;China;Zink;54.07;2015-11-15 09:26:28 1011;Nucor;1915 Rexford Rd 400;Charlotte;Vereinigte Staaten von Amerika;Zink;9.01;2015-11-15 05:27:19 1012;Gerdau;Av. Farrapos 1811;Porto Alegre;Brasilien;Nickel;69.53;2015-11-15 12:47:05 Neue Datensätze hinzufügen
  • 25. neworder.csv SQL Spark INSERT into client SELECT seq_dim_client.nextval, a.name, a.address, a.city, a.country FROM ( SELECT DISTINCT s.client_name,s.address, s.city, s.country FROM ext_neworder s WHERE NOT EXISTS ( SELECT 'x' FROM client t WHERE s.client_name = t.name AND s.address = t.address AND s.city = t.city AND s.country = t.country) ) a val nextClientId = client.reduce((a, b) => if (a.id > b.id) a else b) map (_.id) { { neworder filter (o => !(client exists { c => c.name == o.clientName && c.address == o && c.city == o.city && c.country == o }) }.distinct.zipWithIndex map ( o => new Client(nextClientId + o._2, o._1.clientName, o._1.addres o._1.city, o._1.country)) ++ client } saveAsTextFile "stage/client.csv“ Client id NUMBER name VARCHAR address VARCHAR city VARCHAR country VARCHAR
  • 26. Item id NUMBER name VARCHAR price FLOAT density FLOAT PriceHistory id NUMBER item NUMBER price FLOAT valid DATE SQL Spark INSERT into price_history SELECT seq_price_history.nextval, s.id, s.price, sysdate FROM ext_item s WHERE NOT EXISTS ( SELECT 'x' FROM price_history t JOIN ( SELECT id, MAX(valid) valid FROM price_history GROUP BY id ) h ON t.id = h.id AND t.valid = h.valid WHERE s.id = t.item AND s.price = t.price); val recentPrice = priceHistory groupBy (_.item) map (p => p._1 -> p._2 sortBy (_.valid) last) { { item map (i => i.name -> new ) leftOuterJoin recentPrice filter (_._2._2.isEmpty) map (_._2._1) } ++ priceHistory } saveAsTextFile "stage/priceHistory.csv“
  • 27. ● Hadoop - Eine Erweiterung für die Oracle DB? (Matthias Fuchs) 17.11.2015 16:00 Uhr Kiew ● Using Analytical SQL to Intelligently Explore Big Data (Keith Laker) 18.11.2015 17:00 Uhr Oslo ● How to choose between Hadoop, NoSQL or Oracle Database (Jean-Pierre Dijcks) 19.11.2015 12:00 Uhr Stockholm ● Big Data Processing mit Spark (Matthias Höreth) 20.11.2015 9:00 Uhr Helsinki Weitere Vorträge zu diesem Thema auf der DOAG ... 27
  • 28. •BI Community Event im Rahmen der DOAG K+A Di. 17.11.2015 ab 18:30 im Landbierparadies Nürnberg Wodanstr. 15 •Unconference: OWB – Was Nun? Di. 17.11.2015 / 15 Uhr •Data Vault Forum Mi. 18.11.2015 / 15 Uhr Galileo Lounge, Ebene 3 •Data Integration Day 2015 Mi. 9.12.2015 / 10 Uhr, Sulzbach (Taunus) •DOAG BI 8.-9.6.2016, Bonn, Kameha BI Community - Veranstaltungen 28
  • 29. TO DO BIG DATA Viel Spaß aufder DOAG Konferenz
  • 30. © OPITZ CONSULTING GmbH 2015 Seite 30 Enterprise Big Data Testmanagement Kontakt Christopher Thomsen, Senior Consultant OPITZ CONSULTING GmbH christopher.thomsen@opitz-consulting.com Telefon +49 40 741122 1350 Mobil +49 173 7279604 Marian Strüby, Senior Consultant OPITZ CONSULTING GmbH marian.strueby@opitz-consulting.com Telefon +49 30 6298889 1625 Mobil +49 173 7279144 youtube.com/opitzconsulting @OC_WIRE slideshare.net/opitzconsulting xing.com/net/opitzconsulting