Seznámení se Sparkem

Dokončeno

Spark je jádrem modulu pro zpracování dat, což znamená, že datovým inženýrům umožňuje efektivně extrahovat, transformovat a analyzovat masivní datové sady napříč distribuovanými systémy. To, co ho odlišuje, je schopnost sjednotit různé typy datových úloh v rámci jedné architektury. Spark nevyžaduje samostatné systémy pro streamování v reálném čase, dávkové zpracování, dotazy SQL nebo strojové učení. Všechno je možné ve Sparku provádět s konzistentní sadou rozhraní API.

Další síla spočívá v jeho snadném použití. Spark podporuje více programovacích jazyků, včetně Pythonu, Javy, Scaly a R. Pokud už s Pythonem pracujete, můžete hned začít analyzovat data pomocí PySparku, rozhraní Pythonu pro Spark.

Možná nejdůležitější je, že Spark byl sestaven s ohledem na škálovatelnost. Můžete začít experimentovat na místním počítači a pak beze změny kódu spustit stejnou aplikaci na clusteru stovek nebo tisíců počítačů.

Ekosystém Sparku

I když lidé často mluví o Sparku jako o jediné věci, je to vlastně ekosystém knihoven založených na základním modulu:

  • Spark Core poskytuje základ pro distribuované výpočty, včetně plánování úloh, správy paměti a zotavení po chybách.

  • Spark SQL umožňuje pracovat se strukturovanými daty pomocí jazyka, který už většina analytiků zná: SQL. Integruje se také s externími zdroji dat, jako jsou Hive, Parquet a JSON.

  • Streamování Sparku umožňuje zpracovávat data téměř v reálném čase, což je užitečné pro aplikace, jako je detekce podvodů nebo monitorování systémových protokolů.

  • MLlib je knihovna strojového učení Sparku. Poskytuje škálovatelné implementace algoritmů pro klasifikaci, clustering, regresi a doporučení.

  • GraphX se používá pro výpočty grafů, jako je analýza sociálních sítí nebo modelování vztahů mezi entitami.

Diagram knihoven Sparku

Díky těmto komponentám Je Spark jedním zastavením řešení pro většinu problémů s velkými objemy dat.

Jak Spark funguje

Možná vás zajímá: proč bych vůbec psal program ve Sparku? Odpověď spočívá ve schopnosti škálovat. Pokud je datová sada příliš velká na to, aby se vešla do paměti jednoho stroje, nebo když potřebujete dokončit výpočty mnohem rychleji, než zvládnou tradiční nástroje jako Pandas nebo Excel, přichází na řadu Spark. Spark umožňuje napsat kód, který se velmi podobá práci s místními daty, ale distribuuje je automaticky napříč mnoha počítači v clusteru. Výsledkem je, že můžete analyzovat gigabajty, terabajty nebo dokonce petabajty dat, aniž byste museli přepisovat logiku při každém růstu datové sady.

Předpokládejme, že vaše společnost ukládá data clickstreamu webu ve službě Azure Data Lake Storage. Chcete porozumět chování zákazníků tak, že vyfiltrujete všechna kliknutí za posledních 24 hodin, spojíte se s tabulkou profilů uživatelů a pak vypočítáte pět nejnavštěvovanějších kategorií produktů.

Co se stane při implementaci v Databricks:

  • Poznámkový blok obsahuje kód, který jste napsali v Pythonu (PySpark), a to se spustí v programu ovladače. Ovladač zodpovídá za převod příkazů vysoké úrovně (například filtrování řádků nebo seskupování dat) do plánu menších úloh.

  • Správce clusteru pak tyto úlohy přiřadí různým exekutorům. Každý vykonavatel je pracovní proces spuštěný na počítači ve vašem klastru. Clustery Apache Spark jsou skupiny vzájemně propojených serverů, které jsou považovány za jeden výpočetní modul a zpracovávají provádění příkazů vydaných z poznámkových bloků. Jeden exekutor může vyfiltrovat včerejší kliknutí na ID uživatelů 1–100 000, jiný exekutor (na stejném nebo jiném serveru) pro ID 100 001–200 000 atd.

  • Jakmile všechny exekutory dokončí svou část práce, Spark shromáždí výsledky, zkombinuje je a vrátí vám čistý datový rámec zobrazující nejlepší kategorie produktů.

Diagram znázorňující architekturu Sparku

