Bevezetés az Apache Beam-be

1. Áttekintés

Ebben az oktatóanyagban bemutatjuk az Apache Beam-et és feltárjuk annak alapvető fogalmait.

Először bemutatjuk az Apache Beam használatának esetét és előnyeit, majd bemutatjuk az alapfogalmakat és a terminológiákat. Ezután áttekintünk egy egyszerű példát, amely bemutatja az Apache Beam összes fontos szempontját.

2. Mi az Apache Beam?

Az Apache Beam (Batch + strEAM) egy egységes programozási modell kötegelt és streaming adatfeldolgozási feladatokhoz. Szoftverfejlesztő készletet tartalmaz az adatfeldolgozó csővezetékek, valamint a futók definiálásához és végrehajtásához.

Az Apache Beam-et úgy tervezték, hogy hordozható programozási réteget biztosítson. Valójában a Beam Pipeline Runners lefordítja az adatfeldolgozási folyamatot az API-ba, amely kompatibilis a felhasználó által kiválasztott háttérrendszerrel. Jelenleg ezek az elosztott feldolgozási háttérprogramok támogatottak:

  • Apache Apex
  • Apache Flink
  • Apache Gearpump (inkubáló)
  • Apache Samza
  • Apache Spark
  • Google Cloud Dataflow
  • Hazelcast Jet

3. Miért Apache Beam?

Az Apache Beam egyesíti a kötegelt és a streaming adatfeldolgozást, míg mások gyakran külön API-kon keresztül. Következésképpen nagyon egyszerű a streaming folyamatot kötegeltre váltani, és fordítva, mondjuk a követelmények változásával.

Az Apache Beam növeli a hordozhatóságot és a rugalmasságot. A logikánkra koncentrálunk, nem pedig az alapul szolgáló részletekre. Sőt, bármikor megváltoztathatjuk az adatfeldolgozási háttérprogramot.

Java, Python, Go és Scala SDK állnak rendelkezésre az Apache Beam számára. Valóban, a csapatban mindenki használhatja a választott nyelvével.

4. Alapfogalmak

Az Apache Beam segítségével munkafolyamat-grafikonokat (csővezetékeket) készíthetünk és futtathatunk. A programozási modell legfontosabb fogalmai a következők:

  • PCgyűjtés - olyan adatkészletet képvisel, amely lehet fix köteg vagy adatfolyam
  • PTtranszform - egy vagy több adatfeldolgozási művelet PCgyűjtéss és nullát vagy többet ad ki PCgyűjtéss
  • Csővezeték - a. Irányított aciklusos gráfja PCgyűjtés és PTtranszformés ennélfogva a teljes adatfeldolgozási feladatot összefoglalja
  • PipelineRunner - végrehajtja a Csővezeték egy meghatározott elosztott feldolgozási háttérprogramon

Egyszerűen fogalmazva: a PipelineRunner végrehajtja a Csővezeték, és a Csővezeték tartalmaz PCgyűjtés és PTtranszform.

5. Szószám példa

Most, hogy megtanultuk az Apache Beam alapfogalmait, tervezzünk és teszteljünk egy szószámlálási feladatot.

5.1. Gerendavezeték építése

A munkafolyamat-grafikon megtervezése az első lépés minden Apache Beam-munkában. Határozzuk meg egy szószámlálási feladat lépéseit:

  1. Olvassa el a szöveget egy forrásból.
  2. Ossza fel a szöveget szavak listájára.
  3. Minden szó kisbetűvel.
  4. Írásjelek vágása.
  5. Szűrje a zárszavakat.
  6. Számolja meg az egyes szavakat.

Ennek elérése érdekében a fenti lépéseket eggyé kell konvertálnunk Csővezeték felhasználásával PCgyűjtés és PTtranszform absztrakciók.

5.2. Függőségek

Mielőtt megvalósíthatnánk munkafolyamat-grafikonunkat, hozzá kell adnunk az Apache Beam fő függőségét a projektünkhöz:

 org.apache.beam beam-sdks-java-core $ {beam.version} 

A Beam Pipeline Runners elosztott feldolgozási háttérprogramra támaszkodik a feladatok elvégzéséhez. Tegyük hozzá DirectRunner futásidejű függőségként:

 org.apache.beam beam-runners-direct-java $ {beam.version} futásidejű 

A többi csővezeték-futóval ellentétben DirectRunner nincs szüksége további beállításokra, ami jó választás az indulók számára.

5.3. Végrehajtás

