Spark Jan Hučín 15. listopadu 2017

Podobné dokumenty
Spark Jan Hučín 5. dubna 2017

Spark SQL, Spark Streaming. Jan Hučín

Spark SQL, Spark Streaming. Jan Hučín

B0M33BDT Technologie pro velká data. Supercvičení SQL, Python, Linux

BigData. Marek Sušický

A4M33BDT Technologie pro velká data

B0M33BDT 7. přednáška Architektury a bezpečnost. Marek Sušický Milan Kratochvíl

Hadoop a HDFS. Bc. Milan Nikl

Hadoop, Hive a Spark: Využití pro data mining. Václav Zeman, KIZI VŠE

B0M33BDT Stream processing. Milan Kratochvíl

BIG DATA je oveľa viac ako Hadoop. Martin Pavlík

Programování: základní konstrukce, příklady, aplikace. IB111 Programování a algoritmizace

Da D to t v o é v ty t py IB111: Datové typy

Matematika v programovacích

B0M33BDT Technologie pro velká data. Storage

UAI/612 - Cloudová Řešení. Technologie

SPJA, cvičení 1. ipython, python, skripty. základy syntaxe: základní datové typy, řetězce. podmínky: if-elif-else, vyhodnocení logických výrazů

Paralelní architektury se sdílenou pamětí typu NUMA. NUMA architektury

Paralelní výpočty ve finančnictví

11. Přehled prog. jazyků

MetaCentrum. datové služby. Miroslav Ruda, Zdeněk Šustr

Bi-Direction Replication

OPS Paralelní systémy, seznam pojmů, klasifikace

Operátory ROLLUP a CUBE

Rekurzivní algoritmy

IUJCE 07/08 Přednáška č. 6

9 - Map/filter/reduce OMO. Ing. David Kadleček, PhD

Aktuální stav MetaCentra, novinky

Martin Lísal. Úvod do MPI

Algoritmus pro hledání nejkratší cesty orientovaným grafem

Přednášky o výpočetní technice. Hardware teoreticky. Adam Dominec 2010

Provoz Počet zaměstnanců Průměrná nemocnost hod/osoba/rok

Činnost počítače po zapnutí

Příprava dat v softwaru Statistica

Přednáška. Správa paměti II. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

NSS - Cache 5. LECTURE MARTIN TOMASEK

Operační systémy. Jednoduché stránkování. Virtuální paměť. Příklad: jednoduché stránkování. Virtuální paměť se stránkování. Memory Management Unit

Rozpoznávání písmen. Jiří Šejnoha Rudolf Kadlec (c) 2005

SUPERPOČÍTAČE DANIEL LANGR ČVUT FIT / VZLÚ

Programy a algoritmy pracující s čísly. IB111 Úvod do programování skrze Python

Zpracování obrazu v FPGA. Leoš Maršálek ATEsystem s.r.o.

Healtcheck. databáze ORCL běžící na serveru db.tomas-solar.com pro

Operační systémy. Přednáška 2: Procesy a vlákna

Přednáška 1. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

Konečný automat. Jan Kybic.

Programování v Pythonu

IW3 MS SQL SERVER 2014

Principy operačních systémů. Lekce 7: Souborový systém

Architektura rodiny operačních systémů Windows NT Mgr. Josef Horálek

Management procesu I Mgr. Josef Horálek

VISUAL BASIC. Práce se soubory

Programovací jazyky. imperativní (procedurální) neimperativní (neprocedurální) assembler (jazyk symbolických instrukcí)

SEARCH & BIG DATA [ & ANALYTICS] INFORUM 2015, Pavel Kocourek

Hlavní využití počítačů

Paralelní výpočty na clusteru KMD

Algoritmy a datové struktury

Souborové systémy a práce s daty David Antoš

Operační systémy. Přednáška 8: Správa paměti II

Disková pole (RAID) 1

Paralelní dotazy v PostgreSQL 9.6 (a 10.0)

PSK3-9. Základy skriptování. Hlavička

5. Vyhledávání a řazení 1

TSM for Virtual Environments Data Protection for VMware v6.3. Ondřej Bláha CEE+R Tivoli Storage Team Leader. TSM architektura IBM Corporation

Uklízení odpadků a analýza úniku

Bc. David Gešvindr MSP MCSA MCTS MCITP MCPD

Windows Server Novinky. Petr Špetlík Cloud & Server PTA

Praha, Martin Beran

Stručný návod k programu Octave

IB111 Úvod do programování skrze Python Přednáška 7

