DStreams vs. DataFrames: Two Flavors of Spark Streaming

ez a bejegyzés egy vendég kiadvány írta Yaroslav Tkachenko, a szoftver építész Activision.

az Apache Spark az egyik legnépszerűbb és leghatékonyabb nagyméretű adatfeldolgozó keretrendszer. A Hadoop MapReduce keretrendszerének alternatívájaként jött létre a kötegelt munkaterhelésekhez, de most már támogatja az SQL-t, a gépi tanulást és a stream feldolgozást is. Ma a Spark streamingre szeretnék összpontosítani, és néhány rendelkezésre álló lehetőséget mutatok a stream feldolgozásához.

a Stream adatfeldolgozást akkor használják, amikor a dinamikus adatok folyamatosan generálódnak, és gyakran megtalálható a big data felhasználási esetekben. A legtöbb esetben az adatok feldolgozása közel valós időben, egy rekord egy időben, és a betekintést származó adatok is használják, hogy a riasztások, render irányítópultok, és a takarmány gépi tanulási modellek, amelyek gyorsan reagálni az új trendeket az adatok.

DStreams vs.DataFrames

Spark Streaming ment alfa Spark 0.7.0. Ez alapján az ötlet a diszkretizált patakok vagy DStreams. Minden DStream RDD-sorozatként jelenik meg, így könnyen használható, ha alacsony szintű RDD-alapú kötegelt munkaterhelésekből származik. A DStreams sok fejlesztésen ment keresztül ebben az időszakban, de még mindig voltak különféle kihívások, elsősorban azért, mert ez egy nagyon alacsony szintű API.

e kihívások megoldására a Spark strukturált adatfolyamot a Spark 2.0-ban vezették be (és a 2.2-ben stabil lett) a Spark SQL tetejére épített kiterjesztésként. Emiatt kihasználja a Spark SQL kód és a memória optimalizálását. Strukturált Streaming is ad nagyon erős absztrakciók, mint Dataset / DataFrame API-kat, valamint az SQL. Nincs több foglalkozó RDD közvetlenül!

mind a strukturált Streaming, mind a Dstreamekkel történő Streaming mikro-kötegelést használ. A legnagyobb különbség a késleltetés és az üzenet kézbesítési garanciái: a strukturált Streaming pontosan egyszeri kézbesítést kínál 100 + milliszekundumos késleltetéssel, míg a Dstreams-sel történő Streaming csak legalább egyszer garantálja a kézbesítést, de ezredmásodperces késleltetést biztosít.

személy szerint inkább a Spark strukturált streaminget részesítem előnyben az egyszerű használati esetekben, de a Spark Streaming a DStreams segítségével rugalmassága miatt nagyon jó a bonyolultabb topológiákhoz. Ezért szeretném az alábbiakban bemutatni, hogyan kell használni a Streaming-et a DStreams-szel és a Streaming-et a DataFrames-szel (amelyet általában a Spark strukturált Streamingnél használnak) az Apache Kafka adatainak fogyasztására és feldolgozására. Scala, Apache Spark 2.3 és Apache Kafka 2.0.

a példa kedvéért a feladataimat a Qubole által biztosított Apache Zeppelin Notebookok segítségével fogom futtatni. A Qubole egy adatplatform, amelyet naponta használok. Kezeli a Hadoop és a Spark klasztereket, megkönnyíti az ad hoc Hive és Presto lekérdezések futtatását, valamint felügyelt Zeppelin notebookokat is biztosít, amelyeket boldogan használok. A Qubole-val nem kell sokat gondolkodnom a Spark és a Zeppelin konfigurálásán és hangolásán, csak nekem kezelik.

a tényleges használati esetem nagyon egyszerű:

  • valamilyen telemetria van írva Kafka: kis JSON üzenetek metaadatokkal és tetszőleges kulcs/érték párokkal
  • csatlakozni akarok a Kafka — hoz, fogyasztani és deserializálni akarom ezeket az üzeneteket
  • majd szükség esetén transzformációkat alkalmazok
  • gyűjts össze néhány összesítést
  • végül érdekelnek az anomáliák és általában a rossz adatok-mivel nem én irányítom a termelőt, olyan dolgokat akarok elkapni, mint a nullák, üres karakterláncok, esetleg helytelen dátumok és egyéb értékek a speciális formátumok stb.
  • a feladatnak egy ideig futnia kell, majd automatikusan véget ér. A Spark Streaming jobok általában folyamatosan futnak, de néha hasznos lehet ad hoc módon futtatni elemzés/hibakeresés céljából (vagy például az én esetemben, mivel olyan egyszerű a Spark job futtatása egy notebookban).

Streaming Dstreamekkel

ebben a megközelítésben a Dstreameket használjuk, ami egyszerűen RDD-k gyűjteménye.

Streaming DataFrames

most megpróbálhatjuk kombinálni Streaming DataFrames API, hogy a legjobb mindkét világból!

következtetés

melyik megközelítés jobb? Mivel a DStream csak RDD-k gyűjteménye, jellemzően alacsony szintű transzformációkhoz és feldolgozáshoz használják. A DataFrames API hozzáadása ezen felül nagyon erős absztrakciókat biztosít, mint például az SQL, de egy kicsit több konfigurációt igényel. Ha pedig egyszerű használati esete van, a Spark strukturált Streaming általában jobb megoldás lehet!

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.

Previous post 10 hüvelykes vs 12 hüvelykes gérfűrész: a nagyobb mindig jobb?
Next post halálos gépjármű-baleset az Egyesült Államok 1. útján, észak felé, a Harrison Streeten, West Windsorban