KORSZERŰ BIG DATA FELDOLGOZÓ KERETRENDSZEREK. 2014.02.03. Hermann Gábor MTA-SZTAKI



Hasonló dokumentumok
GENERÁCIÓS ADATBÁZISOK A BIG DATA KÜLÖNBÖZŐ TERÜLETEIN

Muppet: Gyors adatok MapReduce stílusú feldolgozása. Muppet: MapReduce-Style Processing of Fast Data

Big Data, Distributed Storage & Computing. Gombos Gergő

MMK-Informatikai projekt ellenőr képzés 4

BIG DATA ÉS GÉPI TANULÁS KÖRNYEZET AZ MTA CLOUD-ON KACSUK PÉTER, NAGY ENIKŐ, PINTYE ISTVÁN, HAJNAL ÁKOS, LOVAS RÓBERT

Webes alkalmazások fejlesztése 11. előadás. Alkalmazások felhőben Giachetta Roberto

Hadoop és használata az LPDS cloud-on

RHadoop. Kocsis Imre Budapesti Műszaki és Gazdaságtudományi Egyetem Méréstechnika és Információs Rendszerek Tanszék

Webes alkalmazások fejlesztése 11. előadás. Alkalmazások felhőben. Alkalmazások felhőben Számítástechnikai felhő

Az MTA Cloud a tudományos alkalmazások támogatására. Kacsuk Péter MTA SZTAKI

Big Data tömeges adatelemzés gyorsan

Distributed Computing, Spark Streaming, GraphX, MLib. Gombos Gergő

Gelle Kitti Algoritmusok és adatszerkezetek gyakorlat - 07 Hasítótáblák

9. MPI

Big Data adattárházas szemmel. Arató Bence ügyvezető, BI Consulting

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Collections. Összetett adatstruktúrák

Component Soft és tovább

Kivételkezelés, naplózás. Exception handling, logging

Big Data: a több adatnál is több

Szerializáció. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Szerializáció / 22

Szoftvertechnológia alapjai Java előadások

Programozási nyelvek és módszerek Java Thread-ek

Weblog elemzés Hadoopon 1/39

Riak. Pronounced REE-ahk. Elosztott adattároló eszköz. Molnár Péter

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Big Data elemzési módszerek

Virtuális Obszervatórium. Gombos Gergő

OpenCL - The open standard for parallel programming of heterogeneous systems

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

Google App Engine az Oktatásban 1.0. ügyvezető MattaKis Consulting

Java és web programozás

XML adatkezelés I. Az SAX szabvány. Dr. Kovács László Miskolci Egyetem Általános Informatikai Tanszék. XML adatok kezelési lehetőségei

Számítógépek felépítése

Fejlett programozási nyelvek C++ Iterátorok

OpenCL alapú eszközök verifikációja és validációja a gyakorlatban

Komponens alapú szoftverfejlesztés 10. előadás. Elosztott alkalmazások architektúrái. Elosztott alkalmazások architektúrái

Alternatív adatbázisok Gráfadatbázisok

Kalapácsvetés 2016 szöveges

Adatbáziskezelő-szerver. Relációs adatbázis-kezelők SQL. Házi feladat. Relációs adatszerkezet

Elemi adatszerkezetek

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

A Facebook adattárháza. Trencséni Márton info99

Segédanyag: Java alkalmazások gyakorlat

III.6. MAP REDUCE ELVŰ ELOSZTOTT FELDOLGOZÁSI ALGORITMUSOK ÉS TESZTKÖRNYEZET KIDOLGOZÁSA ADATBÁNYÁSZATI FELADATOK VÉGREHAJTÁSÁHOZ

RDBMS fejlesztési irányok. Ferris Wheel (óriáskerék) Jim Gray törvényei. Elosztott adatbázisok problémái. Elosztott adatbázisok

ANDROID ALKALMAZÁSFEJLESZTÉS

Objektumorientált programozás C# nyelven

Rendszermodernizációs lehetőségek a HANA-val Poszeidon. Groma István PhD SDA DMS Zrt.

JAVA SE/ME tanfolyam tematika

Se S r e ial a iza z t a ion o n (in n Ja J v a a v ) a Szerializáció

TELJESÍTÉNYMÉRÉS FELHŐ ALAPÚ KÖRNYEZETBEN AZURE CLOUD ANALÍZIS

