Programování

Co je Apache Spark? Platforma velkých dat, která rozdrtila Hadoop

Apache Spark definován

Apache Spark je rámec pro zpracování dat, který může rychle provádět úkoly zpracování na velmi velkých souborech dat a může také distribuovat úlohy zpracování dat mezi více počítačů, a to buď samostatně, nebo v tandemu s jinými distribuovanými výpočetními nástroji. Tyto dvě vlastnosti jsou klíčem ke světům velkých dat a strojového učení, které vyžadují sloučení obrovského výpočetního výkonu, aby se dostaly do velkých úložišť dat. Spark také odstraňuje některé programové zátěže těchto úkolů z ramen vývojářů pomocí snadno použitelného rozhraní API, které odvádí velkou část práce distribuovaného výpočtu a zpracování velkých dat.

Od jeho skromných začátků v AMPLab v U.C. V Berkeley v roce 2009 se Apache Spark stal jedním z klíčových rámců zpracování velkých objemů dat na světě. Spark lze nasadit různými způsoby, poskytuje nativní vazby pro programovací jazyky Java, Scala, Python a R a podporuje SQL, streamování dat, strojové učení a zpracování grafů. Najdete ji používanou bankami, telekomunikačními společnostmi, herními společnostmi, vládami a všemi významnými technologickými giganty, jako jsou Apple, Facebook, IBM a Microsoft.

Architektura Apache Spark

Na základní úrovni se aplikace Apache Spark skládá ze dvou hlavních komponent: a Řidič, který převádí uživatelský kód na více úkolů, které lze distribuovat mezi pracovní uzly, a exekutoři, které běží na těchto uzlech a provádějí úkoly jim přiřazené. K zprostředkování mezi nimi je nutná nějaká forma správce klastrů.

Out of the box, Spark can run in a standalone cluster mode that simply requires the Apache Spark framework and a JVM on each machine in your cluster. Je však pravděpodobnější, že budete chtít využít robustnější systém správy zdrojů nebo klastrů a postarat se o přidělení pracovníků na vyžádání. V podniku to bude běžně znamenat běh na Hadoop YARN (takto běží distribuce úloh Spark v distribucích Cloudera a Hortonworks), ale Apache Spark může běžet také na Apache Mesos, Kubernetes a Docker Swarm.

Pokud hledáte spravované řešení, pak Apache Spark najdete jako součást Amazon EMR, Google Cloud Dataproc a Microsoft Azure HDInsight. Společnost Databricks, která zaměstnává zakladatele společnosti Apache Spark, nabízí také platformu Databricks Unified Analytics Platform, což je komplexní spravovaná služba, která nabízí clustery Apache Spark, podporu streamování, integrovaný webový vývoj notebooků a optimalizovaný výkon I / O v cloudu. standardní distribuce Apache Spark.

Apache Spark staví příkazy uživatele pro zpracování dat do a Směrovaný acyklický grafnebo DAG. DAG je plánovací vrstva Apache Spark; určuje, jaké úkoly se provádějí na jakých uzlech a v jakém pořadí.

Spark vs. Hadoop: Proč používat Apache Spark?

Za zmínku stojí, že Apache Spark vs. Apache Hadoop je trochu nesprávné pojmenování. Spark dnes najdete ve většině distribucí Hadoop. Ale díky dvěma velkým výhodám se Spark stal rámcem volby při zpracování velkých dat, čímž předjel staré paradigma MapReduce, které Hadoop dostalo do popředí.

První výhodou je rychlost. Sparkův datový modul v paměti znamená, že v určitých situacích může provádět úkoly až stokrát rychleji než MapReduce, zvláště ve srovnání s vícestupňovými úlohami, které vyžadují mezi fázemi zápis stavu zpět na disk. MapReduce v podstatě vytváří dvoustupňový graf provádění sestávající z mapování a redukce dat, zatímco DAG společnosti Apache Spark má několik fází, které lze efektivněji distribuovat. Dokonce i úlohy Apache Spark, kde data nemohou být zcela obsažena v paměti, mají tendenci být přibližně 10krát rychlejší než jejich protějšek MapReduce.

Druhou výhodou je vývojářské rozhraní Spark API. Jak důležité je zrychlení Sparku, dalo by se namítnout, že přívětivost Spark API je ještě důležitější.

Spark Core

Ve srovnání s MapReduce a dalšími komponentami Apache Hadoop je rozhraní Apache Spark API velmi přátelské k vývojářům a skrývá většinu složitosti distribuovaného procesoru za jednoduchými voláními metod. Kanonickým příkladem toho je, jak lze téměř 50 řádků kódu MapReduce pro počítání slov v dokumentu zredukovat pouze na několik řádků Apache Spark (zde zobrazeno ve Scale):

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

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

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

.reduceByKey (_ + _)

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

Tím, že poskytuje vazby na populární jazyky pro analýzu dat, jako jsou Python a R, stejně jako podnikově přívětivější prostředí Java a Scala, umožňuje Apache Spark všem přístupným od vývojářů aplikací až po datové vědce využívat jeho škálovatelnost a rychlost.

