Programovanie

Čo je Apache Spark? Platforma veľkých dát, ktorá rozdrvila Hadoop

Definovaný Apache Spark

Apache Spark je rámec na spracovanie údajov, ktorý umožňuje rýchle vykonávanie úloh spracovania na veľmi veľkých súboroch údajov a tiež dokáže distribuovať úlohy spracovania údajov na viac počítačov, a to buď samostatne, alebo v tandeme s inými distribuovanými výpočtovými nástrojmi. Tieto dve kvality sú kľúčové pre svet veľkých dát a strojového učenia, ktoré si vyžadujú zhromaždenie obrovského výpočtového výkonu, aby sa dostali do veľkých dátových skladov. Spoločnosť Spark tiež odoberá časť programového bremena týchto úloh z plecia vývojárov pomocou ľahko použiteľného rozhrania API, ktoré odvádza veľkú časť práce s distribuovaným výpočtom a spracovaním veľkých údajov.

Od jeho skromných začiatkov v AMPLab v U.C. V roku 2009, kedy sa spoločnosť Beracheley, spoločnosť Apache Spark, stala jedným z kľúčových rámcov spracovania veľkých dátových distribuovaných údajov na svete. Spark je možné nasadiť rôznymi spôsobmi, poskytuje natívne väzby pre programovacie jazyky Java, Scala, Python a R a podporuje SQL, streamovanie údajov, strojové učenie a spracovanie grafov. Nájdete ho používaný bankami, telekomunikačnými spoločnosťami, hernými spoločnosťami, vládami a všetkými významnými technologickými gigantmi, ako sú Apple, Facebook, IBM a Microsoft.

Architektúra Apache Spark

Aplikácia Apache Spark sa na základnej úrovni skladá z dvoch hlavných komponentov: a vodič, ktorá prevádza kód používateľa na viac úloh, ktoré je možné distribuovať medzi pracovné uzly, a exekútori, ktoré bežia na týchto uzloch a vykonávajú úlohy, ktoré sú im pridelené. Na sprostredkovanie medzi nimi je nevyhnutná určitá forma správcu klastrov.

Po vybalení z balíka môže Spark bežať v samostatnom režime klastra, ktorý jednoducho vyžaduje rámec Apache Spark a JVM na každom stroji vo vašom klastri. Je však pravdepodobnejšie, že budete chcieť využiť robustnejší systém riadenia zdrojov alebo klastrov, ktorý sa postará o pridelenie pracovníkov na požiadanie. V podniku to bude normálne znamenať spustenie na Hadoop YARN (takto spúšťajú úlohy Spark úlohy distribúcie Cloudera a Hortonworks), ale Apache Spark môže bežať aj na Apache Mesos, Kubernetes a Docker Swarm.

Ak hľadáte spravované riešenie, potom Apache Spark nájdete ako súčasť služieb Amazon EMR, Google Cloud Dataproc a Microsoft Azure HDInsight. Spoločnosť Databricks, ktorá zamestnáva zakladateľov spoločnosti Apache Spark, ponúka tiež platformu Databricks Unified Analytics Platform, čo je komplexná spravovaná služba, ktorá ponúka klastre Apache Spark, podporu streamovania, integrovaný vývoj notebooku na webe a optimalizovaný výkon I / O v cloudu. štandardná distribúcia Apache Spark.

Apache Spark zostavuje príkazy používateľa na spracovanie údajov do a Usmernený acyklický grafalebo DAG. DAG je plánovacia vrstva Apache Spark; určuje, aké úlohy sa na ktorých uzloch vykonávajú a v akom poradí.

Spark vs. Hadoop: Prečo používať Apache Spark?

Za zmienku stojí, že Apache Spark vs. Apache Hadoop je trochu nesprávny názov. Spark nájdete vo väčšine dnešných distribúcií Hadoop. Ale kvôli dvom veľkým výhodám sa Spark stal rámcom voľby pri spracovaní veľkých dát, čím predbehol starú paradigmu MapReduce, ktorá Hadoop dostala do popredia.

