DStreams vs. datové části rámců: Dvě varianty Spark Streaming

Tento příspěvek je hostem zveřejnění napsal Jaroslav Tkachenko, Softwarový Architekt společnosti Activision.

Apache Spark je jedním z nejpopulárnějších a nejvýkonnějších rámců pro zpracování dat ve velkém měřítku. Byl vytvořen jako alternativa k MapReduce frameworku Hadoop pro dávkové pracovní zatížení, ale nyní také podporuje SQL, strojové učení a zpracování streamu. Dnes se chci zaměřit na streamování Spark a ukázat několik možností, které jsou k dispozici pro zpracování streamu.

zpracování dat proudu se používá, když jsou dynamická data generována nepřetržitě,a často se vyskytuje v případech použití velkých dat. Ve většině případů jsou zpracovány údaje v téměř reálném čase, jeden záznam v době, a poznatky získané z údajů, které jsou také použity k poskytnutí upozornění, vykreslení panelů, a krmit strojového učení modely, které mohou rychle reagovat na nové trendy v datech.

DStreams vs. DataFrames

Spark Streaming šel alfa se Spark 0.7.0. Je založen na myšlence diskrétních proudů nebo proudů. Každý DStream je reprezentován jako posloupnost RDD, takže je snadné jej použít, pokud pocházíte z dávkové zátěže podporované RDD na nízké úrovni. Dstreams prošel během této doby mnoha vylepšeními, ale stále existovaly různé výzvy, především proto, že se jedná o API na velmi nízké úrovni.

jako řešení těchto problémů, Spark strukturovaný Streaming byl představen v Spark 2.0 (a stal se stabilní v 2.2) jako rozšíření postavené na vrcholu Spark SQL. Z tohoto důvodu využívá Spark SQL kódu a optimalizace paměti. Strukturované streamování také poskytuje velmi silné abstrakce, jako je Dataset / DataFrame API, stejně jako SQL. Žádné další jednání s RDD přímo!

strukturované streamování i streamování pomocí DStreams používají mikro-dávkování. Největším rozdílem jsou záruky latence a doručení zpráv: strukturované streamování nabízí přesně-jednou doručení s latencí 100+ milisekund, zatímco streamování s přístupem DStreams zaručuje pouze-alespoň-jednou doručení, ale může poskytnout milisekundové latence.

osobně dávám přednost strukturovanému streamování Spark pro jednoduché případy použití, ale streamování Spark s DStreams je díky své flexibilitě opravdu dobré pro složitější topologie. Proto níže chci ukázat, jak používat streamování s DStreams a streamování s DataFrames (který se obvykle používá se strukturovaným streamováním Spark) pro spotřebu a zpracování dat z Apache Kafka. Budu používat Scala, Apache Spark 2.3 a Apache Kafka 2.0.

také pro příklad spustím své úlohy pomocí notebooků Apache Zeppelin poskytovaných Společností Qubole. Qubole je datová platforma, kterou denně používám. Spravuje klastry Hadoop a Spark, usnadňuje spouštění dotazů ad hoc Hive a Presto a také poskytuje spravované notebooky Zeppelin, které šťastně používám. S Qubole nemusím moc přemýšlet o konfiguraci a ladění Spark a Zeppelin, je to jen pro mě.

skutečný případ použití, který mám, je velmi jednoduchý:

  • Kafkovi je napsána nějaká telemetrie: malé JSON zprávy s metadaty a libovolný klíč/hodnota páry
  • chci se připojit k Kafka, konzumovat, a rekonstruovat ty zprávy
  • a Pak aplikovat transformace, v případě potřeby
  • Sbírat některé shluky
  • Konečně, mám zájem anomálie a obecně špatné údaje — protože nemám kontrolu výrobce, a já chci chytit věci, jako je Null, prázdný řetězec, možná nesprávná data a další hodnoty s konkrétní formáty, atd.
  • úloha by měla běžet nějakou dobu a poté automaticky ukončit. Úlohy Spark Streaming obvykle běží nepřetržitě, ale někdy by mohlo být užitečné jej spustit ad hoc pro analýzu/ladění (nebo jako příklad v mém případě, protože je tak snadné spustit Spark job v notebooku).

Streaming s DStreams

v tomto přístupu používáme DStreams, což je prostě sbírka RDD.

streamování s DataFrames

nyní se můžeme pokusit kombinovat streamování s DataFrames API, abychom získali to nejlepší z obou světů!

závěr

který přístup je lepší? Protože DStream je jen sbírka RDD, obvykle se používá pro nízkoúrovňové transformace a zpracování. Přidání DataFrames API navíc poskytuje velmi silné abstrakce, jako je SQL, ale vyžaduje trochu více konfigurace. A pokud máte jednoduchý případ použití, strukturované streamování Spark může být obecně lepším řešením!

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna.

Previous post 10-palcová vs 12-palcová pokosová pila: je větší vždy lepší?
Next post Fatální Motorových Vozidel Havárie Na US Route 1 North V Harrison Street Ve West Windsor