Programování

Storm or Spark: Vyberte si zbraň v reálném čase

Myšlenka business inteligence v reálném čase existuje již nějakou dobu (viz stránka Wikipedie k tématu zahájenému v roce 2006). Ale zatímco lidé o této myšlence hovoří už léta, neviděl jsem, že by mnoho podniků tuto vizi přijalo, natož aby si uvědomilo výhody, které umožňuje.

Přinejmenším jedním z důvodů byl nedostatek nástrojů pro implementaci BI a analytiky v reálném čase. Tradiční prostředí datových skladů byla silně orientována na dávkové operace s extrémně vysokou latencí, byla neuvěřitelně drahá nebo obojí.

Řada výkonných a snadno použitelných platforem s otevřeným zdrojovým kódem to změnila. Dva z nejpozoruhodnějších jsou Apache Storm a Apache Spark, které nabízejí možnosti zpracování v reálném čase mnohem širšímu okruhu potenciálních uživatelů. Oba jsou projekty v rámci Apache Software Foundation, a přestože tyto dva nástroje poskytují překrývající se funkce, každý z nich má charakteristické rysy a role, které je třeba hrát.

Storm: Hadoop zpracování v reálném čase

Storm, distribuovaný výpočetní rámec pro zpracování proudu událostí, začal život jako projekt BackType, společnosti zabývající se marketingovým zpravodajstvím, kterou koupila společnost Twitter v roce 2011. Twitter brzy otevřel projekt a nasadil ho na GitHub, ale Storm se nakonec přesunul do inkubátoru Apache. a v září 2014 se stal projektem nejvyšší úrovně Apache.

Storm byl někdy označován jako Hadoop zpracování v reálném čase. Zdá se, že dokumentace Stormu souhlasí: „Storm usnadňuje spolehlivé zpracování neomezených toků dat a dělá pro zpracování v reálném čase to, co Hadoop pro dávkové zpracování.“

K dosažení tohoto cíle je Storm navržen pro rozsáhlou škálovatelnost, podporuje odolnost proti chybám s přístupem k „rychlému selhání, automatickému restartu“ procesů a nabízí silnou záruku, že bude zpracována každá n-tice. Storm standardně poskytuje „alespoň jednou“ záruku na zprávy, ale nabízí také možnost implementovat zpracování „přesně jednou“.

Storm je napsán primárně v Clojure a je navržen tak, aby podporoval elektroinstalační „chrliče“ (myslí vstupní proudy) a „šrouby“ (procesní a výstupní moduly) společně jako směrovaný acyklický graf (DAG) nazývaný topologie. Topologie Storm běží na klastrech a plánovač Storm distribuuje práci do uzlů kolem klastru na základě konfigurace topologie.

Topologie můžete považovat za zhruba analogické úloze MapReduce v Hadoopu, až na to, že vzhledem k tomu, že se Storm zaměřuje na zpracování založené na proudu v reálném čase, jsou topologie standardně spuštěny navždy nebo dokud nejsou ručně ukončeny. Jakmile je topologie spuštěna, výtoky přinášejí data do systému a předávají data šroubům (což může zase předávat data dalším šroubům), kde se provádí hlavní výpočetní práce. Jak postupuje zpracování, jeden nebo více šroubů může zapisovat data do databáze nebo souborového systému, posílat zprávy do jiného externího systému nebo jinak zpřístupňovat výsledky výpočtu uživatelům.

Jednou ze silných stránek ekosystému Storm je bohatá škála dostupných hubic specializovaných na příjem dat ze všech typů zdrojů. I když možná budete muset psát vlastní chrliče pro vysoce specializované aplikace, existuje velká šance, že najdete existující chrlič pro neuvěřitelně širokou škálu zdrojů - od API pro streamování Twitteru přes Apache Kafka až po makléře JMS až po všechno mezi tím.

Existují adaptéry, které usnadňují integraci se souborovými systémy HDFS, což znamená, že Storm může v případě potřeby snadno spolupracovat s Hadoop. Další silnou stránkou Stormu je podpora vícejazyčného programování. Zatímco samotný Storm je založen na Clojure a běží na JVM, chrliče a šrouby lze psát téměř v jakémkoli jazyce, včetně jazyků jiných než JVM, které využívají výhod protokolu pro komunikaci mezi komponentami pomocí JSON přes stdin / stdout.

Stručně řečeno, Storm je velmi škálovatelný, rychlý a odolný proti chybám open source systém pro distribuovaný výpočet se zvláštním zaměřením na zpracování proudu. Storm vyniká zpracováním událostí a přírůstkovým výpočtem, výpočtem průběžných metrik v reálném čase přes proudy dat. Zatímco Storm také poskytuje primitiva umožňující generické distribuované RPC a lze jej teoreticky použít k sestavení téměř jakékoli distribuované výpočetní úlohy, jeho silnou stránkou je jednoznačně zpracování proudu událostí.

Spark: Distribuované zpracování pro všechny

Spark, další projekt vhodný pro distribuované výpočty v reálném čase, začínal jako projekt AMPLab na Kalifornské univerzitě v Berkeley, poté se připojil k inkubátoru Apache a nakonec v únoru 2014 promoval jako projekt nejvyšší úrovně. Stejně jako Storm, i Spark podporuje stream -oriented processing, but it's more of a general-purpose distributed computing platform.

