Programiranje

Vadnica: Arhitektura in grozdi aplikacij Spark

Pridobite celotno knjigo
Data Analytics z iskrico z uporabo Pythona (Addison-Wesley Data & Analytics Series) MSRP 44,99 $ Oglejte si

Ta članek je odlomek iz knjige Pearsona Addison-Wesleyja "Analiza podatkov s iskrico s pomočjo Pythona" Jeffreyja Avena. Ponatis tukaj z dovoljenjem podjetja Pearson © 2018. Za več informacij obiščite informit.com/aven/infoworld.

Preden začnete potovati kot programer Apache Spark, morate dobro razumeti arhitekturo aplikacij Spark in kako se aplikacije izvajajo v gruči Spark. Ta članek natančno preučuje komponente aplikacije Spark, preučuje, kako te komponente delujejo, in kako aplikacije Spark delujejo v samostojnih in YARN grozdih.

Anatomija aplikacije Spark

Aplikacija Spark vsebuje več komponent, ki obstajajo ne glede na to, ali uporabljate Spark na enem računalniku ali na gruči sto ali tisoč vozlišč.

Vsaka komponenta ima določeno vlogo pri izvajanju programa Spark. Nekatere od teh vlog, na primer odjemalske komponente, so med izvajanjem pasivne; druge vloge so aktivne pri izvajanju programa, vključno s komponentami, ki izvajajo računske funkcije.

Sestavni deli aplikacije Spark so:

  • voznik
  • mojster
  • upravitelja grozdov
  • izvršitelji

Vsi delujejo na vozliščih delavcev, ti delavci.

Slika 1 prikazuje vse komponente Spark v kontekstu samostojne aplikacije Spark.

Pearson Addison-Wesley

Vse komponente Spark - vključno z gonilniki, glavnim in izvršilnim procesom - se izvajajo v navideznih strojih Java. JVM je izvajalni mehanizem za več platform, ki lahko izvaja navodila, zbrana v bajtno kodo Java. Scala, v katero je zapisan Spark, se prevede v bajtno kodo in deluje na JVM-jih.

Pomembno je razlikovati med komponentami izvajalne aplikacije Spark ter lokacijami in vrstami vozlišč, na katerih delujejo. Te komponente se izvajajo na različnih mestih z različnimi načini uvajanja, zato ne razmišljajte o teh komponentah v fizičnem vozlišču ali primerku. Na primer, ko zaženete Spark na YARN, bi bilo na sliki 1 več različic. Vendar so vse prikazane komponente še vedno vključene v aplikacijo in imajo enake vloge.

Voznik iskre

Življenje aplikacije Spark se začne in konča z gonilnikom Spark. Gonilnik je postopek, ki ga stranke uporabljajo za oddajo vlog v programu Spark. Voznik je odgovoren tudi za načrtovanje in usklajevanje izvajanja programa Spark ter vračilo statusa in / ali rezultatov (podatkov) odjemalcu. Kot boste videli kasneje, lahko voznik fizično prebiva na odjemalcu ali vozlišču v gruči.

SparkSession

Gonilnik Spark je odgovoren za ustvarjanje SparkSession. Objekt SparkSession predstavlja povezavo z gručo Spark. SparkSession se ustvari na začetku aplikacije Spark, vključno z interaktivnimi lupinami, in se uporablja za celoten program.

Pred Sparkom 2.0 so vstopne točke za aplikacije Spark vključevale SparkContext, ki se uporablja za osnovne aplikacije Spark; SQLContext in HiveContext, ki se uporabljata z aplikacijami Spark SQL; in StreamingContext, ki se uporablja za aplikacije Spark Streaming. Objekt SparkSession, predstavljen v programu Spark 2.0, združuje vse te predmete v eno samo vstopno točko, ki se lahko uporablja za vse aplikacije Spark.

Objekt SparkSession prek svojih podrejenih objektov SparkContext in SparkConf vsebuje vse lastnosti konfiguracije med izvajanjem, ki jih je določil uporabnik, vključno s konfiguracijskimi lastnostmi, kot so glavni, ime aplikacije in število izvršiteljev. Slika 2 prikazuje objekt SparkSession in nekatere njegove konfiguracijske lastnosti v pyspark lupino.

