Spark vs. PL/SQL

30
Spark vs. PL/SQL Christopher Thomsen Senior Consultant OPITZ CONSULTING Deutschland GmbH Marian Strüby Senior Consultant

Transcript of Spark vs. PL/SQL

Page 1: Spark vs. PL/SQL

Spark vs. PL/SQLChristopher ThomsenSenior Consultant

OPITZ CONSULTING Deutschland GmbH

Marian StrübySenior Consultant

Page 2: Spark vs. PL/SQL

1Spark?Was ist

Page 3: Spark vs. PL/SQL

Fast and ExpressiveCluster Computing System

Skalierungsframework für

Page 4: Spark vs. PL/SQL

Sparks Kernkonzept●Transformationen auf verteilten Resilent Distributed Datasets ausführen●Verteilung der Daten im „shared-nothing Cluster“ im Arbeitsspeicher oder der Festplatte

Page 5: Spark vs. PL/SQL

Mit RDDs arbeiten

RDDRDDRDDRDD Transformation

Aktion Result

val file = sc textFile “myfile.csv“ val data = file map (_ split “;“)

data saveAsTextFile “myresult.txt“

Page 6: Spark vs. PL/SQL

2Hadoop?Und was ist dieses

Page 7: Spark vs. PL/SQL

Hadoop ist ...●ein Framework für die Verwaltung von Cluster-Kapazitäten.●eine Software, welche Redundanz und Lastverteilung gewährleistet.●auf Skalierung mit kostengünstiger commodity Hardware ausgelegt.●eine Open-Source Plattform für viele andere Werkzeuge.

Page 8: Spark vs. PL/SQL

Hersteller nutzen Hadoop um ...●ihre Software leichter skalierbarer zu machen.●performanceoptimierte Appliancelösungen anbzubieten.●eine kostengünstige Storagealternative anbieten zu können.

Page 9: Spark vs. PL/SQL

Data Node Data Node Data Node

Data Node Data Node Data Node

Master Node iDie Hadoop Infrastruktur bietet mit YARN eine standardisierte Skalierungsplattform für hunderte Spezialistenwerkzeuge.

Page 10: Spark vs. PL/SQL

Data Node Data Node Data Node

Data Node Data Node Data Node

Master Node KonsumentiDas Hadoop Filesystem (HDFS) bietet eine redundante und lastverteilte Storageplattform für aufliegende Applikationen.

Page 11: Spark vs. PL/SQL

Cluster

Betriebs-system YARN, Mesos

Server x86, ARM

Algorithmus MapReduce, Tez, Slider,Spark, Flink

SpracheJava, Scala, Python, HiveQL, PigLatin, ...

Applikation Datameer, RapidMiner,Big Data Discovery, ...

Beowulf, Aiyara

Page 12: Spark vs. PL/SQL

Meine Applikation

Spark Context

Cluster Manager

Worker

SparkExecutor

HDFS

Worker

SparkExecutor

Worker

SparkExecutor

Page 13: Spark vs. PL/SQL

3programmiertUnd wie

010010010101001001101101101010101001111010111

Man in Spark?

Page 14: Spark vs. PL/SQL

Unterstützte ProgrammiersprachenKriterium Scala Python Java RStandalone Programme X X XInteraktive Shell X X XNative Performance X XNative Collections X X

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“)

Page 15: Spark vs. PL/SQL
Page 16: Spark vs. PL/SQL

4Oracle Datenbank?

Aber geht das nicht auch in PL/SQL mit meiner

Page 17: Spark vs. PL/SQL

Relationale Datenbanken sind ...●Allrounder●ACID konform●für interaktive Nutzung durch Konsumenten ausgelegt

Sie scheitern häufig an ...●Datenvolumen im Terabytebereich●Streaming Applikationen●nicht tabellarischen Daten●Kostenstrukturen für Low Value Daten●Anforderungen die Spezialistentools benötigen

Page 18: Spark vs. PL/SQL

C

A

P

Eine Datenbankkann nur 2 dieserKriterien erfüllen

Consistency Partitiontolerance

Availability

Page 19: Spark vs. PL/SQL

Viele Hadoop Tools sind ...●Batchorientierte Werkzeuge●Generische Plattformen●Auf maximalen Datendurchsatz optimiert●für die Verwaltung sehr großer Dateien und Tabellen optimiert

Sie sind NICHT geeignet für ..●wahlfreie Zugriffe●Abfragen mit niedriger Latenzanforderung●direkten Zugriff durch Endkonsumenten●Die Arbeit mit vielen kleinen Dateien oder vielen kleinen Tabellen

Page 20: Spark vs. PL/SQL

PL/SQL Sprachgrundlagen im Vergleich

CREATE FUNCTION myFunc(someNum IN NUMBER)

RETURN NUMBERIS

result NUMBER := 0;BEGIN

FOR a in (SELECT num FROM someTable)LOOP

BEGINIF a.num < 2 ** someNum THEN

result := result – a.num / 2;ELSE

result := result + a.num - 1END;

END LOOP;END;