Prvou výhodou je rýchlosť. Dátový modul v pamäti spoločnosti Spark znamená, že v určitých situáciách môže vykonávať úlohy až stokrát rýchlejšie ako MapReduce, najmä v porovnaní s viacstupňovými úlohami, ktoré si vyžadujú medzi jednotlivými fázami zápis stavu späť na disk. MapReduce v podstate vytvára dvojstupňový graf spustenia pozostávajúci z mapovania a znižovania údajov, zatiaľ čo DAG spoločnosti Apache Spark má niekoľko fáz, ktoré je možné distribuovať efektívnejšie. Dokonca aj úlohy Apache Spark, kde dáta nemôžu byť úplne obsiahnuté v pamäti, majú tendenciu byť asi 10-krát rýchlejšie ako ich náprotivok MapReduce.

Druhou výhodou je vývojárske rozhranie Spark API. Rovnako dôležité ako zrýchlenie spoločnosti Spark, dalo by sa namietať, že prívetivosť rozhrania Spark API je ešte dôležitejšia.

Spark Core

V porovnaní s MapReduce a inými komponentmi Apache Hadoop je rozhranie Apache Spark API veľmi priateľské k vývojárom, pričom za jednoduchými volaniami metód skrýva veľkú časť zložitosti distribuovaného procesora. Kanonickým príkladom toho je, ako možno takmer 50 riadkov kódu MapReduce na počítanie slov v dokumente zredukovať na iba niekoľko riadkov Apache Spark (tu sa zobrazuje v Scale):