Jako takový lze Spark považovat za potenciální náhradu za funkce MapReduce Hadoop, zatímco Spark má schopnost běžet nad existujícím klastrem Hadoop a spoléhat se na YARN pro plánování zdrojů. Kromě Hadoop YARN může Spark vrstvit nad Mesos pro plánování nebo běžet jako samostatný klastr pomocí svého integrovaného plánovače. Všimněte si, že pokud se Spark nepoužívá s Hadoopem, je při provozu na klastru stále vyžadován nějaký typ síťového / distribuovaného systému souborů (NFS, AFS atd.), Takže každý uzel bude mít přístup k podkladovým datům.

Spark je napsán ve Scale a stejně jako Storm podporuje vícejazyčné programování, ačkoli Spark poskytuje specifickou podporu API pouze pro Scala, Java a Python. Spark nemá konkrétní abstrakci „chrliče“, ale obsahuje adaptéry pro práci s daty uloženými v mnoha různých zdrojích, včetně souborů HDFS, Cassandra, HBase a S3.

Where Spark shines is in jeho podpora pro více paradigmat zpracování a podpůrných knihoven. Ano, Spark podporuje model streamování, ale tuto podporu poskytuje pouze jeden z několika modulů Spark, včetně účelových modulů pro přístup SQL, operace grafů a strojové učení, spolu se zpracováním proudu.

Spark také poskytuje extrémně šikovný interaktivní shell, který umožňuje rychlé a špinavé prototypování a průzkumnou analýzu dat v reálném čase pomocí API Scala nebo Python. Při práci v interaktivním prostředí si rychle všimnete dalšího významného rozdílu mezi Sparkem a Stormem: Spark má spíše „funkční“ příchuť, kde je práce s API poháněna spíše řetězením postupných volání metod k vyvolání primitivních operací - na rozdíl od Storm model, který má tendenci být poháněn vytvářením tříd a implementací rozhraní. Ani jeden z přístupů není lepší ani horší, ale preferovaný styl může ovlivnit vaše rozhodnutí o tom, který systém lépe vyhovuje vašim potřebám.

Stejně jako Storm je i Spark navržen pro rozsáhlou škálovatelnost a tým Spark dokumentoval uživatele systému provozujícího produkční klastry s tisíci uzlů. Kromě toho Spark zvítězil v nedávné soutěži Daytona GraySort v roce 2014 a získal nejlepší čas na pracovní zátěž, která se skládala ze třídění 100 TB dat. Tým Spark také dokumentuje operace Spark ETL s produkčními zátěžemi v řadě Petabyte.

Spark je rychlá, škálovatelná a flexibilní open source distribuovaná výpočetní platforma kompatibilní s Hadoop a Mesos, která podporuje několik výpočetních modelů, včetně streamování, operací zaměřených na grafy, přístupu SQL a distribuovaného strojového učení. Spark byl zdokumentován ve výjimečném měřítku a stejně jako Storm je vynikající platformou, na které lze vybudovat analytický systém a systém business intelligence v reálném čase.

Rozhodování

Jak si vyberete mezi Storm a Spark?

Pokud jsou vaše požadavky primárně zaměřeny na zpracování proudu a zpracování ve stylu CEP a začínáte projekt na zelené louce s účelovým klastrem pro tento projekt, pravděpodobně bych upřednostňoval Storm - zvláště když jsou k dispozici existující výtoky Storm, které odpovídají vašim integračním požadavkům . To v žádném případě není tvrdé a rychlé pravidlo, ale takové faktory by alespoň naznačovaly, že začíná Storm.

Na druhou stranu, pokud využíváte existující cluster Hadoop nebo Mesos a / nebo pokud vaše potřeby zpracování zahrnují podstatné požadavky na zpracování grafů, přístup SQL nebo dávkové zpracování, možná byste se měli nejprve podívat na Spark.

Dalším faktorem, který je třeba vzít v úvahu, je vícejazyčná podpora těchto dvou systémů. Například pokud potřebujete využít kód napsaný v R nebo jiném jazyce, který Spark nativně nepodporuje, má Storm výhodu širší jazykové podpory. Ze stejného důvodu, pokud musíte mít interaktivní prostředí pro průzkum dat pomocí volání API, pak vám Spark nabízí funkci, kterou Storm nemá.

Nakonec budete pravděpodobně chtít před konečným rozhodnutím provést podrobnou analýzu obou platforem. Doporučuji použít obě platformy k vytvoření malého důkazu o konceptu - poté spusťte své vlastní měřítka s pracovní zátěží, která co nejpřesněji zrcadlí vaše očekávané pracovní zátěže, než se plně odhodláte buď.

Samozřejmě nemusíte dělat žádné rozhodnutí. V závislosti na vašich pracovních zátěžích, infrastruktuře a požadavcích možná zjistíte, že ideálním řešením je směs Storm a Spark - spolu s dalšími nástroji, jako jsou Kafka, Hadoop, Flume atd. V tom spočívá krása otevřeného zdroje.

Bez ohledu na zvolenou trasu tyto nástroje ukazují, že se hra BI v reálném čase změnila. Výkonné možnosti, které byly kdysi k dispozici pouze elitní skupině, jsou nyní v dosahu většiny, ne-li všech, středně velkých až velkých organizací. Využijte je.