Készítette: Trosztel Mátyás Konzulens: Hajós Gergely

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

Takács Gábor mérnök informatikus, okl. mérnöktanár

Mobil Informatikai Rendszerek

Programozási nyelvek Java

OOP: Java 11.Gy: Enumok, beágyazott osztályok. 13/1 B ITv: MAN

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

Abstract osztályok és interface-ek. 7-dik gyakorlat

Java gyakorlat feladatai e s megolda sai ( )

Kivételek kezelése (exception handling) Hibakezelés old style. Kivételkezelés

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

Programozási nyelvek II. JAVA EA+GY 1. gyakolat

Programozási nyelvek Java

MapReduce paradigma a CAP-tétel kontextusában. Adatb haladóknak. Balassi Márton Adatbázisok haladóknak 2012.

Java és web programozás

Big data amikor a probléma az adat mérete maga

Vé V g é r g e r h e a h j a tá t s á i s s z s ál á ak a Runnable, Thread

Java-ról Kotlinra. Ekler Péter AutSoft BME AUT. AutSoft

Szoftvertechnológia alapjai Java előadások

Generikus Típusok, Kollekciók

Tengelyanyák Szorítóhüvelyek Biztosítólemezek Öntöttvas- és lemez Y csapágyházak Öntöttvas osztott, álló csapágyházak.

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Java programozási nyelv 4. rész Osztályok II.

webalkalmazások fejlesztése elosztott alapon

Reaktív programozás szerver oldalon

Segédanyag: Java alkalmazások gyakorlat

Java és web programozás

Programozási technológia

Hello World Servlet. Készítsünk egy szervletet, amellyel összeadhatunk két számot, és meghívásakor üdvözlőszöveget ír a konzolra.

egy szisztolikus példa

MTA Cloud a tudományos alkalmazások támogatására. Kacsuk Péter MTA SZTAKI

Stream Processing. Big Data elemzési módszerek. Kocsis Imre

JAVA PROGRAMOZÁS 3.ELŐADÁS

Bánsághi Anna

Osztályszintű elérés, kivételkezelés, fájlkezelés

NIIF Központi Elosztott Szolgáltatói Platform

Számítógép-rendszerek fontos jellemzői (Hardver és Szoftver):

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

III. "JÖVŐ INTERNET" TECHNOLÓGIÁK: ELOSZTOTT ÉS FELHŐ SZOLGÁLTATÁSOK, TÁRGYAK INTERNETE DR. SIMON GYULA

JAVA webes alkalmazások

Java programozási nyelv 6. rész Java a gyakorlatban

Stream processing ősz, 10. alkalom Kocsis Imre,

Objektumorientált programozás C# nyelven III.

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

hiányzott szeptemberben vagy A tanuló nem hiányzott szeptemberben szöveget

Magic xpi 4.0 vadonatúj Architektúrája Gigaspaces alapokon

Java és web programozás

Java és web programozás

Átírás:

KORSZERŰ BIG DATA FELDOLGOZÓ KERETRENDSZEREK 2014.02.03. Hermann Gábor MTA-SZTAKI

MI AZ A BIG DATA?

MI AZ A BIG DATA? Sok adat!

ENNYI?

BIG DATA 4V Volume Velocity Variety Veracity +3V (7V) Variability Visualisation Value

BIG DATA? Google keresője által számon tartott oldalak ~4.5 milliárd Facebook gráf ~890 millió naponta aktív felhasználnó YouTube-ra feltöltött videó Percenként 20 órányi Twitter Napi 50 millió tweet

BIG DATA? Honnan jön? Alkalmazottak szedték össze Emberek generálnak Gépek generálnak Kihívás: feldolgozni Régebben Külön helyen tárolás és feldolgozás Most Vigyük a processzort az adathoz!

PROBLÉMA: WORDCOUNT Mekkora a szavak előfordulása egy szövegben? Motiváció: keresőmotor Például: This is John. John likes watching TV. John is always happy. This is what he does. (This, 1) (is, 3) (John, 3) (likes, 1) (watching, 1) (TV, 1) (what, 1) (he, 1) (does, 1)

TWEETEK Szeretnénk megtudni, hogy mik a népszerű szavak! Napi ~50 millió tweet Egy tweet 140 karakter = 140 x 4 byte = 560 byte Napi 50 x 560 MB = 28 GB Kb. 34% angol Az is 9 GB naponta!