Operační systémy. Přednáška 7: Správa paměti I

Virtualizace. Lukáš Krahulec, KRA556

Úvod do Matlabu. Praha & EU: Investujeme do vaší budoucnosti. 1 / 24 Úvod do Matlabu

Struktura pamětí a procesů v DB Oracle. Radek Strnad

Přednáška 2. Systémy souborů OS UNIX. Nástroje pro práci se souborovým systémem. Úvod do Operačních Systémů Přednáška 2

Tvorba informačních systémů

Řídicí struktury. alg3 1

09. Memory management. ZOS 2006, L.Pešička

Přednáška. Vstup/Výstup. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

Programy a algoritmy pracující s čísly. IB111 Úvod do programování skrze Python

O Apache Derby detailněji. Hynek Mlnařík

On line analytical processing (OLAP) databáze v praxi

8. Rekurze. doc. Ing. Jiří Vokřínek, Ph.D. Katedra počítačů Fakulta elektrotechnická České vysoké učení technické v Praze

B3B33ALP - Algoritmy a programování - Zkouška z předmětu B3B33ALP. Marek Boháč bohacm11

Teradata Basic. RNDr. Ondřej Zýka

Přednáška. Systémy souborů. FAT, NTFS, UFS, ZFS. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

ČÁST 1. Základy 32bitového programování ve Windows

Windows 2008 R2 - úvod. Lumír Návrat

Operační systémy. Tomáš Hudec.

Přednáška. Správa paměti I. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

Algoritmus. Algoritmus je posloupnost kroků, které jsou potřeba k vyřešení problému.

Programy a algoritmy pracující s čísly. IB111 Úvod do programování

Zobrazování barev Josef Pelikán CGG MFF UK Praha.

Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague

Maturitní otázky z předmětu PROGRAMOVÁNÍ

B0M33BDT Technologie pro velká data. Storage

Úvod do Linuxu. SŠSI Tábor 1

Předmluva k aktuálnímu vydání Úvod k prvnímu vydání z roku Typografické a syntaktické konvence... 20

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

C2115 Praktický úvod do superpočítání

PŘIJÍMACÍ TEST z informatiky a matematiky pro navazující magisterské studium Fakulta informatiky a managementu Univerzity Hradec Králové

Transkript:

Spark Jan Hučín 15. listopadu 2017

Osnova 1. Co to je a k čemu slouží 2. Jak se to naučit 3. Jak se s tím pracuje 4. Jak to funguje Logický a technický pohled Transformace, akce, kešování Příklady Architektura a alokace zdrojů Příště: Spark SQL Spark streaming 2

Co je Spark

Co je to Spark a k čemu slouží framework pro distribuované výpočty vylepšení původního map-reduce, o 2 řády rychlejší zpracování v paměti méně I/O operací, vhodné pro iterativní algoritmy nebo analýzu dat optimalizace operací před zpracováním nyní i pseudo-sql příkazy API pro Scalu, Javu, Python a R s Hadoopem (využívá HDFS, YARN) i samostatně napsán ve Scale, běží na JVM nejaktivnější opensource Big Data projekt 4

Spark vs. map-reduce 5

Vhodné úlohy dostatečně velké, ale ne extrémně dobře paralelizovatelné iterační obtížné pro stávající technologie Např. 1. výpočty charakteristik klientů (riskové skóre, zůstatky) 2. ETL pro odlehčení DWH 3. noční výpočet celodenní využití 4. hledání vazeb v síti 5. text-mining 6

Nevhodné úlohy příliš malé s extrémními požadavky na paměť šité na míru jiné technologii (SQL, Java) špatně paralelizovatelné real-time Např. 1. modelování na malých datech 2. výpočet mediánu, náhodné přeskoky mezi řádky souboru 3. JOIN několika opravdu velkých tabulek 7

Jak se to naučit http://spark.apache.org aspoň základy Python Scala Java R vlastní praxe rady zkušených, StackOverflow apod. 8

Jak se s tím pracuje interaktivně z příkazové řádky (shell pro Python i Scalu) Zeppelin/Jupyter notebook dávka / aplikace zkompilovaný.jar soubor skript Pythonu 9

Jak funguje Spark

Pohled high level (logický) RDD výstup transformace akce série transformací zakončená akcí transformace se plánují a optimalizují, ale zatím neprovádějí lazy evaluation: až první akce spustí celý proces Co je to RDD? resilient distributed dataset kolekce prvků (např. řádky v textovém souboru, datová matice, posloupnost binárních dat) musí být dělitelné na části místo rozdělení (spolu)určí Spark! 11