Pearson Addison-Wesley

Ime SparkSession

Ime predmeta za primerek SparkSession je poljubno. Privzeto je imenovan primerek SparkSession v interaktivnih lupinah Spark iskra. Zaradi doslednosti vedno ustvarite primer SparkSession kot iskra; ime pa je po presoji razvijalca.

Spodnja koda prikazuje, kako ustvariti SparkSession v neinteraktivni aplikaciji Spark, kot je program, predložen z uporabo iskra-odda.

iz pyspark.sql uvozi SparkSession

spark = SparkSession.builder \

.master ("iskra: // sparkmaster: 7077") \

.appName ("Moja aplikacija Spark") \

.config ("spark.submit.deployMode", "odjemalec") \

.getOrCreate ()

numlines = spark.sparkContext.textFile ("datoteka: /// opt / spark / licence") \

.count ()

print ("Skupno število vrstic je" + str (številske vrstice))

Načrtovanje prijav

Ena glavnih funkcij gonilnika je načrtovanje aplikacije. Gonilnik sprejme vhod za obdelavo aplikacije in načrtuje izvajanje programa. Voznik vzame vse zahtevane preobrazbe(operacije manipulacije s podatki) in dejanja (zahteva za izhod ali pozive za izvajanje programov) in ustvari usmerjeni aciklični graf (DAG) vozlišč, od katerih vsako predstavlja transformacijski ali računski korak.

Usmerjeni aciklični graf (DAG)

DAG je matematični konstrukt, ki se v računalništvu pogosto uporablja za predstavitev podatkovnih tokov in njihovih odvisnosti. DAG vsebujejo oglišča (ali vozlišča) in robove. Točke v kontekstu pretoka podatkov so koraki v toku procesa. Robovi v DAG-u povezujejo točke med seboj usmerjeno in tako, da je nemogoče imeti krožne reference.

Aplikacija Spark DAG je sestavljena iz naloge in obdobja. Naloga je najmanjša enota dela, ki ga je mogoče načrtovati v programu Spark. Oder je skupek nalog, ki jih je mogoče izvajati skupaj. Odri so odvisni drug od drugega; z drugimi besedami, obstajajo odrske odvisnosti.

V smislu razporejanja procesov DAG-ji niso edinstveni za Spark. Na primer, uporabljajo jih v drugih projektih ekosistemov za velike podatke, kot so Tez, Drill in Presto za razporejanje. DAG-i so bistveni za Spark, zato je vredno poznati koncept.

Orkestracija aplikacije

Voznik tudi usklajuje izvajanje etap in nalog, opredeljenih v DAG. Ključne dejavnosti voznika, vključene v razporejanje in izvajanje nalog, vključujejo naslednje:

  • Spremljanje razpoložljivih virov za izvajanje nalog.
  • Načrtovanje načrtovanja nalog za izvajanje "blizu" podatkov, kjer je to mogoče (koncept lokacije podatkov).

Druge funkcije

Poleg načrtovanja in urejanja izvajanja programa Spark je voznik odgovoren tudi za vrnitev rezultatov iz aplikacije. To so lahko povratne kode ali podatki v primeru dejanja, ki zahteva, da se podatki vrnejo odjemalcu (na primer interaktivna poizvedba).

Gonilnik streže tudi uporabniški vmesnik aplikacije na vratih 4040, kot je prikazano na sliki 3. Ta uporabniški vmesnik se ustvari samodejno; je neodvisen od predložene kode ali načina, kako je bil oddan (torej interaktivne uporabe pysparkali neinteraktivna uporaba iskra-odda).

Pearson Addison-Wesley

Če se naslednje aplikacije zaženejo na istem gostitelju, se za uporabniški vmesnik aplikacije uporabljajo zaporedna vrata (na primer 4041, 4042 itd.).

Spark delavci in izvršitelji

