Az Apache Spark bemutatása

1. Bemutatkozás

Az Apache Spark egy nyílt forráskódú fürt számítástechnikai keretrendszer. Elegáns fejlesztési API-kat biztosít a Scala, a Java, a Python és az R számára, amelyek lehetővé teszik a fejlesztők számára, hogy különféle adatigényes munkaterheléseket hajtsanak végre különböző adatforrásokban, beleértve a HDFS-t, a Cassandra, a HBase, az S3 stb.

A Hadoop MapReduce történelmileg hatékonynak bizonyult néhány iteratív és interaktív számítástechnikai munka esetében, ami végül a Spark fejlesztéséhez vezetett. A Spark segítségével akár két nagyságrenddel gyorsabban futtathatjuk a logikát, mint Hadoop memóriában, vagy egy nagyságrenddel gyorsabban a lemezen.

2. Szikra építészet

A Spark alkalmazások független folyamatkészletként futnak egy fürtön, az alábbi diagram szerint:

Ezeket a folyamatokat a SparkContext objektum a fő programban (az úgynevezett illesztőprogram). SparkContext többféle klaszterkezelőhöz csatlakozik (vagy a Spark saját önálló fürtkezelőjéhez, a Mesoshoz, vagy a YARN-hoz), amelyek erőforrásokat osztanak ki az alkalmazások között.

A csatlakozás után a Spark végrehajtókat szerez a fürt csomópontjain, amelyek olyan folyamatok, amelyek számításokat futtatnak és adatokat tárolnak az alkalmazásához.

Ezután elküldi az alkalmazáskódját (amelyet JAR vagy Python fájlok határoznak meg neki) SparkContext) a végrehajtóknak. Végül, SparkContext feladatokat küld a végrehajtóknak futtatásra.

3. Alapkomponensek

Az alábbi ábra tiszta képet ad a Spark különböző összetevőiről:

3.1. Szikra mag

A Spark Core komponens elszámolható az összes alapvető I / O funkcióval, a munkák ütemezésével és figyelemmel kísérésével a szikrafürtökön, a feladatok diszpécserezésével, a különböző tárolórendszerekkel való hálózatépítéssel, a hibák helyreállításával és a hatékony memóriakezeléssel.

A Hadoop-tól eltérően a Spark elkerüli a megosztott adatok tárolását olyan köztes üzletekben, mint az Amazon S3 vagy a HDFS, az RDD (Resilient Distributed Datasets) néven ismert speciális adatstruktúra használatával.

A rugalmas elosztott adatkészletek megváltoztathatatlanok, particionált rekordok gyűjteménye, amelyek párhuzamosan működtethetők és lehetővé teszik a hibatűrő „memóriában lévő” számításokat.

Az RDD kétféle műveletet támogat:

  • Transzformáció - A Spark RDD átalakítás olyan funkció, amely új RDD-t állít elő a meglévő RDD-kből. A transzformátor RDD-t vesz bemenetként, és egy vagy több RDD-t állít elő kimenetként. Az átalakulások lusták, azaz végrehajtódnak, amikor cselekvést hívunk
  • Akcióaz átalakítások RDD-ket hoznak létre egymásból, de amikor a tényleges adatkészlettel akarunk dolgozni, akkor ezen a ponton műveletet hajtunk végre. Így, Műveletek olyan Spark RDD műveletek, amelyek nem RDD értékeket adnak meg. A művelet értékeit az illesztőprogramok vagy a külső tárolórendszer tárolják

A művelet az egyik módja az adatok küldésének az Executortól az illesztőprogramhoz.

A végrehajtók olyan ügynökök, akik felelősek egy feladat végrehajtásáért. Míg az illesztőprogram egy JVM folyamat, amely koordinálja a dolgozókat és a feladat végrehajtását. A Spark néhány tevékenysége megszámlálódik és összegyűlik.

3.2. Spark SQL

A Spark SQL egy strukturált adatfeldolgozásra szolgáló Spark modul. Elsősorban SQL lekérdezések végrehajtására szolgál. DataFrame a Spark SQL fő absztrakcióját képezi. A megnevezett oszlopokba rendezett adatok elosztott gyűjtése a néven ismert DataFrame a Sparkban.

A Spark SQL támogatja az adatok beolvasását különböző forrásokból, például Hive, Avro, Parquet, ORC, JSON és JDBC. Ezenkívül több ezer csomópontra és több órás lekérdezésre skálázza a Spark motort - amely teljes lekérdezés közepén biztosítja a hibatűrést.

3.3. Spark Streaming

A Spark Streaming az alapvető Spark API kiterjesztése, amely lehetővé teszi az élő adatfolyamok skálázható, nagy áteresztőképességű, hibatűrő adatfolyam-feldolgozását. Az adatokat számos forrásból lehet bevinni, például Kafka, Flume, Kinesis vagy TCP aljzatokból.

Végül a feldolgozott adatok kitolhatók fájlrendszerekbe, adatbázisokba és élő irányítópultokra.

3.4. Spark Mlib

Az MLlib a Spark gépi tanulási (ML) könyvtára. Célja, hogy a gyakorlati gépi tanulást skálázhatóvá és egyszerűvé tegye. Magas szinten olyan eszközöket kínál, mint:

  • ML algoritmusok - általános tanulási algoritmusok, például osztályozás, regresszió, klaszterezés és együttműködési szűrés
  • Featurization - a funkciók kibontása, átalakítása, dimenziós csökkentése és kiválasztása
  • Csővezetékek - eszközök az ML csővezetékek összeállításához, kiértékeléséhez és hangolásához
  • Perzisztencia-megtakarító és betöltő algoritmusok, modellek és csővezetékek
  • Segédprogramok - lineáris algebra, statisztika, adatkezelés stb.