Pohled mid level (technický) vytvoření JVM na nodech (exekutory) rozdělení úlohy na joby a jobů na tasky distribuce tasků a případně dat na nody řízení procesu více v architektuře Sparku 12

Spark RDD transformace RDD1 RDD2, po prvcích ( řádcích ) map (prvek transformační funkce nový prvek) flatmap (prvek transformační funkce 0 až N nových prvků) filter, distinct (pustí se jen řádky vyhovující podmínce / unikátní) join (připojí řádky jiného RDD podle hodnot klíče) union, intersection (sjednocení a průnik s jiným RDD) groupbykey, reducebykey (setřídí / agreguje prvky podle klíče)... a mnoho dalších Kde vzít klíč? výsledek transformace, např. slovo (slovo, 1) první prvek tuple se bere jako klíč "tuple" (má Scala i Python) 13

map a flatmap 14

Příklad 1 word count Úkol: spočítat četnosti slov v dokumentu Vstup: textový soubor rozdělený do řádků (RDD) Postup: transformace řádků: řádek rozdělení na slova prvky typu (slovo, 1) seskupení prvků se stejným klíčem a sečtení jedniček Výsledek transformace: RDD s prvky (slovo, četnost) 15

Vsuvka interaktivní shell pyspark (Python) spark-shell (Scala) spouští se z příkazové řádky funguje lokálně nebo v YARNu: pyspark --master local pyspark --master yarn vytvoří důležité objekty, např. sc (SparkContext), sqlcontext má další parametry o nich později ukončuje se exit() 16

Příklad 1 word count Úkol: spočítat četnosti slov v dokumentu Vstup: textový soubor rozdělený do řádků (RDD) lines = sc.textfile("/user/pascepet/bible.txt") Postup: transformace řádků: řádek jednotlivá slova (více prvků) words = lines.flatmap(lambda line: line.split(" ")) transformace řádků: řádek čili slovo struktura (slovo, 1) pairs = words.map(lambda word: (word, 1)) seskupení prvků se stejným klíčem a sečtení jedniček counts = pairs.reducebykey(lambda a, b: a + b) to be or not to be to be or not to be (to, 1) (be, 1) (or, 1) (not, 1) (to, 1) (be, 1) (to, 2) (be, 2) (or, 1) (not, 1) 17

Proč se nic nespočítalo? Protože jsme zatím neprovedli žádnou akci. 18

Spark RDD akce reduce (pomocí zadané funkce agreguje všechny prvky RDD) take (vypíše prvních n prvků RDD) count (počet prvků) collect (vypíše RDD jako pole prvků) saveastextfile (uloží jako textový soubor, resp. více txt souborů)... a další Akce spustí celý řetězec od začátku! Všechny mezivýsledky se zapomenou. Pokud to nechceme, musíme některé RDD uložit do keše. 19

Kešování Kešování: RDD se nezapomene, ale uchová v paměti / na disku. Metody pro kešování: cache (pokusí se uchovat v paměti) persist (obecnější, např. serializace, využití disku atd.) unpersist (uvolnění RDD z paměti) Typy kešování: MEMORY_ONLY MEMORY_AND_DISK MEMORY_ONLY_SER MEMORY_AND_DISK_SER SER = serializace úspora paměti, ale vyšší výpočetní náročnost Volby se SER pouze Java a Scala, v Pythonu serializace vždy Kešování není akce! 20

Spark program jako graf 21

Příklad 2 podobnost obrázků Úkol: spočítat podobnosti mezi dvojicemi obrázků Vstup: čb soubory BMP (4 4, 256 barev) prvky RDD Postup: parsing: binární BMP posloupnost 16 čísel 0/1 vytvoření dvojic obrázků výpočet podobnosti dvojic obrázků Výsledek transformace: RDD s prvky (soubor1, soubor2, podobnost) Akce na konci např. uložení do textového souboru 22

Příklad 2 podobnost obrázků Úkol: spočítat podobnosti mezi dvojicemi obrázků Vstup: čb soubory BMP (4 4, 256 barev) prvky RDD files = sc.binaryfiles("/user/pascepet/pismena/*.bmp") Postup: parsing: binární BMP posloupnost 16 čísel 0/1 filesparsed = files.map(parsebmp) vytvoření dvojic obrázků filespairs = filesparsed.cartesian(filesparsed) \.filter(lambda f: f[0][0]<f[1][0]) výpočet podobnosti dvojic obrázků simil = filespairs.map(similpair) (N, ) (J, ) (L, ) (N, 1001101111011001) (J, 0110100100010001) (L, 1111100010001000) (N, 1001...), (J, 0110...) (N, 1001...), (L, 1111...) (J, 0110...), (L, 1111...) (N, J, 0.5) (N, L, 0.6) (J, L, 0.3) 23