Izvršitelji Spark so procesi, v katerih se izvajajo naloge Spark DAG. izvršitelji rezervirajo CPU in pomnilniške vire na podrejenih vozliščih ali delavcih v gruči Spark. Izvršitelj je namenjen določeni aplikaciji Spark in se zaključi, ko se aplikacija zaključi. Program Spark običajno sestavlja veliko izvajalcev, ki pogosto delajo vzporedno.

Običajno ima delovno vozlišče, ki gosti proces izvršitve, v vsakem trenutku dodeljeno končno ali določeno število izvršiteljev. Zato ima grozd - ki je znano število vozlišč - na voljo končno število izvršiteljev, ki jih je mogoče kadar koli zagnati. Če aplikacija zahteva, da izvršitelji presegajo fizično zmogljivost grozda, naj bi se začeli, ko drugi izvršitelji dokončajo in sprostijo svoje vire.

Kot smo že omenili, JVM gosti izvršitelje Spark. JVM za izvršitelja je dodeljen a kup, ki je namenski pomnilniški prostor za shranjevanje in upravljanje predmetov.

Količina pomnilnika, ki je za izvršitelja dodeljena kopici JVM, nastavi lastnost iskra.izvajalec.memorij ali kot - izvršitelj-pomnilnik argument za pyspark, iskra-lupina, ali iskra-odda ukazi.

Izvajalci shranjujejo izhodne podatke iz nalog v pomnilniku ali na disku. Pomembno je omeniti, da se delavci in izvršitelji zavedajo le nalog, ki so jim dodeljene, medtem ko je voznik odgovoren za razumevanje celotnega sklopa nalog in ustreznih odvisnosti, ki jih sestavlja aplikacija.

Z uporabo uporabniškega vmesnika aplikacije Spark na vratih 404x gonilnika gonilnika lahko pregledate izvršitelje za aplikacijo, kot je prikazano na sliki 4.

Pearson Addison-Wesley

Za samostojne razmestitve gruče Spark delovno vozlišče izpostavi uporabniški vmesnik na vratih 8081, kot je prikazano na sliki 5.

Pearson Addison-Wesley

Mojster in upravitelj grozdov Spark

Gonilnik Spark načrtuje in usklajuje nabor nalog, potrebnih za zagon aplikacije Spark. Naloge se same izvajajo v izvršilnikih, ki so gosti na vozliščih delavcev.

Glavni in upravitelj gruče sta osrednja procesa, ki nadzorujeta, rezervirata in dodeljujeta porazdeljene vire gruče (ali vsebnike v primeru YARN ali Mesos), na katerih se izvajajo izvršilci. Glavni in upravitelj gruče sta lahko ločena procesa ali pa se lahko združita v en postopek, kot je to pri zagonu Sparka v samostojnem načinu.

Mojster isker

Glavni mojster Spark je postopek, ki zahteva vire v gruči in jih da na voljo gonilniku Spark. V vseh načinih uvajanja se poveljnik dogovarja o virih ali vsebnikih z delovnimi vozlišči ali podrejenimi vozlišči, spremlja njihovo stanje in spremlja njihov napredek.

Ko zaženete Spark v samostojnem načinu, glavni postopek Spark postreže s spletnim uporabniškim vmesnikom na vratih 8080 na glavnem gostitelju, kot je prikazano na sliki 6.

Pearson Addison-Wesley

Spark master v primerjavi z gonilnikom Spark

Pomembno je razlikovati med izvajanjem funkcije voznika in glavne enote. Ime mojster lahko sklepamo, da ta postopek ureja izvajanje aplikacije - vendar to ni tako. Poveljnik preprosto zahteva vire in jih da na voljo vozniku. Čeprav poveljnik nadzoruje stanje in stanje teh virov, ni vključen v izvajanje aplikacije in usklajevanje njenih nalog in stopenj. To je naloga voznika.

Upravitelj grozdov

Upravitelj gruč je postopek, ki je na zahtevo poveljnika odgovoren za spremljanje delovnih vozlišč in rezerviranje virov v teh vozliščih. Nato poveljnik da te vire grozda gonilniku na voljo v obliki izvršiteljev.