Spark RDD

Srdcem Apache Spark je koncept Resilient Distributed Dataset (RDD), programovací abstrakce, která představuje neměnnou kolekci objektů, které lze rozdělit napříč výpočetním klastrem. Operace na RDD lze také rozdělit napříč klastrem a provádět v paralelním dávkovém procesu, což vede k rychlému a škálovatelnému paralelnímu zpracování.

RDD lze vytvářet z jednoduchých textových souborů, databází SQL, obchodů NoSQL (například Cassandra a MongoDB), kbelíků Amazon S3 a mnoha dalších. Velká část rozhraní Spark Core API je postavena na tomto konceptu RDD, což umožňuje tradiční mapování a snížení funkčnosti, ale také poskytuje integrovanou podporu pro připojení datových sad, filtrování, vzorkování a agregaci.

Spark běží distribuovaným způsobem kombinací a Řidič základní proces, který rozděluje aplikaci Spark na úkoly a rozděluje je mezi mnoho vykonavatel procesy, které dělají práci. Tyto exekutory lze škálovat nahoru a dolů podle potřeby aplikace.

Spark SQL

Spark SQL, původně známý jako Shark, se pro projekt Apache Spark stává stále důležitějším. Je to pravděpodobně rozhraní, které dnešní vývojáři nejčastěji používají při vytváření aplikací. Spark SQL je zaměřen na zpracování strukturovaných dat pomocí přístupu založeného na datovém rámci vypůjčeném od R a Pythonu (v Pandas). Ale jak název napovídá, Spark SQL také poskytuje rozhraní kompatibilní s SQL2003 pro dotazování na data, čímž přináší sílu Apache Spark analytikům i vývojářům.

Spolu se standardní podporou SQL poskytuje Spark SQL standardní rozhraní pro čtení a zápis do jiných datových úložišť včetně JSON, HDFS, Apache Hive, JDBC, Apache ORC a Apache Parquet, které jsou podporovány ihned po vybalení z krabice. Další oblíbené obchody - Apache Cassandra, MongoDB, Apache HBase a mnoho dalších - lze použít vytažením samostatných konektorů z ekosystému Spark Packages.

Výběr některých sloupců z datového rámce je stejně jednoduchý jako tento řádek:

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

Pomocí rozhraní SQL zaregistrujeme datový rámec jako dočasnou tabulku, po které můžeme proti němu vydávat dotazy SQL:

cityDF.createOrReplaceTempView („města“)

spark.sql („VYBRAT název, vyskočit z měst“)

V zákulisí používá Apache Spark optimalizátor dotazů s názvem Catalyst, který zkoumá data a dotazy, aby vytvořil efektivní plán dotazů pro lokalitu dat a výpočet, který provede požadované výpočty v celém klastru. V době Apache Spark 2.x je doporučeným přístupem pro vývoj rozhraní Spark SQL pro datové rámce a datové sady (v podstatě typovaný datový rámec, který lze zkontrolovat v době kompilace pro správnost a využít další optimalizaci paměti a výpočtu za běhu) . Rozhraní RDD je stále k dispozici, ale doporučuje se pouze v případě, že vaše potřeby nelze vyřešit v paradigmatu Spark SQL.

Spark 2.4 představil sadu vestavěných funkcí vyššího řádu pro přímou manipulaci s poli a jinými datovými typy vyššího řádu.

Spark MLlib

Apache Spark také svazuje knihovny pro aplikaci technik strojového učení a analýzy grafů na data v měřítku. Spark MLlib obsahuje rámec pro vytváření kanálů strojového učení, což umožňuje snadnou implementaci extrakce funkcí, výběrů a transformací na jakékoli strukturované datové sadě. MLlib přichází s distribuovanými implementacemi klastrování a klasifikačních algoritmů, jako je k-means shlukování a náhodné lesy, které lze snadno vyměňovat dovnitř a ven z vlastních kanálů. Modely mohou být vyškoleni datovými vědci v Apache Spark pomocí R nebo Pythonu, uloženy pomocí MLlib a poté importovány do kanálu založeného na Javě nebo Scale pro produkční použití.

Všimněte si, že zatímco Spark MLlib pokrývá základní strojové učení včetně klasifikace, regrese, shlukování a filtrování, nezahrnuje zařízení pro modelování a trénování hlubokých neuronových sítí (podrobnosti viz recenze Spark MLlib). Deep Learning Pipelines jsou však v pracích.

Spark GraphX

Spark GraphX ​​přichází s výběrem distribuovaných algoritmů pro zpracování grafových struktur včetně implementace PageRank společnosti Google. Tyto algoritmy používají k modelování dat přístup RDD Spark Core; balíček GraphFrames umožňuje provádět operace s grafy na datových rámcích, včetně využití optimalizátoru Catalyst pro dotazy na grafy.