Az Apache Beam a Map-Reduce programozási paradigmát használja (ugyanaz, mint a Java Streams). Valójában jó ötlet, ha van egy alapkoncepciónk csökkenteni (), szűrő(), számol(), térkép(), és flatMap () mielőtt folytatnánk.

A. Létrehozása Csővezeték az első dolog, amit csinálunk:

PipelineOptions options = PipelineOptionsFactory.create (); Pipeline p = Pipeline.create (opciók);

Most alkalmazzuk hatlépéses szószámlálási feladatunkat:

PCgyűjtés wordCount = p .apply ("(1) Olvassa el az összes sort", TextIO.read (). from (inputFilePath)) .apply ("(2) Flatmap a szavak listájához", FlatMapElements.into (TypeDescriptors.strings () ) .via (line -> Arrays.asList (line.split ("\ s")))))) .apply ("(3) Kisbetűk mind", MapElements.into (TypeDescriptors.strings ()) .via (word - > word.toLowerCase ())) .apply ("(4) Trim írásjelek", MapElements.into (TypeDescriptors.strings ()) .via (word -> trim (word))) .apply ("(5) Stopwords szűrése ", Filter.by (szó ->! IsStopWord (szó))) .apply (" (6) Számoljon szavakat ", Count.perElement ());

A (z) első (választható) argumentuma alkalmaz() egy Húr ez csak a kód jobb olvashatósága érdekében. Itt van, amit mindegyik alkalmaz() a fenti kódban:

  1. Először egy beviteli szövegfájlt olvasunk fel soronként a segítségével TextIO.
  2. Az egyes sorokat szóközökkel elválasztva lapos feltérképezzük a szavak listájára.
  3. A szavak száma nem érzékeny a kis- és nagybetűkre, ezért minden szót kisbetűvel írunk.
  4. Korábban sorokat osztottunk szóközzel, végül olyan szavakkal, mint a „szó!” és „szó?”, ezért eltávolítjuk az írásjeleket.
  5. Az olyan szavak, mint az „is” és a „by”, szinte minden angol nyelvű szövegben előfordulnak, ezért eltávolítjuk őket.
  6. Végül megszámoljuk az egyedi szavakat a beépített függvény segítségével Count.perElement ().

Mint korábban említettük, a csővezetékeket elosztott háttérrendszeren dolgozzák fel. Nem lehet iterálni a felett PCgyűjtés memóriában, mivel több háttérprogramra oszlik. Ehelyett egy külső adatbázisba vagy fájlba írjuk az eredményeket.

Először megtérítjük a sajátunkat PCgyűjtés nak nek Húr. Akkor használjuk TextIO a kimenet megírásához:

wordCount.apply (MapElements.into (TypeDescriptors.strings ()) .via (count -> count.getKey () + "->" + count.getValue ())) .apply (TextIO.write (). - ig outputFilePath));

Most, hogy a mi Csővezeték a definíció teljes, futtathatjuk és tesztelhetjük.

5.4. Futás és tesztelés

Eddig meghatároztuk a Csővezeték a szószámolási feladathoz. Ezen a ponton futtassuk a Csővezeték:

p.run (). waitUntilFinish ();

Ezen a kódsoron az Apache Beam többszörösnek küldi a feladatunkat DirectRunner példányok. Következésképpen a végén több kimeneti fájl jön létre. A következőket tartalmazzák:

... apache -> 3 gerenda -> 5 kőzet -> 2 ...

Egy elosztott munka meghatározása és futtatása az Apache Beam-ben ilyen egyszerű és kifejező. Összehasonlításképpen, a szavak számának megvalósítása elérhető az Apache Spark, az Apache Flink és a Hazelcast Jet eszközökön is.

6. Hová menjünk innen?

Sikeresen megszámoltuk az egyes szavakat a bemeneti fájlunkból, de a leggyakoribb szavakról még nincs jelentésünk. Természetesen a válogatás a PCgyűjtés a következő lépésként jó probléma megoldani.

Később többet megtudhatunk az ablakolásról, a kiváltókról, a mutatókról és a kifinomultabb átalakításokról. Az Apache Beam Documentation részletes információkat és referencia anyagokat nyújt.

7. Következtetés

Ebben az oktatóanyagban megtudtuk, mi az Apache Beam, és miért előnyösebb az alternatívákkal szemben. Szószámlálási példával bemutattuk az Apache Beam alapfogalmait is.

Az oktatóanyag kódja elérhető a GitHubon.