Kot smo že omenili, je upravitelj gruč lahko ločen od glavnega postopka. To velja za primer, ko zaženete Spark na Mesosu ali YARN. V primeru, da se Spark izvaja v samostojnem načinu, glavni postopek opravlja tudi funkcije upravitelja gruče. Učinkovito deluje kot lastni upravitelj grozdov.

Dober primer funkcije upravitelja gruč je postopek YARN ResourceManager za aplikacije Spark, ki se izvajajo v gručah Hadoop. ResourceManager razporeja, dodeljuje in nadzira zdravje vsebnikov, ki se izvajajo v YARN NodeManagers. Aplikacije Spark nato uporabljajo te vsebnike za gostovanje procesov izvrševanja in glavni postopek, če se aplikacija izvaja v načinu grozda.

Spark aplikacije s samostojnim načrtovalnikom

V 2. poglavju, »Uvajanje Spark«, sem samostojni razporejevalnik razložil kot možnost uvajanja za Spark. Tam sem v eno od vaj v poglavju 2 razporedil popolnoma funkcionalno večvladno samostojno gručo Spark. Kot smo že omenili, v gruči Spark, ki deluje v samostojnem načinu, glavni postopek Spark izvaja tudi funkcijo upravitelja grozdov in ureja razpoložljive vire na grozd in jih dodeli glavnemu postopku za uporabo v aplikaciji Spark.

Aplikacije Spark, ki se izvajajo na YARN

Hadoop je zelo priljubljena in pogosta platforma za uvajanje za Spark. Nekateri strokovnjaki iz industrije menijo, da bo Spark kmalu izpodrinil MapReduce kot primarno platformo za obdelavo aplikacij v Hadoopu. Aplikacije Spark na YARN imajo enako izvajalno arhitekturo, vendar imajo nekaj majhnih razlik v izvedbi.

ResourceManager kot upravitelj gruč

V nasprotju s samostojnim razporejevalnikom je upravitelj gruč v gruči YARN upravitelj virov YARN. ResourceManager spremlja uporabo in razpoložljivost virov v vseh vozliščih v gruči. Naročniki oddajo prijave Spark upravitelju YARN ResourceManager. ResourceManager dodeli prvi vsebnik za aplikacijo, poseben vsebnik, imenovan ApplicationMaster.

ApplicationMaster kot mojster Spark

ApplicationMaster je glavni postopek Spark. Tako kot glavni postopek v drugih postavitvah grozda, se ApplicationMaster dogovarja o virih med gonilnikom aplikacije in upraviteljem grozda (ali v tem primeru ResourceManager); Nato te vire (vsebnike) da na voljo gonilniku za uporabo kot izvršitelje za izvajanje nalog in shranjevanje podatkov za aplikacijo.

ApplicationMaster ostane do konca aplikacije.

Načini uvajanja za aplikacije Spark, ki se izvajajo na YARN

Pri oddaji aplikacij Spark v gručo YARN lahko uporabite dva načina uvajanja: odjemalski in grozdni način. Poglejmo jih zdaj.

Način odjemalca

V odjemalskem načinu se postopek gonilnika zažene na odjemalcu, ki odda prijavo. V bistvu ni voden; če gonilnik gonilnika ne uspe, aplikacija odpove. Način odjemalca je podprt za obe interaktivni seji lupine (pyspark, iskra-lupinain tako naprej) in neinteraktivno oddajo prijav (iskra-odda). Spodnja koda prikazuje, kako zagnati a pyspark sejo z odjemalskim načinom uvajanja.

$ SPARK_HOME / bin / pyspark \

--master preja-odjemalec \

--num-izvršitelji 1 \

--driver-pomnilnik 512m \

--executor-pomnilnik 512m \

- izvršilna jedra 1

# ALI

$ SPARK_HOME / bin / pyspark \

--master preja \

--deploy-mode odjemalec \

--num-izvršitelji 1 \

--driver-pomnilnik 512m \

--executor-pomnilnik 512m \

- izvršilna jedra 1

Na sliki 7 je prikazan program Spark, ki deluje na YARN v odjemalskem načinu.

Pearson Addison-Wesley