Příklad 2 parsing (N, ) (J, ) (L, ) (N, 1001101111011001) (J, 0110100100010001) (L, 1111100010001000) def parsebmp(file): name = file[0] bytes = file[1] byteslast = bytes[-16:] bits = [] for z in byteslast: if z=='\x00': bits.append(1) elif z=='\xff': bits.append(0) else: pass return (name, bits) 24

Příklad 2 podobnost ((N, 1001101111011001), (J, 0110100100010001)) def similpair(pair): file1 = pair[0] file2 = pair[1] return (file1[0],file2[0], similarity(file1[1],file2[1]) ) def similarity(bits, pattern=[0]*16): sum = 0 for i in range(0, len(bits)): sum += (bits[i]==pattern[i]) return sum*1.0/len(bits) (N, J, 0.5) 25

Další operace Spark RDD

https://training.databricks.com/visualapi.pdf 27

https://training.databricks.com/visualapi.pdf 28

Architektura Sparku

Důležité pojmy 1 Application master proces zodpovědný za vyjednání výpočetních zdrojů od res. manageru Driver hlavní proces plánuje workflow distribuuje práci do exekutorů Executor proces běžící na některém z nodů (ideálně na každém) provádí tasky (může i několik paralelně) 30

Důležité pojmy 2 Job akce volaná uvnitř programu driveru Stage sada transformací, které mohou být vykonány bez shuffle Task jednotka práce, kterou provádí exekutor na nějakém kousku dat 31

Plánování a optimalizace 32

Plánování a optimalizace přetypování posloupnost transformací (např. přehození FILTER a JOIN) volba typu JOINu, využití clusterování, partitions, skew apod. atd. 33

Plánování a optimalizace rozdělení a distribuce dat překlad transformací a akcí do příkazů pro JVM atd. 34

Ukázka DAG graf popisující průběh výpočtu určení závislostí (X musí být uděláno před Y) optimalizace v rámci dodržení závislostí 35

Rozdělení dat partitions partition část dat zpracovaná v jednom tasku defaultně 1 partition = 1 HDFS block = 1 task = 1 core partition se zpracuje na nodu, kde je uložená více partitions víc tasků vyšší paralelizace menší velikost jedné partition nižší efektivita vyšší overhead... a naopak Lze ovlivnit? A jak? při vstupu: např. sc.textfile(soubor, počet_part) za běhu: coalesce, repartition, partitionby shuffle! 36

Spuštění a konfigurace

Spuštění Sparku pyspark spark-shell spark-submit --param value Kde a jak poběží na clusteru plné využití paralelismu mod client mod cluster lokálně paralelní běh na více jádrech určeno parametry --master a --deploy-mode 38

Spark on YARN client mode 39

Spark on YARN cluster mode 40

Mod client versus mod cluster default je client mod client je vhodný pro interaktivní práci a debugging (výstup jde na lokální konzolu) mod cluster je vhodný pro produkční účely 41

Konfigurace běhu Sparku požadavky na zdroje --name jméno aplikace --driver-memory paměť pro driver --num-executors počet exekutorů --executor-cores počet jader pro exekutor --executor-memory paměť pro exekutor Příklad pyspark --master yarn --deploy-mode client --driver-memory 1G --num-executors 3 --executor-cores 2 --executor-memory 3G 42

Příklad plánu alokace zdrojů Obecná doporučení: --num-cores <= 5 --executor-memory <= 64 GB Cluster 6 nodů, každý 16 jader a 64 GB RAM Rezervovat 1 jádro a 1GB /node pro OS zbývá 6 *15 jader a 63 GB 1 jádro pro Spark Driver: 6 * 15 1 = 89 jader. 89 / 5 ~ 17 exekutorů. Každý node (kromě toho s driverem) bude mít 3 exekutory. 63 GB / 3 ~ 21 GB paměti na exekutor. Navíc se musí počítat s memory overhead -> nastavit 19 GB na exekutor 43

Díky za pozornost Profinit, s.r.o. Tychonova 2, 160 00 Praha 6 Telefon + 420 224 316 016 Web www.profinit.eu LinkedIn linkedin.com/company/profinit Twitter twitter.com/profinit_eu