Spark vs. PL/SQL

download Spark vs. PL/SQL

If you can't read please download the document

  • date post

    19-Feb-2017
  • Category

    Technology

  • view

    3.486
  • download

    0

Embed Size (px)

Transcript of Spark vs. PL/SQL

PowerPoint-Prsentation

Spark vs. PL/SQLChristopher ThomsenSenior ConsultantOPITZ CONSULTING Deutschland GmbHMarian StrbySenior Consultant

1Spark?Was ist

Fast and ExpressiveCluster Computing System

Skalierungsframework fr

Sparks Kernkonzept

Transformationen auf verteilten Resilent Distributed Datasets ausfhrenVerteilung der Daten im shared-nothing Cluster im Arbeitsspeicher oder der Festplatte

Mit RDDs arbeitenRDDRDDRDDRDDTransformationAktionResultval file = sc textFile myfile.csvval data = file map (_ split ;)data saveAsTextFile myresult.txt

2Hadoop?Und was ist dieses

Hadoop ist ...

ein Framework fr die Verwaltung von Cluster-Kapazitten.eine Software, welche Redundanz und Lastverteilung gewhrleistet.auf Skalierung mit kostengnstiger commodity Hardware ausgelegt.eine Open-Source Plattform fr viele andere Werkzeuge.

Hersteller nutzen Hadoop um ...

ihre Software leichter skalierbarer zu machen.performanceoptimierte Appliancelsungen anbzubieten.eine kostengnstige Storagealternative anbieten zu knnen.

Data Node

Data Node

Data Node

Data Node

Data Node

Data Node

Master Node

iDie Hadoop Infrastruktur bietet mit YARN eine standardisierte Skalierungsplattform fr hunderte Spezialistenwerkzeuge.

Data Node

Data Node

Data Node

Data Node

Data Node

Data Node

Master Node

Konsument

iDas Hadoop Filesystem (HDFS) bietet eine redundante und lastverteilte Storageplattform fr aufliegende Applikationen.

Cluster

Betriebs-systemYARN, Mesos

Serverx86, ARM

AlgorithmusMapReduce, Tez, Slider,Spark, Flink

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

ApplikationDatameer, RapidMiner,Big Data Discovery, ...Beowulf, Aiyara

Meine Applikation

Spark ContextCluster ManagerWorker

SparkExecutorHDFSWorker

SparkExecutorWorker

SparkExecutor

3programmiertUnd wie010010010101001001101101101010101001111010111Man in Spark?

Untersttzte 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 result = sc.textFile(myfile.csv).map.(new Function () {String[] call(String s) { return s.split(;); }}).filter(new Function() {Boolean call(String[] s) { return s[1].contains(Spark); }})df = 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

OrderidNUMBERclientNUMBERitemNUMBERamountFLOATstatusVARCHARmodifiedDATE

ItemidNUMBERnameVARCHARpriceFLOATdensityFLOAT

ClientidNUMBERnameVARCHARaddressVARCHARcityVARCHARcountryVARCHARWie viel m werden heute in Richtung Sdkorea 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 = 'Sdkorea'AND o.modified >= '2015-11-17'

val itemPair = item map (i => i.id -> i)val targetClient = client filter (_.country == "Sdkorea") 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

OrderidNUMBERclientNUMBERitemNUMBERamountFLOATstatusVARCHARmodifiedDATE

ClientidNUMBERnameVARCHARaddressVARCHARcityVARCHARcountryVARCHAR

1;ArcelorMittal;Avenue de la Liberte 12;Luxemburg;Luxemburg2;Hebei Iron and Steel;Shijiazhuang;Hebei;China3;POSCO;Dongchon-dong 5;Pohang;Sdkorea4;Tata Steel;Bombay House 24;Mumbai;Indien5;Gerdau;Av. Farrapos 1811;Porto Alegre;Brasilien6;ThyssenKrupp;Mannesmannstrae 101;Duisburg;Deutschland7;Evraz;6 Saint Andrew Street;London;Vereinigtes Knigreich8;Severstal;ul. Stalevarov 45;Cherepovets;Russland1010;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 Datenstze hinzufgen

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

ClientidNUMBERnameVARCHARaddressVARCHARcityVARCHARcountryVARCHAR

ItemidNUMBERnameVARCHARpriceFLOATdensityFLOAT

PriceHistoryidNUMBERitemNUMBERpriceFLOATvalidDATE

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

Hadoop - Eine Erweiterung fr die Oracle DB? (Matthias Fuchs) 17.11.201516:00 UhrKiewUsing Analytical SQL to Intelligently Explore Big Data (Keith Laker) 18.11.201517:00 UhrOsloHow to choose between Hadoop, NoSQL or Oracle Database (Jean-Pierre Dijcks) 19.11.201512:00 UhrStockholmBig Data Processing mit Spark (Matthias Hreth)20.11.20159:00 UhrHelsinkiWeitere Vortrge zu diesem Thema auf der DOAG ...27

BI Community Event im Rahmen der DOAG K+ADi. 17.11.2015 ab 18:30 im Landbierparadies Nrnberg 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, KamehaBI Community - Veranstaltungen28

TO DO BIG DATAViel Spaauf derDOAGKonferenz

KontaktChristopher Thomsen, Senior Consultant

OPITZ CONSULTING GmbHchristopher.thomsen@opitz-consulting.comTelefon+49 40 741122 1350Mobil+49 173 7279604Marian Strby, Senior ConsultantOPITZ CONSULTING GmbHmarian.strueby@opitz-consulting.comTelefon+49 30 6298889 1625Mobil+49 173 7279144

youtube.com/opitzconsulting

@OC_WIRE

slideshare.net/opitzconsulting

xing.com/net/opitzconsulting

OPITZ CONSULTING GmbH 2015Seite Nr.Enterprise Big Data TestmanagementHilfslinien(lediglich als Konstruktionshilfe, ggf. im Master lschen)

OPITZ CONSULTING Vorlage Powerpoint 2011; Version 1.3; 10.05.2011; TGA, KSHKontakt 2fach:Diese Folie wird als vorletzte Folie genutzt, um den individuellen Bezug zu 2 Referenten herzustellen.Als Fotos mssen quadratische Fotos der Referenten in qualitativ hochwertiger Form vorliegen.Die Fotos geht ber 2 Rasterbreiten.Die Daten der Adresse sollten vollstndig eingegeben werden

30