val textFile = sparkSession.sparkContext.textFile („hdfs: /// tmp / words“)

val count = textFile.flatMap (line => line.split (““))

.map (slovo => (slovo, 1))

.reduceByKey (_ + _)

countts.saveAsTextFile (“hdfs: /// tmp / words_agg”)

Poskytnutím väzieb na populárne jazyky pre analýzu údajov, ako sú Python a R, ako aj podnikovejšími jazykmi Java a Scala, umožňuje Apache Spark všetkým od vývojárov aplikácií až po dátových vedcov, aby prístupným spôsobom využili svoju škálovateľnosť a rýchlosť.

Spark RDD

Srdcom Apache Spark je koncept Resilient Distributed Dataset (RDD), programátorskej abstrakcie, ktorá predstavuje nemennú zbierku objektov, ktoré možno rozdeliť medzi výpočtový klaster. Operácie s RDD možno tiež rozdeliť naprieč klastrom a vykonať v paralelnom dávkovom procese, čo vedie k rýchlemu a škálovateľnému paralelnému spracovaniu.

RDD možno vytvoriť z jednoduchých textových súborov, databáz SQL, obchodov NoSQL (napríklad Cassandra a MongoDB), segmentov Amazon S3 a oveľa viac. Veľká časť rozhrania Spark Core API je postavená na tomto koncepte RDD, čo umožňuje tradičné mapovanie a znižovanie funkčnosti, ale tiež poskytuje zabudovanú podporu pre spájanie množín údajov, filtrovanie, vzorkovanie a agregáciu.

Spark beží distribuovaným spôsobom kombináciou a vodič jadrový proces, ktorý rozdeľuje aplikáciu Spark na úlohy a distribuuje ich medzi mnoho ďalších exekútor procesy, ktoré robia prácu. Týchto exekútorov je možné zväčšiť a zmenšiť podľa potreby aplikácie.

Spark SQL

Spark SQL, pôvodne známy ako Shark, sa pre projekt Apache Spark stáva čoraz dôležitejším. Je to pravdepodobne rozhranie, ktoré dnešní vývojári najčastejšie používajú pri vytváraní aplikácií. Spark SQL je zameraný na spracovanie štruktúrovaných údajov pomocou prístupu založeného na údajovom rámci požičanom od R a Pythona (v Pandas). Ale ako už názov napovedá, Spark SQL tiež poskytuje rozhranie vyhovujúce SQL2003 na dopytovanie údajov, čím prináša silu Apache Spark analytikom aj vývojárom.

Popri štandardnej podpore SQL poskytuje Spark SQL štandardné rozhranie na čítanie a zápis do iných dátových skladov vrátane JSON, HDFS, Apache Hive, JDBC, Apache ORC a Apache Parquet, ktoré sú podporované už po vybalení z krabice. Ďalšie populárne obchody - Apache Cassandra, MongoDB, Apache HBase a mnoho ďalších - je možné použiť vytiahnutím samostatných konektorov z ekosystému Spark Packages.

Výber niektorých stĺpcov z údajového rámca je rovnako jednoduchý ako tento riadok:

citiesDF.select („meno“, „pop“)

Pomocou rozhrania SQL zaregistrujeme dátový rámec ako dočasnú tabuľku, po ktorej proti nej môžeme zadávať dotazy SQL:

citiesDF.createOrReplaceTempView („mestá“)

spark.sql („VYBRAŤ meno, zobraziť Z miest“)

V zákulisí používa Apache Spark optimalizátor dotazov s názvom Catalyst, ktorý skúma údaje a dotazy s cieľom vytvoriť efektívny plán dotazov na lokalitu údajov a výpočet, ktorý vykoná požadované výpočty v rámci klastra. V ére Apache Spark 2.x je odporúčaným prístupom pre vývoj rozhranie Spark SQL pre dátové rámce a datové sady (v podstate typový dátový rámec, ktorý je možné skontrolovať v čase kompilácie a využiť ďalšie optimalizácie pamäte a výpočtov za behu). . Rozhranie RDD je stále k dispozícii, ale odporúča sa, iba ak vaše potreby nie je možné vyriešiť v rámci paradigmy Spark SQL.

Spark 2.4 predstavil sadu vstavaných funkcií vyššieho rádu na priamu manipuláciu s poľami a inými dátovými typmi vyššieho rádu.

Spark MLlib

Apache Spark tiež združuje knižnice na aplikáciu techník strojového učenia a analýzy grafov na dáta v mierke. Spark MLlib obsahuje rámec pre vytváranie potrubí strojového učenia, ktorý umožňuje ľahkú implementáciu extrakcie funkcií, výberov a transformácií na ľubovoľnom štruktúrovanom súbore údajov. MLlib je dodávaný s distribuovanými implementáciami klastrovania a klasifikačných algoritmov, ako je k-means klastrovanie a náhodné lesy, ktoré je možné ľahko vymeniť do a z vlastných potrubí. Modely môžu byť trénované dátovými vedcami v Apache Spark pomocou R alebo Pythonu, uložené pomocou MLlib a potom importované do potrubia založeného na Jave alebo Scale na produkčné použitie.

Upozorňujeme, že zatiaľ čo program Spark MLlib pokrýva základné strojové učenie vrátane klasifikácie, regresie, klastrovania a filtrovania, nezahŕňa zariadenia na modelovanie a výcvik hlbokých neurónových sietí (podrobnosti pozri v recenzii programu Spark MLlib). Deep Learning Pipelines sú však v príprave.

Spark GraphX

Spark GraphX ​​prichádza s výberom distribuovaných algoritmov na spracovanie štruktúr grafov vrátane implementácie PageRank spoločnosti Google. Tieto algoritmy využívajú na modelovanie údajov prístup RDK Spark Core; balík GraphFrames umožňuje vykonávať operácie s grafmi na údajových rámcoch, vrátane využívania výhod optimalizátora Catalyst pre dotazy na grafy.

Streamovanie iskier

Spark Streaming bol skorým prírastkom k Apache Spark, ktorý mu pomohol získať trakciu v prostrediach, ktoré vyžadovali spracovanie v reálnom čase alebo takmer v reálnom čase. Predtým bolo dávkové a streamové spracovanie vo svete Apache Hadoop samostatnou vecou. Napíšete kód MapReduce pre svoje potreby dávkového spracovania a pre svoje požiadavky na streamovanie v reálnom čase použijete niečo ako Apache Storm. To zjavne vedie k rôznorodým kódovým základom, ktoré je potrebné udržiavať synchronizované pre aplikačnú doménu napriek tomu, že sú založené na úplne odlišných rámcoch, vyžadujúcich rôzne zdroje a pri ich prevádzkovaní zahŕňajú rôzne prevádzkové problémy.

Spark Streaming rozšíril koncept dávkového spracovania Apache Spark na streamovanie tým, že rozložil stream na nepretržitú sériu mikrobatchov, s ktorými sa potom dalo manipulovať pomocou API Apache Spark. Týmto spôsobom môže kód v dávkových a streamovacích operáciách zdieľať (väčšinou) rovnaký kód bežiaci na rovnakom rámci, čím sa znižuje réžia vývojára aj operátora. Všetci vyhrávajú.

Kritika prístupu Spark Streaming spočíva v tom, že microbatching v scenároch, kde sa vyžaduje odozva s nízkou latenciou na prichádzajúce dáta, nemusí byť schopný zodpovedať výkonu iných rámcov schopných streamovať, ako sú Apache Storm, Apache Flink a Apache Apex, všetky používajú skôr čistú metódu streamovania než mikrodávky.

Štruktúrované streamovanie

Štruktúrované streamovanie (pridané v Spark 2.x) je pre Spark Streaming to, čím bol Spark SQL pre Spark Core API: API vyššej úrovne a ľahšia abstrakcia pre písanie aplikácií. V prípade Structure Streaming umožňuje API vyššej úrovne vývojárom v podstate vytvárať nekonečné streamované dátové rámce a súbory údajov. Rieši tiež niektoré veľmi skutočné bolestivé body, s ktorými sa používatelia v predchádzajúcom rámci potýkali, najmä pokiaľ ide o riešenie agregácií udalostí a času a neskoré doručenie správ. Všetky dotazy na štruktúrované streamy prechádzajú cez optimalizátor dotazov Catalyst a môžu byť dokonca spustené interaktívnym spôsobom, čo umožňuje používateľom vykonávať dotazy SQL proti dátam živého vysielania.

Štruktúrované streamovanie sa pôvodne spoliehalo na schému mikrobatchovania Spark Streaming pri spracovávaní streamovaných údajov. Ale v Spark 2.3 tím Apache Spark pridal do štruktúrovaného streamovania režim nepretržitého spracovania s nízkou latenciou, čo mu umožnilo spracovávať odpovede s latenciou až 1 ms, čo je veľmi pôsobivé. Od verzie Spark 2.4 sa kontinuálne spracovanie stále považuje za experimentálne. Zatiaľ čo štruktúrované streamovanie je postavené na stroji Spark SQL, Continuous Streaming podporuje iba obmedzenú množinu dotazov.

Štruktúrované streamovanie je budúcnosť streamovacích aplikácií s touto platformou, takže ak budujete novú streamovaciu aplikáciu, mali by ste použiť štruktúrované streamovanie. Staršie rozhrania Spark Streaming API budú naďalej podporované, ale projekt odporúča preniesť sa na štruktúrované streamovanie, pretože vďaka novej metóde je zápis a údržba streamovacieho kódu oveľa znesiteľnejšia.

Deep Learning Pipelines

Apache Spark podporuje hlboké učenie prostredníctvom Deep Learning Pipelines. Pomocou existujúcej pipeline štruktúry MLlib môžete volať do knižníc hlbokého učenia na nižšej úrovni a vytvárať klasifikátory len v niekoľkých riadkoch kódu, ako aj aplikovať vlastné grafy TensorFlow alebo modely Keras na prichádzajúce údaje. Tieto grafy a modely je možné dokonca zaregistrovať ako vlastné Spark SQL UDF (používateľom definované funkcie), aby bolo možné modely hlbokého učenia použiť na údaje ako súčasť príkazov SQL.

Výukové programy Apache Spark

Ste pripravení ponoriť sa a naučiť sa Apache Spark? Dôrazne odporúčame Príručku neandertálca pre Apache Spark v jazyku Python od Evana Heitmana, ktorá poskytuje nielen základné informácie o tom, ako Apache Spark funguje relatívne jednoducho, ale zároveň vás prevedie procesom písania jednoduchej aplikácie v jazyku Python, ktorá využíva rámec. . Článok je napísaný z pohľadu dátového vedca, ktorý dáva zmysel, pretože dátová veda je svet, v ktorom sú veľké dáta a strojové učenie čoraz dôležitejšie.

Ak hľadáte nejaké príklady Apache Spark, ktoré vám poskytnú predstavu o tom, čo platforma dokáže a ako to robí, vyskúšajte Spark By {examples}. Existuje množstvo vzorových kódov pre množstvo základných úloh, ktoré tvoria stavebné kamene programovania Spark, takže môžete vidieť komponenty, ktoré tvoria väčšie úlohy, pre ktoré je Apache Spark určený.

Potrebujete ísť hlbšie? DZone má to, čo skromne označuje ako The Complete Apache Spark Collection, ktorá pozostáva z množstva užitočných návodov k mnohým témam Apache Spark. Šťastné učenie!

$config[zx-auto] not found$config[zx-overlay] not found