MEGOLDÁSOK Egy gép Klasszikus programozás ~4 GB memória Nem fér el memóriában, kisebb adatra jó Pl. spanyol tweetek napi elemzése: ~3,3 GB

MEGOLDÁSOK Egy gép Klasszikus programozás ~4 GB memória Nem fér el memóriában, kisebb adatra jó Pl. spanyol tweetek napi elemzése: ~3,3 GB Nagyobb gép/szuperszámítógép Elfér a memóriában Probléma: párhuzamos algoritmus kell Több kisebb gép Elfér a memóriában, de szét kell osztani Probléma: nem csak párhuzamos, de osztott algoritmus kell

MEGÉRI? 64 GB memória 32 mag 4 GB memória 2 mag 250$ 16 db

MEGÉRI? 64 GB memória 32 mag 7000$ 4 GB memória 2 mag 250$ 16 db 4000$

MEGÉRI!

DE... Adatot darabolni kell Hálózaton kell küldözgetni Az egészet számon kell tartani! Sok hibalehetőség Hardveres meghibásodás?

SEGÍTSÉG: OSZTOTT KERETRENDSZER Adatot darabolni kell megoldja Hálózaton kell küldözgetni megoldja Az egészet számon kell tartani! megoldja Sok hibalehetőség kevesebb! Harveres meghibásodás hibatűrés Csak az osztott algoritmus megalkotásával kell foglalkozni

FEJLŐDÉS 1. Egyszerű szekvenciális algoritmus 2. Párhuzamosítás 3. Elosztás kézzel 4. Apache Hadoop keretrendszer Robosztus, régi 5. Apache Spark, Apache Flink keretrendszerek Viszonylag újak, gyorsabbak

EGY GÉP SZEKVENCIÁLISAN Klasszikus programozás Hogyan számoljunk szavakat?

PROBLÉMA: WORDCOUNT Mekkora a szavak előfordulása egy szövegben? Motiváció: keresőmotor Például: This is John. John likes watching TV. John is always happy. This is what he does. (This, 1) (is, 3) (John, 3) (likes, 1) (watching, 1) (TV, 1) (what, 1) (he, 1) (does, 1)

EGY GÉP SZEKVENCIÁLISAN Klasszikus programozás Hogyan számoljunk szavakat? 1. Szedjük szét szavakra! 2. Tároljunk kulcs-érték párokban (szó, előfordulás száma)! 3. Végeredményt irassuk ki!

EGY GÉP SZEKVENCIÁLISAN Klasszikus programozás Hogyan számoljunk szavakat? 1. Szedjük szét szavakra! 2. Tároljunk kulcs-érték párokban (szó, előfordulás száma)! 3. Végeredményt irassuk ki!

EGY GÉP SZEKVENCIÁLISAN 1. This is a text. A text for you 2. this, is, a, text, a, text, for, you 3. (this, 1), (is, 1), (a, 1), (text, 1), (a, 1), (text, 1), (for, 1), (you, 1) 4. (this, 1) (is, 1) (a, 2) (text, 2) (for, 1) (you, 1)

WORDCOUNT: JAVA KÓD Map<String, Integer> map = new HashMap<String, Integer>(); for (String line : lines) { String[] words = line.split(" "); for (String word : words) { int count = 1; if (map.containskey(word)) { count += map.get(word); } } } map.put(word, count);

VAN ÉRTELME? Ha kisebb adat, ez a legjobb Fölösleges bonyolítani Ha nagyobb vagy lassú...?

PÁRHUZAMOSÍTSUNK GPU programozás (OpenCL) Mi van, ha több adatom lesz? (Több felhasználó?) Mi van, ha nem fér el?

PÁRHUZAMOSÍTSUNK GPU programozás (OpenCL) Mi van, ha több adatom lesz? (Több felhasználó?) Mi van, ha nem fér el? Veszek nagyobb gépet!

PÁRHUZAMOSÍTSUNK GPU programozás (OpenCL) Mi van, ha több adatom lesz? (Több felhasználó?) Mi van, ha nem fér el? Veszek nagyobb gépet! Drága

OSSZUK MEG! Adatot darabolni kell Hálózaton kell küldözgetni Az egészet számon kell tartani! Van, hogy megéri (triviálisan elosztható feladat) De általában fölösleges minddel foglalkozni Mit csinál egy osztott keretrendszer?