def myFunc(someNum: Long) = {Sc textFile "someTable" map { a =>

val num = a.numif (num < math.pow(2, someNum))

num / 2else

num - 1} reduce (_ + _)

}

PL/SQL Spark

Schleife

Funktions-signatur

Map und ReduceSchritt stattZählervariable

Page 21: Spark vs. PL/SQL

Orderid NUMBERclient NUMBERitem NUMBERamount FLOATstatus VARCHARmodified DATE

Clientid NUMBERname VARCHARaddress VARCHARcity VARCHARcountry VARCHAR

Itemid NUMBERname VARCHARprice FLOATdensity FLOAT

New Orders

PriceHistoryid NUMBERitem NUMBERprice FLOATvalid DATE

Report

Page 22: Spark vs. PL/SQL

Orderid NUMBERclient NUMBERitem NUMBERamount FLOATstatus VARCHARmodified DATE

SELECT *FROM OrderWHERE amount >= 1AND status LIKE 'Transport%';

SELECT client, ROUND(amount)FROM Order;

SELECT COUNT(DISTINCT client) FROM OrderWHERE modified >= '2015-11-17';

SELECT item, SUM(amount)FROM orderGROUP 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

Page 23: Spark vs. PL/SQL

Orderid NUMBERclient NUMBERitem NUMBERamount FLOATstatus VARCHARmodified DATE

Itemid NUMBERname VARCHARprice FLOATdensity FLOAT

Clientid NUMBERname VARCHARaddress VARCHARcity VARCHARcountry VARCHAR

Wie viel m³ werden heute in Richtung Südkorea verschifft?

SQL Spark

SELECT SUM(o.amount / i.density)FROM Order oINNER JOIN Client cON o.client = c.idINNER JOIN Item iON o.item = i.idWHERE 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 (_ + _)

Page 24: Spark vs. PL/SQL

neworder.csv

Orderid NUMBERclient NUMBERitem NUMBERamount FLOATstatus VARCHARmodified DATE

Clientid NUMBERname VARCHARaddress VARCHARcity VARCHARcountry VARCHAR

1;ArcelorMittal;Avenue de la Liberte 12;Luxemburg;Luxemburg2;Hebei Iron and Steel;Shijiazhuang;Hebei;China3;POSCO;Dongchon-dong 5;Pohang;Südkorea4;Tata Steel;Bombay House 24;Mumbai;Indien5;Gerdau;Av. Farrapos 1811;Porto Alegre;Brasilien6;ThyssenKrupp;Mannesmannstraße 101;Duisburg;Deutschland7;Evraz;6 Saint Andrew Street;London;Vereinigtes Königreich8;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

Page 25: Spark vs. PL/SQL

neworder.csv

SQL Spark

INSERT into clientSELECT seq_dim_client.nextval, a.name, a.address, a.city, a.countryFROM ( 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.address&& c.city == o.city&& c.country == o.country

})}.distinct.zipWithIndex map (

o => new Client(nextClientId + o._2,o._1.clientName, o._1.address,o._1.city, o._1.country))

++ client} saveAsTextFile "stage/client.csv“

Clientid NUMBERname VARCHARaddress VARCHARcity VARCHARcountry VARCHAR

Page 26: Spark vs. PL/SQL

Itemid NUMBERname VARCHARprice FLOATdensity FLOAT

PriceHistoryid NUMBERitem NUMBERprice FLOATvalid DATE

SQL Spark

INSERT into price_historySELECT seq_price_history.nextval, s.id, s.price, sysdateFROM ext_item sWHERE 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 recentPricefilter (_._2._2.isEmpty)map (_._2._1)

} ++ priceHistory} saveAsTextFile "stage/priceHistory.csv“

Page 27: Spark vs. PL/SQL

● 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 UhrStockholm

● 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

Page 28: Spark vs. PL/SQL

•BI Community Event im Rahmen der DOAG K+ADi. 17.11.2015 ab 18:30 im Landbierparadies Nürnberg Wodanstr. 15

•Unconference: OWB – Was Nun?Di. 17.11.2015 / 15 Uhr

•Data Vault ForumMi. 18.11.2015 / 15 Uhr Galileo Lounge, Ebene 3

•Data Integration Day 2015Mi. 9.12.2015 / 10 Uhr, Sulzbach (Taunus)

•DOAG BI8.-9.6.2016, Bonn, Kameha

BI Community - Veranstaltungen

28

Page 29: Spark vs. PL/SQL

TO DO BIG DATA

Viel Spaßauf derDOAG

Konferenz

Page 30: Spark vs. PL/SQL

© OPITZ CONSULTING GmbH 2015Seite 30Enterprise Big Data Testmanagement

Kontakt

Christopher Thomsen, Senior Consultant

OPITZ CONSULTING [email protected] +49 40 741122 1350Mobil +49 173 7279604

Marian Strüby, Senior Consultant

OPITZ CONSULTING [email protected] +49 30 6298889 1625Mobil +49 173 7279144

youtube.com/opitzconsulting

@OC_WIRE

slideshare.net/opitzconsulting

xing.com/net/opitzconsulting