Streamování jisker

Spark Streaming byl časný přírůstek do Apache Spark, který mu pomohl získat trakci v prostředích, která vyžadovala zpracování v reálném čase nebo téměř v reálném čase. Dříve bylo dávkové a streamové zpracování ve světě Apache Hadoop samostatnou věcí. Napsali byste kód MapReduce pro potřeby dávkového zpracování a pro požadavky streamování v reálném čase byste použili něco jako Apache Storm. To samozřejmě vede k různým kódovým základnám, které je třeba udržovat synchronizované pro doménu aplikace, přestože jsou založeny na zcela odlišných rámcích, vyžadují různé zdroje a zahrnují různé provozní zájmy pro jejich provoz.

Spark Streaming rozšířil koncept dávkového zpracování Apache Spark na streamování rozbitím proudu na nepřetržitou sérii mikrobarev, které pak mohly být manipulovány pomocí API Apache Spark. Tímto způsobem může kód v dávkových a streamovacích operacích sdílet (většinou) stejný kód, běžící na stejném rámci, čímž snižuje režii vývojáře i operátora. Všichni vyhrávají.

Kritika přístupu Spark Streaming spočívá v tom, že microbatching ve scénářích, kde je vyžadována odezva s nízkou latencí na příchozí data, nemusí být schopen odpovídat výkonu jiných rámců podporujících streamování, jako jsou Apache Storm, Apache Flink a Apache Apex, všichni používají spíše čistou metodu streamování než mikrodávky.

Strukturované streamování

Strukturované streamování (přidáno do Spark 2.x) je pro Spark Streaming to, čím byl Spark SQL pro API Spark Core: API na vyšší úrovni a snadnější abstrakce pro psaní aplikací. V případě Structure Streaming umožňuje rozhraní API na vyšší úrovni vývojářům v podstatě vytvářet nekonečné datové rámce a datové sady pro streamování. Rovněž řeší některé velmi skutečné body bolesti, se kterými se uživatelé v dřívějším rámci potýkali, zejména pokud jde o řešení agregace událostí a časů a pozdní doručení zpráv. Všechny dotazy na strukturované streamy procházejí optimalizátorem dotazů Catalyst a lze je dokonce spouštět interaktivním způsobem, což uživatelům umožňuje provádět dotazy SQL proti datům živého streamování.

Strukturované streamování původně spoléhalo na mikrobatchovací schéma Spark Streaming při zpracování streamovaných dat. Ale ve Sparku 2.3 tým Apache Spark přidal režim Continuous Processing s nízkou latencí do strukturovaného streamování, což mu umožnilo zpracovávat odpovědi s latencí až 1 ms, což je velmi působivé. Od verze Spark 2.4 je kontinuální zpracování stále považováno za experimentální. Zatímco strukturované streamování je postaveno na modulu Spark SQL, Continuous Streaming podporuje pouze omezenou sadu dotazů.

Strukturované streamování je budoucnost streamovacích aplikací s platformou, takže pokud vytváříte novou streamovací aplikaci, měli byste použít strukturované streamování. Starší rozhraní Spark Streaming API budou i nadále podporována, ale projekt doporučuje portování na strukturované streamování, protože díky nové metodě je psaní a údržba streamovacího kódu mnohem snesitelnější.

Deep Learning Pipelines

Apache Spark podporuje hluboké učení prostřednictvím Deep Learning Pipelines. Pomocí stávající struktury kanálu MLlib můžete volat do knihoven hlubokého učení nižší úrovně a vytvářet klasifikátory v několika řádcích kódu, stejně jako aplikovat vlastní grafy TensorFlow nebo modely Keras na příchozí data. Tyto grafy a modely lze dokonce zaregistrovat jako vlastní Spark SQL UDF (uživatelem definované funkce), takže modely hlubokého učení lze použít na data jako součást příkazů SQL.

Výukové programy Apache Spark

Jste připraveni se ponořit a naučit se Apache Spark? Důrazně doporučujeme průvodce Neandertálcem k Apache Spark v Pythonu od Evana Heitmana, který nejenže stanoví základy fungování Apache Spark v relativně jednoduchých termínech, ale také vás provede procesem psaní jednoduché aplikace v Pythonu, která využívá rámec . Článek je psán z pohledu datového vědce, což dává smysl, protože datová věda je svět, ve kterém jsou stále důležitější velká data a strojové učení.

Pokud hledáte nějaké příklady Apache Spark, které vám poskytnou představu o tom, co platforma dokáže a jak to dělá, podívejte se na Spark By {Příklady}. Existuje spousta ukázkového kódu pro řadu základních úkolů, které tvoří stavební bloky programování Spark, takže můžete vidět komponenty, které tvoří větší úkoly, pro které je Apache Spark určen.

Potřebujete jít hlouběji? DZone má to, co skromně označuje jako The Complete Apache Spark Collection, která se skládá z řady užitečných návodů k mnoha tématům Apache Spark. Šťastné učení!