3.5. Spark GraphX

A GraphX ​​a grafikonok és a grafikonokkal párhuzamos számítások egyik összetevője. Magas szinten a GraphX ​​kiterjeszti a Spark RDD-t egy új Graph absztrakció bevezetésével: egy irányított multigráf, amelynek tulajdonságai minden csúcshoz és élhez kapcsolódnak.

A gráf kiszámításának támogatásához a GraphX ​​alapvető operátorok halmazát tárja fel (pl. algráf, joinVertices, és aggregateMessages).

Ezenkívül a GraphX ​​egyre nagyobb gráfalgoritmusok és építők gyűjteményét is magában foglalja a gráfelemzési feladatok egyszerűsítése érdekében.

4. „Hello World” a Sparkban

Most, hogy megértettük az alapvető összetevőket, áttérhetünk az egyszerű Maven-alapú Spark projektre - a szószám kiszámításához.

Bemutatjuk a Sparkot helyi módban, ahol az összes komponens lokálisan fut ugyanazon a gépen, ahol ez a fő csomópont, a végrehajtó csomópontok vagy a Spark önálló fürtkezelője.

4.1. Maven Setup

Állítsunk be egy Java Maven projektet, benne Spark-függőségekkel pom.xml fájl:

  org.apache.spark spark-core_2.10 1.6.0 

4.2. Szószám - Spark Job

Írjuk most a Spark jobot egy mondatot tartalmazó fájl feldolgozásához, és külön szavakat és azok számát adják ki a fájlban:

public static void main (String [] args) a Kivételt dobja {if (args.length <1) {System.err.println ("Használat: JavaWordCount"); System.exit (1); } SparkConf sparkConf = új SparkConf (). SetAppName ("JavaWordCount"); JavaSparkContext ctx = új JavaSparkContext (sparkConf); JavaRDD vonalak = ctx.textFile (args [0], 1); JavaRDD szavak = lines.flatMap (s -> tömbök.asList (SPACE.split (s)). Iterátor ()); JavaPairRDD ones = words.mapToPair (szó -> új Tuple2 (szó, 1)); JavaPairRDD számít = egyesek.reduceByKey ((Egész i1, Egész i2) -> i1 + i2); Lista output = count.collect (); mert (Tuple2 tuple: output) {System.out.println (tuple._1 () + ":" + tuple._2 ()); } ctx.stop (); }

Figyelje meg, hogy a helyi szövegfájl elérési útját argumentumként adjuk át egy Spark-jobnak.

A SparkContext Az objektum a Spark fő belépési pontja, és egy már futó Spark-fürthöz való kapcsolatot jelöli. Használja SparkConf objektum az alkalmazás konfigurációjának leírására. SparkContext arra szolgál, hogy a memóriában lévő szöveges fájlt a-ként olvassa el JavaRDD tárgy.

Ezután átalakítjuk a vonalakat JavaRDD kifogásolni a szavakat JavaRDD objektum a lapos térkép módszer az egyes sorok szóközzel elválasztott szavakká konvertálásához, majd az egyes sorok feldolgozásának kimeneteléhez simítva.

Ismét alkalmazzuk a transzformációs műveletet mapToPair amely alapvetően a szó minden előfordulását a szavak duplájára és az 1 számra térképezi fel.

Ezután alkalmazzuk a reducByKey művelet bármely szó többszörös előfordulásának az 1-es számmal való összevonására egy sor szóra, és összegezve a számlálást.

Végül végrehajtjuk a collect RDD akció a végeredmények megszerzéséhez.

4.3. Végrehajtás - Spark Job

Most készítsük el a projektet a Maven segítségével a generáláshoz apache-spark-1.0-SNAPSHOT.jar a célmappában.

Ezután el kell küldenünk ezt a WordCount feladatot a Sparknak:

$ {spark-install-dir} / bin / spark-submit --class com.baeldung.WordCount --master local $ {WordCount-MavenProject} /target/apache-spark-1.0-SNAPSHOT.jar $ {WordCount-MavenProject} /src/main/resources/spark_example.txt

A Spark telepítési könyvtárát és a WordCount Maven projektkönyvtárát frissíteni kell a parancs futtatása előtt.

Beküldéskor néhány lépés történik a színfalak mögött:

  1. Az illesztőprogram kódjából SparkContext csatlakozik a fürtkezelőhöz (esetünkben önálló, helyben futó fürtkezelőt szikrázik)
  2. A Fürtkezelő erőforrásokat oszt le a többi alkalmazás között
  3. A Spark végrehajtókat szerez a fürt csomópontjain. Itt szószámláló alkalmazásunk megkapja a saját végrehajtói folyamatait
  4. Az alkalmazáskódot (jar fájlokat) elküldik a végrehajtóknak
  5. A feladatokat a SparkContext a végrehajtóknak.

Végül a szikra feladat eredménye visszakerül az illesztőprogramhoz, és kimenetként a fájlban szereplő szavak számát fogjuk látni:

Helló 1 a 2-től Baledung 2 Tartsa 1 Tanulás 1 Szikra 1 Viszlát 1

5. Következtetés

Ebben a cikkben megvitattuk az Apache Spark architektúráját és különféle összetevőit. Bemutattunk egy működő példát is egy Spark-munkára, amely fájlokból adja meg a szavak számát.

Mint mindig, a teljes forráskód elérhető a GitHubon.