Koraki, prikazani na sliki 7, so:

  1. Naročnik predloži aplikacijo Spark upravitelju gruče (YARN ResourceManager). Proces gonilnikov, SparkSession in SparkContext se ustvari in izvaja na odjemalcu.
  2. ResourceManager za aplikacijo dodeli ApplicationMaster (master Spark).
  3. ApplicationMaster zahteva, da se vsebniki uporabljajo za izvršitelje iz ResourceManagerja. Z dodeljenimi zabojniki se izvršitelji drstijo.
  4. Voznik, ki se nahaja na odjemalcu, nato z izvršitelji komunicira za maršalsko obdelavo nalog in faz programa Spark. Gonilnik stranki vrne napredek, rezultate in stanje.

Način uvajanja odjemalca je najpreprostejši način za uporabo. Vendar mu manjka odpornost, potrebna za večino proizvodnih aplikacij.

Način grozdov

V nasprotju z odjemalskim načinom uvajanja se z aplikacijo Spark, ki se izvaja v načinu grozda YARN, voznik sam zažene na gruči kot podproces ApplicationMaster. To zagotavlja odpornost: če postopek ApplicationMaster, ki gosti gonilnik, ne uspe, ga lahko znova ustvarite na drugem vozlišču v gruči.

Spodnja koda prikazuje, kako oddati prijavo z uporabo iskra-odda in način uvajanja grozda YARN. Ker je gonilnik asinhroni proces, ki se izvaja v gruči, način gruče ni podprt za aplikacije interaktivne lupine (pyspark in iskrica).

$ SPARK_HOME / bin / spark-submit \

--master preja-grozd \

--num-izvršitelji 1 \

--driver-pomnilnik 512m \

--executor-pomnilnik 512m \

- izvršilna jedra 1

$ SPARK_HOME / examples / src / main / python / pi.py 10000

# ALI

--master preja \

--deploy-mode gruča \

--num-izvršitelji 1 \

--driver-pomnilnik 512m \

--executor-pomnilnik 512m \

- izvršilna jedra 1

$ SPARK_HOME / examples / src / main / python / pi.py 10000

Na sliki 8 je prikazan program Spark, ki deluje na YARN v načinu gruče.

Pearson Addison-Wesley

Koraki, prikazani na sliki 8, so:

  1. Odjemalec, uporabniški proces, ki prikliče iskra-odda, odda aplikacijo Spark upravitelju grozdov (YARN ResourceManager).
  2. ResourceManager za aplikacijo dodeli ApplicationMaster (master Spark). Proces gonilnika se ustvari na istem vozlišču gruče.
  3. ApplicationMaster od ResourceManagerja zahteva vsebnike za izvršitelje. izvršitelji se ustvarijo v vsebnikih, ki jih ResourceManager dodeli ApplicationMasterju. Nato voznik komunicira z izvršitelji za maršalsko obdelavo nalog in faz programa Spark.
  4. Gonilnik, ki se izvaja na vozlišču v gruči, odjemalcu vrne napredek, rezultate in stanje.

Spletni uporabniški vmesnik aplikacije Spark je, kot je prikazano prej, na voljo pri gostitelju ApplicationMaster v gruči; povezava do tega uporabniškega vmesnika je na voljo v uporabniškem vmesniku YARN ResourceManager.

Ponovno obiskan lokalni način

V lokalnem načinu vsi voznik, glavni in izvršitelj delujejo v enem samem JVM. Kot smo že omenili v tem poglavju, je to koristno za razvoj, preskušanje enote in odpravljanje napak, vendar ima omejeno uporabo za zagon produkcijskih aplikacij, ker ni razdeljeno in ne obsega. Poleg tega neuspešna opravila v aplikaciji Spark, ki se izvajajo v lokalnem načinu, po privzetku niso ponovno izvedena. Lahko pa to vedenje preglasite.

Ko zaženete Spark v lokalnem načinu, je uporabniški vmesnik aplikacije na voljo na // localhost: 4040. Glavni vmesniki in uporabniški vmesniki niso na voljo, ko se izvajajo v lokalnem načinu.

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