Z pohledu datového inženýra právě píšete známý kód datového rámce v poznámkovém bloku Databricks. Spark se postará o distribuci dat, paralelizaci výpočtů a opakování úloh, pokud v clusteru něco selže. Díky tomuto návrhu je Spark přístupný – téměř jako pracujete s místními datovými nástroji – ale pod kapotou orchestruje vysoce paralelní výpočty odolné proti chybám napříč potenciálně stovkami počítačů.

Opožděné vyhodnocení a DAG

Jednou z nejdůležitějších možností návrhu Sparku je opožděné vyhodnocení. Na rozdíl od nástrojů, jako je Pandas, kdy se každá operace spustí okamžitě, Spark nespustí vaše příkazy hned po jejich napsání. Místo toho, když použijete transformace, jako je filtrování řádků, spojování tabulek nebo výběr sloupců, Spark tyto operace jednoduše zaznamená do plánu. Zatím se nic nevypočítá. Tento přístup umožňuje Sparku podívat se na celou posloupnost operací, než se rozhodne, jak je provést nejúčinnějším způsobem.

Spark na pozadí sestaví směrovaný acyklický graf (DAG) operací. Každý uzel v grafu představuje datovou sadu a každá hrana představuje transformaci použitou pro danou datovou sadu. Vzhledem k tomu, že je graf acyklický, proudí jedním směrem – z nezpracovaných vstupních dat do konečného výsledku – bez smyčkování. Optimalizátor Sparku analyzuje tento DAG za účelem kombinování kroků, minimalizace přesunu dat a určení nejlepší strategie provádění v clusteru.

Diagram znázorňující acyklický orientovaný graf (DAG) Sparku

Provádění začíná pouze v případě, že provedete nějakou akci, například shromažďování výsledků pro ovladač, zápis dat do úložiště nebo počítání řádků. V tomto okamžiku Spark odešle optimalizovaný DAG jako řadu úloh správci clusteru, který je distribuuje mezi exekutory. Tento návrh pomáhá Sparku dosáhnout vysokého výkonu: zabraňuje zbytečným výpočtům, snižuje prohazování dat mezi uzly a zajišťuje, aby se prostředky clusteru používaly co nejefektivněji.

případy použití Real-World

Organizace v mnoha odvětvích používají Spark vždy, když potřebují zpracovávat a analyzovat velké nebo rychle se pohybující datové sady. Například služba streamování videa může pomocí Sparku vytvořit modul doporučení, který navrhuje nový obsah na základě historie zobrazení. Finanční instituce může spoléhat na streamování Sparku, aby monitoruje transakce v reálném čase a označí podezřelou aktivitu. Ve zdravotnictví můžou vědci pomocí Sparku analyzovat genetická data ve velkém měřítku a identifikovat vzory související s onemocněními. I v tradičních obchodních nastaveních hraje Spark často roli při přípravě a transformaci nezpracovaných provozních dat, aby je bylo možné použít pro řídicí panely a vytváření sestav.

Mezi další běžné aplikace patří analýza velkých objemů protokolů webového serveru, spouštění řídicích panelů v reálném čase pro zařízení Internetu věcí (IoT), trénování modelů strojového učení na velmi velkých datových sadách a vytváření kanálů ETL , které extrahují, čistí a kombinují nezpracovaná data z více zdrojů.

Možnosti kompatibility a nasazení

Jednou z silných stránek Sparku je to, že vás nezamkne do jedné infrastruktury. Místo toho je navržený tak, aby běžel nad celou řadou distribuovaných systémů, což vám dává flexibilitu v tom, jak a kde ho nasadíte. Na nejjednodušší úrovni může Spark běžet místně na vašem počítači, což usnadňuje experimentování s malými datovými sadami nebo základní informace bez nastavení clusteru. Pokud potřebujete větší výkon, můžete škálovat spuštěním Sparku na samostatném clusteru počítačů nebo ho integrovat se správci prostředků, jako je Hadoop YARN nebo Apache Mesos, které zpracovávají plánování a přidělování prostředků.

Spark je v cloudu široce podporovaný napříč poskytovateli. Například služby, jako jsou Azure Databricks, Azure Synapse Analytics a Microsoft Fabric, usnadňují spouštění clusterů Spark, aniž by se museli starat o podrobnosti o nastavení a správě clusteru. Spark je také stále častěji nasazený v Kubernetes, což organizacím umožňuje kontejnerizovat své aplikace Spark a spouštět je v moderních prostředích nativních pro cloud. Tato flexibilita znamená, že s tím, jak se vaše potřeby vyvíjejí – od místního vývoje až po místní clustery až po rozsáhlá cloudová nasazení – můžete i nadále používat stejné aplikace Spark, aniž byste je museli přepisovat pro jinou platformu.