APACHE HADOOP Osztott keretrendszer Google MapReduce cikk (2004) Nyílt forráskódú Tíz éves projekt

HADOOP ARCHITEKTÚRA

MAPREDUCE MODELL Map fázis Minden worker kap egy adathalmazt és átalakítja egy másik adathalmazzá Kulcs-érték párok Shuffle fázis Varázslat! Az azonos kulcsúak egy helyre kerülnek Reduce fázis Az azonos kulcsúakat egyesíti

EMLÉKEZTETŐ: WORDCOUNT Mekkora a szavak előfordulása egy szövegben? Motiváció: keresőmotor Például: This is John. John likes watching TV. John is always happy. This is what he does. (This, 1) (is, 3) (John, 3) (likes, 1) (watching, 1) (TV, 1) (what, 1) (he, 1) (does, 1)

EMLÉKEZTETŐ: WORDCOUNT 1. This is a text. A text for you 2. this, is, a, text, a, text, for, you 3. (this, 1), (is, 1), (a, 1), (text, 1), (a, 1), (text, 1), (for, 1), (you, 1) 4. (this, 1) (is, 1) (a, 2) (text, 2) (for, 1) (you, 1)

MAPREDUCE

HOGYAN ÍRJUNK HADOOP JOBOT? 1. Írjuk meg a MapReduce programot 2. Fordítsuk le 3. Teszteljük lokális környezetben 4. Deploy-oljuk clusterre 5. Futtassuk klaszteren

MIT NYERTÜNK? Megbízhatóság szoftversen Szoftveres redundancia Olcsóbb Lehet használni régi hardvert is!

MIT NYERTÜNK? Megbízhatóság szoftversen Szoftveres redundancia Olcsóbb Lehet használni régi hardvert is! Elosztott Párhuzamos, így gyorsabb Skálázható, szinte lineárisan

MIT NYERTÜNK? Megbízhatóság szoftversen Szoftveres redundancia Olcsóbb Lehet használni régi hardvert is! Elosztott Párhuzamos, így gyorsabb Skálázható, szinte lineárisan Erőteljes Sok adatot, gyorsan (párhuzamosan) Könnyebben programozható

DE... Map-fázis, Reduce-fázis egymás után jöhet csak MapReduce fázisok között lemezre írás/olvasás Pl. gráf-algoritmus esetén a gráf szerkezetét is, ami nem változik! Iteráció lassú! Konfiguráció? Könnyen programozható?

KÖNNYEN PROGRAMOZHATÓ? (WORDCOUNT) public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable>{ private final static IntWritable one = new IntWritable(1); private Text word = new Text(); } public void map(object key, Text value, Context context ) throws IOException, InterruptedException { StringTokenizer itr = new StringTokenizer(value.toString()); while (itr.hasmoretokens()) { word.set(itr.nexttoken()); context.write(word, one); } }

KÖNNYEN PROGRAMOZHATÓ? (WORDCOUNT) public static class IntSumReducer extends Reducer<Text,IntWritable,Text,IntWritable> { private IntWritable result = new IntWritable(); } public void reduce(text key, Iterable<IntWritable> values, Context context ) throws IOException, InterruptedException { int sum = 0; for (IntWritable val : values) { sum += val.get(); } result.set(sum); context.write(key, result); }

KÖNNYEN PROGRAMOZHATÓ? (WORDCOUNT) public static void main(string[] args) throws Exception { Configuration conf = new Configuration(); Job job = Job.getInstance(conf, "word count"); job.setjarbyclass(wordcount.class); job.setmapperclass(tokenizermapper.class); job.setcombinerclass(intsumreducer.class); job.setreducerclass(intsumreducer.class); job.setoutputkeyclass(text.class); job.setoutputvalueclass(intwritable.class); FileInputFormat.addInputPath(job, new Path(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); System.exit(job.waitForCompletion(true)? 0 : 1); } }

SZEBBEN NÉZNE KI... val env = ExecutionEnvironment.getExecutionEnvironment val text = env.readtextfile(filepath) val counts = text.flatmap { _.tolowercase.split("\\w+") }.map { (_, 1) }.groupby(0).sum(1) counts.print() env.execute("wordcount Example")

