Uvod u Apache Spark

1. Uvod

Apache Spark je klaster-računarski okvir otvorenog koda. Pruža elegantne razvojne API-je za Scalu, Javu, Python i R koji programerima omogućuju izvršavanje raznih podatkovno intenzivnih radnih opterećenja u različitim izvorima podataka, uključujući HDFS, Cassandra, HBase, S3 itd.

Povijesno se pokazalo da je Hadoopov MapReduce neučinkovit za neke iterativne i interaktivne računalne poslove, što je na kraju dovelo do razvoja Sparka. Sa Sparkom možemo pokretati logiku do dva reda veličine brže nego s Hadoop-om u memoriji ili jedan red veličine brže na disku.

2. Spark arhitektura

Spark aplikacije se izvode kao neovisni skupovi procesa na klasteru kako je opisano u donjem dijagramu:

Ovim skupom procesa koordinira SparkContext objekt u vašem glavnom programu (koji se naziva program vozača). SparkContext povezuje se s nekoliko vrsta upravitelja klastera (bilo Sparkov vlastiti samostalni upravitelj klastera, Mesos ili YARN), koji alociraju resurse između aplikacija.

Jednom spojen, Spark dobiva izvršitelje na čvorovima u klasteru, koji su procesi koji pokreću proračune i pohranjuju podatke za vašu aplikaciju.

Dalje, šalje vaš aplikacijski kôd (definiran JAR ili Python datotekama koje su proslijeđene u SparkContext) izvršiteljima. Konačno, SparkContext šalje zadatke izvršiteljima za pokretanje.

3. Osnovne komponente

Sljedeći dijagram daje jasnu sliku različitih komponenti Sparka:

3.1. Iskra jezgra

Komponenta Spark Core odgovorna je za sve osnovne I / O funkcionalnosti, raspoređivanje i nadgledanje poslova na klasterima iskri, dispečiranje zadataka, umrežavanje s različitim sustavima za pohranu, obnavljanje grešaka i učinkovito upravljanje memorijom.

Za razliku od Hadoop-a, Spark izbjegava pohranu zajedničkih podataka u posredničke trgovine poput Amazona S3 ili HDFS-a, koristeći posebnu strukturu podataka poznatu kao RDD (Resilient Distributed Datasets).

Otporni distribuirani skupovi podataka su nepromjenjivi, podijeljena zbirka zapisa koja se može paralelno upravljati i omogućuje izračune 'u memoriji' otporne na greške.

RDD podržavaju dvije vrste operacija:

  • Transformacija - Spark RDD transformacija je funkcija koja stvara nove RDD iz postojećih RDD-ova. Transformator uzima RDD kao ulaz i proizvodi jedan ili više RDD kao izlaz. Transformacije su lijene prirode, tj. Izvršavaju se kad pozovemo akciju
  • Akcijskitransformacije međusobno stvaraju RDD-ove, ali kada želimo raditi sa stvarnim skupom podataka, u tom se trenutku izvodi radnja. Tako, Akcije su Spark RDD operacije koje daju vrijednosti koje nisu RDD. Vrijednosti radnje pohranjuju se u upravljačke programe ili u vanjski sustav za pohranu

Akcija je jedan od načina slanja podataka od izvršitelja vozaču.

Izvršitelji su agenti koji su odgovorni za izvršavanje zadatka. Dok je pokretač JVM postupak koji koordinira radnike i izvršavanje zadatka. Neke akcije Sparka se broje i prikupljaju.

3.2. Spark SQL

Spark SQL je Spark modul za strukturiranu obradu podataka. Primarno se koristi za izvršavanje SQL upita. DataFrame predstavlja glavnu apstrakciju za Spark SQL. Distribuirano prikupljanje podataka poredanih u imenovane stupce poznato je kao DataFrame u Sparku.

Spark SQL podržava dohvaćanje podataka iz različitih izvora kao što su Hive, Avro, Parket, ORC, JSON i JDBC. Također se skalira na tisuće čvorova i višesatne upite pomoću Spark motora - koji pruža potpunu toleranciju kvarova srednjeg upita.

3.3. Iskreno strujanje

Spark Streaming je produžetak jezgre Spark API-ja koji omogućuje skalabilnu, visokopropusnu, otpornu obradu tokova podataka uživo. Podaci se mogu unijeti iz brojnih izvora, poput utičnica Kafka, Flume, Kinesis ili TCP.

Konačno, obrađeni podaci mogu se istisnuti u datotečni sustav, baze podataka i nadzorne ploče uživo.

3.4. Iskra Mlib

MLlib je Sparkova biblioteka strojnog učenja (ML). Cilj mu je učiniti praktično strojno učenje skalabilnim i lakim. Na visokoj razini pruža alate kao što su:

  • ML algoritmi - uobičajeni algoritmi učenja kao što su klasifikacija, regresija, grupiranje i suradničko filtriranje
  • Karakterizacija - ekstrakcija, transformacija, smanjenje dimenzija i odabir značajke
  • Cjevovodi - alati za konstrukciju, procjenu i podešavanje ML cjevovoda
  • Algoritmi, modeli i cjevovodi za uštedu i učitavanje
  • Uslužni programi - linearna algebra, statistika, rukovanje podacima itd.