ÚJABB RENDSZEREK?

ÚJABB RENDSZEREK Apache Flink

APACHE SPARK VS. APACHE FLINK Flink Kutatósabb (kutatási projektnek indult, TU Berlin) Európai Spark Amerikai (UC Berkley) Mindkettő Nyílt forráskódú (Apache projekt) Hasonló programozási absztrakció Jelenleg mindkettő nagy ipari támogatásra hajt 5 év múlva nem lesz különbség (vagy kihal az egyik)

APACHE FLINK HASZNÁLATA

DATASET ABSZTRAKCIÓ

OPERÁTOROK Map, FlatMap, MapPartition, Filter, Project, Reduce, ReduceGroup, Aggregate, Distinct, Join, CoGroup, Cross, Iterate, Iterate Delta, Iterate-Vertex-Centric, Windowing

WORDCOUNT ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment(); DataSet<String> text = env.readtextfile(input); DataSet<Tuple2<String, Integer>> result = text.flatmap((str, out) -> { for (String token : value.split("\\w")) { out.collect(new Tuple2<>(token, 1)); }).groupby(0).sum(1); counts.print(); env.execute("wordcount Example");

WORDCOUNT ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment(); DataSet<String> text = env.readtextfile(input); DataSet<Tuple2<String, Integer>> result = text.flatmap((str, out) -> { for (String token : value.split("\\w")) { out.collect(new Tuple2<>(token, 1)); }).groupby(0).sum(1); counts.print(); env.execute("wordcount Example");

RUN EVERYWHERE!

ADATOK SZERIALIZÁLÁSA Apache Hadoop Mindig szerializál Robosztus, nem hagy cserben Lassú Apache Spark Objektumokon dolgozik Szerializáció van, de lassúnak tartott, ezért csak akkor ha szükséges Apache Flink Olcsóvá teszi a szerializációt Részben szerializált adattal dolgozik Hatékony és robosztus!

ITERÁCIÓK

APACHE FLINK ITERÁCIÓ

HADOOP KÓD ÁTÜLTETÉSE?

OPERÁTOROK (EMLÉKEZTETŐ) Map, FlatMap, MapPartition, Filter, Project, Reduce, ReduceGroup, Aggregate, Distinct, Join, CoGroup, Cross, Iterate, Iterate Delta, Iterate-Vertex-Centric, Windowing

HADOOP KÓD ÁTÜLTETÉSE

OPTIMIZER Varázslat! De nem kell félni Adatbázislekérdezések optimalizálva API programok hasonlóan

PLAN VISUALIZER

STREAM-FELDOLGOZÁS Adatfolyam Valós idejű Latency kritikus feladatok Sok adat Magas throughput Latency throughput trade-off

PÉLDA: AJÁNLÓRENDSZER

AJÁNLÓRENDSZER

AJÁNLÓRENDSZER Nem fognak várni perceket Alacsony latency Sok felhasználót kell egyszerre kiszolgálni Magas throughput Sok adatot kell kombinálni az eredményhez Magas throughput

STREAMING ELVÁRÁSOK Tipikusan végtelen ideig fusson Hibatűrés (fault tolerance) Batch feladat logikájának átültetése Natív ablakozás Könnyű csatlakozás

RENDSZEREK

APACHE STORM Recordonkénti feldolgozás Alacsony latency Hibatűrés Replikáció a forrásban Probabilisztikus ellenőrzés At least once hibatűrés Lassabb visszajátszás Állapot replikáció nincs Alacsonyabb szintű API Trident Storm fölötti absztrakció

APACHE SAMZA LinkedIn-ben projekt Kafka (message queue) fölé épül Hibatűrés könnyűvé téve Sorrendiség Visszajátszhatóság

APACHE SPARK STREAMING Mini-batch Magas throughput, viszonylag alacsony latency (Csalás! :) Nem módosítható állapot Immutable state Biztonságosabb Exactly-once hibatűrés

APACHE FLINK STREAMING Állítható pufferméret Trade-off szabályozása Flexibilis ablakozás Könnyű kódátültetés Könnyű összeköttetés Tetszőleges input/output Előre megírt: objektumlista, fájl, HDFS, Kafka, RabbitMQ

FLINK WORDCOUNT ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment(); DataSet<String> text = env.readtextfile(input); DataSet<Tuple2<String, Integer>> result = text.flatmap((str, out) -> { for (String token : value.split("\\w")) { out.collect(new Tuple2<>(token, 1)); }).groupby(0).sum(1); counts.print(); env.execute("wordcount Example");

FLINK STREAMING WORDCOUNT StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); DataStream<String> text = env.readtextfile(input); DataStream<Tuple2<String, Integer>> result = text.flatmap((str, out) -> { for (String token : value.split("\\w")) { out.collect(new Tuple2<>(token, 1)); }).groupby(0).sum(1); counts.print(); env.execute("wordcount Example");

APACHE FLINK STREAMING Állítható pufferméret Trade-off szabályozása Flexibilis ablakozás Könnyű kódátültetés Könnyű összeköttetés Tetszőleges input/output Előre megírt: objektumlista, fájl, HDFS, Kafka, RabbitMQ

FLINK STREAMING WORDCOUNT WINDOW StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); DataStream<String> text = env.readtextfile(input); DataStream<Tuple2<String, Integer>> result = text.flatmap((str, out) -> { for (String token : value.split("\\w")) { out.collect(new Tuple2<>(token, 1)); }).window(time.of(60, TimeUnit.SECONDS)).every(Time.of(5, TimeUnit.SECONDS)).groupBy(0).sum(1); counts.print(); env.execute("wordcount Example");

APACHE FLINK STREAMING Állítható pufferméret Trade-off szabályozása Flexibilis ablakozás Könnyű kódátültetés Könnyű összeköttetés Tetszőleges input/output Előre megírt: objektumlista, fájl, HDFS, Kafka, RabbitMQ

FLINK STREAMING WORDCOUNT StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); DataStream<String> text = env.readtextfile(input); DataStream<Tuple2<String, Integer>> result = text.flatmap((str, out) -> { for (String token : value.split("\\w")) { out.collect(new Tuple2<>(token, 1)); }).setbuffertimeout(100).groupby(0).sum(1); counts.print(); env.execute("wordcount Example");

APACHE FLINK STREAMING Állítható pufferméret Trade-off szabályozása Flexibilis ablakozás Könnyű kódátültetés Könnyű összeköttetés Tetszőleges input/output Előre megírt: objektumlista, fájl, HDFS, Kafka, RabbitMQ

FLINK STREAMING WORDCOUNT StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); DataStream<String> text = env.fromelements("this is a line.", "This is another row."); DataStream<Tuple2<String, Integer>> result = text.flatmap((str, out) -> { for (String token : value.split("\\w")) { out.collect(new Tuple2<>(token, 1)); }).groupby(0).sum(1); counts.print(); env.execute("wordcount Example");

FLINK STREAMING WORDCOUNT StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); DataStream<String> text = env.sockettextstream("ilab.sztaki.hu", 1294); DataStream<Tuple2<String, Integer>> result = text.flatmap((str, out) -> { for (String token : value.split("\\w")) { out.collect(new Tuple2<>(token, 1)); }).groupby(0).sum(1); counts.print(); env.execute("wordcount Example");

APACHE FLINK STREAMING Állítható pufferméret Trade-off szabályozása Flexibilis ablakozás Könnyű kódátültetés Könnyű összeköttetés Tetszőleges input/output Előre megírt: objektumlista, fájl, HDFS, Kafka, RabbitMQ

FLINK STREAMING HIBATŰRÉS Megvalósítás alatt Replikálás Osztottan memóriában Perzisztens tárolón (lemez) Forrásból újraküldés At least once, de Bloom-filter: látottak szűrése (Google MillWheel) Állapot (state) rögzítés

HOVA TART A FLINK? Hibatűrés Python API SQL-szerű nyelv Gépi tanulás Flink fölé (pl. Mahout DSL) Gráf DSL On-the-fly skálázás... és még sok más

MIT HOZHAT A JÖVŐ ÁLTALÁBAN? Elterjednek a korszerűbb rendszerek Új alkalmazások jönnek (gépi tanulás) Kompatibilisebb rendszerek (minden fusson mindenen!) Javuló performancia (optimalizáció) Biztonság!... és

GAME ON!

HOL ÉRTEK UTOL? http://flink.apache.org/ http://hadoop.apache.org/ https://spark.apache.org/ Hermann Gábor MTA-SZTAKI ghermann@ilab.sztaki.hu