3.5. Iskra GraphX

GraphX ​​je komponenta za grafove i grafički paralelne izračune. Na visokoj razini, GraphX ​​proširuje Spark RDD uvođenjem nove grafičke apstrakcije: usmjereni multigraf sa svojstvima pričvršćenim na svaki vrh i rub.

Da bi podržao izračunavanje grafova, GraphX ​​izlaže skup temeljnih operatora (npr. podgraf, joinVertices, i aggregateMessages).

Uz to, GraphX ​​uključuje sve veću kolekciju algoritama grafova i graditelja za pojednostavljivanje zadataka analitike grafova.

4. "Hello World" u Spark-u

Sad kad razumijemo ključne komponente, možemo prijeći na jednostavni projekt Spark zasnovan na Mavenu - za izračunavanje broja riječi.

Demonstrirat ćemo Spark koji se izvodi u lokalnom načinu rada gdje se sve komponente izvode lokalno na istom stroju gdje je glavni čvor, izvršni čvor ili Sparkov samostalni upravitelj klastera.

4.1. Postavljanje Mavena

Postavimo projekt Java Maven sa ovisnostima vezanim za Spark u pom.xml datoteka:

  org.apache.spark spark-core_2.10 1.6.0 

4.2. Broj riječi - Spark Job

Napišimo sada Spark posao za obradu datoteke koja sadrži rečenice i izlaženje različitih riječi i njihovog broja u datoteci:

public static void main (String [] args) baca iznimku {if (args.length <1) {System.err.println ("Usage: JavaWordCount"); System.exit (1); } SparkConf sparkConf = novi SparkConf (). SetAppName ("JavaWordCount"); JavaSparkContext ctx = novi JavaSparkContext (sparkConf); JavaRDD linije = ctx.textFile (argumenti [0], 1); Riječi JavaRDD = lines.flatMap (s -> Arrays.asList (SPACE.split (s)). Iterator ()); JavaPairRDD one = words.mapToPair (riječ -> novi Tuple2 (riječ, 1)); JavaPairRDD broji = one.reduceByKey ((Integer i1, Integer i2) -> i1 + i2); Popis izlaz = counts.collect (); za (Tuple2 tuple: output) {System.out.println (tuple._1 () + ":" + tuple._2 ()); } ctx.stop (); }

Primijetite da put lokalne tekstualne datoteke prosljeđujemo kao argument Spark poslu.

A SparkContext objekt je glavna ulazna točka za Spark i predstavlja vezu s već pokrenutim Spark klasterom. Koristi SparkConf objekt za opisivanje konfiguracije aplikacije. SparkContext koristi se za čitanje tekstualne datoteke u memoriji kao JavaRDD objekt.

Dalje, transformiramo linije JavaRDD prigovoriti riječima JavaRDD objekt pomoću plosnata karta metoda za prvo pretvaranje svakog retka u riječi odvojene razmakom, a zatim izravnavanje rezultata obrade svakog retka.

Opet primjenjujemo operaciju pretvorbe mapToPair koji u osnovi preslikava svaku pojavu riječi u skup riječi i broji 1.

Zatim primjenjujemo reduceByKey operacija grupiranja višestrukih pojavljivanja bilo koje riječi s brojem 1 u skup riječi i sažeti brojanje.

Na kraju izvršavamo collect RDD akcija za dobivanje konačnih rezultata.

4.3. Izvršenje - Spark Job

Izgradimo sada projekt pomoću Mavena za generiranje apache-spark-1.0-SNAPSHOT.jar u ciljnoj mapi.

Dalje, moramo poslati ovaj posao za WordCount Sparku:

$ {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

Instalacijski direktorij Spark i direktorij projekta WordCount Maven moraju se ažurirati prije pokretanja iznad naredbe.

Nakon predaje, nekoliko se koraka događa iza kulisa:

  1. Iz upravljačkog koda, SparkContext povezuje se s upraviteljem klastera (u našem slučaju pokreće lokalni samostalni upravitelj klastera)
  2. Upravitelj klastera raspoređuje resurse po ostalim aplikacijama
  3. Spark dobiva izvršitelje na čvorovima u klasteru. Ovdje će naša aplikacija za brojanje riječi dobiti vlastite izvršne procese
  4. Kôd aplikacije (jar datoteke) šalje se izvršiteljima
  5. Zadaće šalje SparkContext izvršiteljima.

Konačno, rezultat posla iskra vraća se upravljačkom programu i vidjet ćemo broj riječi u datoteci kao izlaz:

Pozdrav 1 od 2 Baledung 2 Nastavite 1 Učiti 1 Iskra 1 Doviđenja 1

5. Zaključak

U ovom smo članku razgovarali o arhitekturi i različitim komponentama Apache Sparka. Također smo demonstrirali radni primjer posla Spark koji broji riječi iz datoteke.

Kao i uvijek, puni izvorni kod dostupan je na GitHub-u.


$config[zx-auto] not found$config[zx-overlay] not found