Programovanie

Výukový program: Architektúra a zoskupenia aplikácií Spark

Získajte celú knihu
Data Analytics with Spark using Python (Addison-Wesley Data & Analytics Series) MSRP 44,99 dolárov Pozrieť

Tento článok je výňatkom z knihy Pearson Addison-Wesley „Data Analytics with Spark Using Python“ od Jeffreyho Avena. Vytlačené tu so súhlasom spoločnosti Pearson © 2018. Viac informácií nájdete na stránke informit.com/aven/infoworld.

Predtým, ako začnete svoju cestu programátora Apache Spark, mali by ste dôkladne porozumieť architektúre aplikácií Spark a spôsobu vykonávania aplikácií v klastri Spark. Tento článok podrobne skúma komponenty aplikácie Spark, skúma, ako tieto komponenty spolupracujú, a venuje sa tomu, ako fungujú aplikácie Spark na samostatných klastroch a YARN.

Anatómia aplikácie Spark

Aplikácia Spark obsahuje niekoľko komponentov, z ktorých všetky existujú, či už používate program Spark na jednom počítači alebo v zoskupení stoviek alebo tisícov uzlov.

Každý komponent má pri vykonávaní programu Spark špecifickú úlohu. Niektoré z týchto rolí, napríklad komponenty klienta, sú počas vykonávania pasívne; pri vykonávaní programu sú aktívne ďalšie role, vrátane komponentov vykonávajúcich výpočtové funkcie.

Komponenty aplikácie Spark sú:

  • vodič
  • majster
  • správca klastra
  • exekútori

Všetky bežia na pracovných uzloch, alias pracovníkoch.

Obrázok 1 zobrazuje všetky komponenty Spark v kontexte samostatnej aplikácie Spark.

Pearson Addison-Wesley

Všetky komponenty Spark - vrátane procesov ovládača, hlavného a vykonávacieho procesora - bežia na virtuálnych strojoch Java. JVM je multiplatformový runtime modul, ktorý môže vykonávať pokyny kompilované do bajtkódu Java. Scala, do ktorej je napísaný Spark, sa skompiluje do bytecode a beží na JVM.

Je dôležité rozlišovať medzi komponentami runtime aplikácie Spark a umiestneniami a typmi uzlov, na ktorých bežia. Tieto komponenty bežia na rôznych miestach s použitím rôznych režimov nasadenia, takže na tieto komponenty nemyslite z hľadiska fyzického uzla alebo inštancie. Napríklad pri spustení programu Spark na YARN by bolo na obrázku 1 niekoľko variácií. Všetky zobrazené komponenty sú však v aplikácii stále zapojené a majú rovnaké úlohy.

Vodič iskier

Životnosť aplikácie Spark sa začína a končí vodičom Spark. Ovládač je proces, ktorý klienti používajú na odosielanie aplikácií v aplikácii Spark. Vodič je tiež zodpovedný za plánovanie a koordináciu vykonávania programu Spark a za vrátenie stavu a / alebo výsledkov (údajov) klientovi. Vodič sa môže fyzicky nachádzať na klientovi alebo na uzle v klastri, ako uvidíte neskôr.

SparkSession

Ovládač Spark je zodpovedný za vytvorenie SparkSession. Objekt SparkSession predstavuje pripojenie k klastru Spark. Relácia SparkSession je vytvorená na začiatku aplikácie Spark vrátane interaktívnych škrupín a používa sa ako celok programu.

Pred programom Spark 2.0 boli vstupnými bodmi pre aplikácie Spark SparkContext, ktorý sa používa pre základné aplikácie Spark; SQLContext a HiveContext používané s aplikáciami Spark SQL; a StreamingContext používaný pre aplikácie Spark Streaming. Objekt SparkSession predstavený v Spark 2.0 kombinuje všetky tieto objekty do jedného vstupného bodu, ktorý je možné použiť pre všetky aplikácie Spark.

Prostredníctvom svojich podradených objektov SparkContext a SparkConf obsahuje objekt SparkSession všetky vlastnosti konfigurácie modulu runtime nastavené používateľom, vrátane vlastností konfigurácie, ako je hlavný server, názov aplikácie a počet vykonávateľov. Obrázok 2 zobrazuje objekt SparkSession a niektoré jeho konfiguračné vlastnosti v a pyspark škrupina.

Pearson Addison-Wesley

Názov SparkSession

Názov objektu pre inštanciu SparkSession je ľubovoľný. V predvolenom nastavení je inštancia SparkSession v interaktívnych škrupinách Spark pomenovaná iskra. Z dôvodu konzistencie vždy vytvoríte inštanciu SparkSession ako iskra; názov však závisí od rozhodnutia vývojára.

Nasledujúci kód ukazuje, ako vytvoriť SparkSession v neinteraktívnej aplikácii Spark, ako je napríklad program odoslaný pomocou iskra-podrobiť sa.

z pyspark.sql import SparkSession

iskra = SparkSession.builder \

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

.appName ("Moja aplikácia Spark") \

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

.getOrCreate ()

numlines = spark.sparkContext.textFile ("file: /// opt / spark / license") \

.count ()

print ("Celkový počet riadkov je" + str (číselné čiary))

Plánovanie aplikácie

Jednou z hlavných funkcií vodiča je plánovanie aplikácie. Ovládač prevezme vstup spracovania aplikácie a naplánuje vykonanie programu. Vodič vezme všetky požadované položky transformácie(operácie manipulácie s údajmi) a akcie (žiadosti o výstup alebo výzvy na vykonanie programov) a vytvorí usmernený acyklický graf (DAG) uzlov, z ktorých každý predstavuje transformačný alebo výpočtový krok.

Usmernený acyklický graf (DAG)

DAG je matematický konštrukt, ktorý sa v informatike bežne používa na reprezentáciu tokov údajov a ich závislostí. DAG obsahujú vrcholy (alebo uzly) a hrany. Vrcholy v kontexte toku údajov sú kroky v toku procesu. Hrany v DAG spájajú vrcholy navzájom v zameranej orientácii a takým spôsobom, že je nemožné mať kruhové odkazy.

Aplikácia Spark DAG sa skladá z úlohy a etapy. Úloha je najmenšia jednotka naplánovateľnej práce v programe Spark. Javisko je súbor úloh, ktoré je možné spustiť spoločne. Fázy sú navzájom závislé; inými slovami, existujú javiskové závislosti.

V zmysle plánovania procesu nie sú DAG pre Spark jedinečné. Napríklad sa používajú v iných projektoch ekosystémov veľkých dát, napríklad Tez, Drill a Presto na plánovanie. DAG sú pre Spark zásadné, preto stojí za to tento koncept poznať.

Orchestrácia aplikácie

Vodič tiež koordinuje priebeh etáp a úloh definovaných v DAG. Medzi kľúčové činnosti vodiča, ktoré sa podieľajú na plánovaní a vykonávaní úloh, patria:

  • Sledovanie dostupných zdrojov na vykonávanie úloh.
  • Ak je to možné, plánujte úlohy tak, aby „bežali“ čo najbližšie k údajom (koncept lokality s údajmi).

Ostatné funkcie

Okrem plánovania a organizovania vykonávania programu Spark je vodič zodpovedný aj za vrátenie výsledkov z aplikácie. Môžu to byť návratové kódy alebo údaje v prípade akcie, ktorá požaduje vrátenie údajov klientovi (napríklad interaktívny dotaz).

Ovládač tiež slúži používateľskému rozhraniu aplikácie na porte 4040, ako je to znázornené na obrázku 3. Toto používateľské rozhranie sa vytvára automaticky; je nezávislý od predloženého kódu alebo od toho, ako bol odoslaný (tj. interaktívne pomocou pysparkalebo neinteraktívne pomocou iskra-podrobiť sa).

Pearson Addison-Wesley

Ak sa následné aplikácie spustia na rovnakom hostiteľovi, pre používateľské rozhranie aplikácie sa použijú následné porty (napríklad 4041, 4042 atď.).

Pracovníci iskry a exekútori

Vykonávatelia programu Spark sú procesy, na ktorých bežia úlohy programu Spark DAG. vykonávatelia rezervujú prostriedky CPU a pamäte na podradených uzloch alebo pracovníkoch v klastri Spark. Exekútor je určený pre konkrétnu aplikáciu Spark a je ukončený po dokončení aplikácie. Program Spark sa zvyčajne skladá z mnohých vykonávateľov, ktorí často pracujú paralelne.

Pracovný uzol - ktorý hostí proces vykonávateľa - má zvyčajne konečný alebo pevný počet vykonávateľov pridelených v ľubovoľnom okamihu. Preto má klaster, ktorý je známym počtom uzlov, konečný počet exekútorov, ktoré sú k dispozícii na spustenie v ktoromkoľvek danom čase. Ak aplikácia vyžaduje, aby exekútori presahovali fyzickú kapacitu klastra, je naplánované ich spustenie, keď ostatní exekútori dokončia a uvoľnia svoje prostriedky.

Ako už bolo spomenuté skôr, JVM hostia vykonávateľov Sparku. JVM pre exekútora má pridelené a halda, čo je vyhradený pamäťový priestor, do ktorého sa dajú ukladať a spravovať objekty.

Množstvo pamäte vyhradenej pre haldu JVM pre exekútora je nastavené vlastnosťou iskra.exekútor.memory alebo ako --exekútor-pamäť argument k pyspark, iskraalebo iskra-podrobiť sa príkazy.

Exekútori ukladajú výstupné údaje z úloh do pamäte alebo na disk. Je dôležité poznamenať, že pracovníci a vykonávatelia sú si vedomí iba úloh, ktoré im boli pridelené, zatiaľ čo vodič je zodpovedný za pochopenie celého súboru úloh a príslušných závislostí, ktoré tvoria aplikáciu.

Použitím používateľského rozhrania aplikácie Spark na porte 404X hostiteľa ovládača môžete skontrolovať vykonávateľov aplikácie, ako je to znázornené na obrázku 4.

Pearson Addison-Wesley

Pre samostatné nasadenia klastra Spark vystavuje pracovný uzol používateľské rozhranie na porte 8081, ako je to znázornené na obrázku 5.

Pearson Addison-Wesley

Spark master a manažér klastrov

Ovládač Spark plánuje a koordinuje množinu úloh potrebných na spustenie aplikácie Spark. Samotné úlohy prebiehajú v exekútoroch, ktorí sú hostení v pracovných uzloch.

Hlavný server a správca klastra sú centrálnymi procesmi, ktoré monitorujú, rezervujú a prideľujú distribuované prostriedky klastra (alebo kontajnery, v prípade YARN alebo Mesos), na ktorých pracujú exekútori. Hlavný server a správca klastra môžu byť samostatné procesy alebo sa môžu spojiť do jedného procesu, ako je to v prípade spustenia programu Spark v samostatnom režime.

Majster iskry

Master Spark je proces, ktorý požaduje zdroje v klastri a sprístupňuje ich ovládaču Spark. Vo všetkých režimoch nasadenia hlavný server vyjednáva zdroje alebo kontajnery s pracovnými uzlami alebo podradenými uzlami a sleduje ich stav a monitoruje ich priebeh.

Keď je Spark spustený v samostatnom režime, hlavný proces Spark slúži webovému používateľskému rozhraniu na porte 8080 na hlavnom hostiteľovi, ako je to znázornené na obrázku 6.

Pearson Addison-Wesley

Spark master verzus Spark driver

Je dôležité rozlišovať runtime funkcie vodiča a hlavného vozidla. Názov pán možno odvodiť, že to znamená, že tento proces riadi výkon aplikácie - ale nie je to tak. Veliteľ jednoducho požiada o zdroje a tieto prostriedky dá k dispozícii vodičovi. Aj keď kapitán sleduje stav a zdravie týchto zdrojov, nepodieľa sa na vykonávaní aplikácie a na koordinácii jej úloh a etáp. To je práca vodiča.

Klastrový manažér

Správca klastrov je proces zodpovedný za monitorovanie pracovných uzlov a rezerváciu zdrojov v týchto uzloch na požiadanie hlavného servera. Hlavný potom tieto prostriedky klastra sprístupní vodičovi vo forme exekútorov.

Ako sme už uviedli, správcu klastrov je možné oddeliť od hlavného procesu. To je prípad spustenia programu Spark na platformách Mesos alebo YARN. V prípade, že Spark beží v samostatnom režime, hlavný proces vykonáva aj funkcie správcu klastrov. Účinne funguje ako vlastný manažér klastrov.

Dobrým príkladom funkcie správcu klastrov je proces YARN ResourceManager pre aplikácie Spark bežiace na klastroch Hadoop. ResourceManager plánuje, prideľuje a monitoruje stav kontajnerov bežiacich na YARN NodeManagers. Aplikácie Spark potom používajú tieto kontajnery na hosťovanie procesov vykonávateľov, ako aj hlavného procesu, ak je aplikácia spustená v režime clusteru.

Sparkujte aplikácie pomocou samostatného plánovača

V kapitole 2 „Nasadenie Sparku“ som vysvetlil samostatný plánovač ako možnosť nasadenia pre Spark. Tam som nasadil plne funkčný viacnásobný samostatný klaster Spark do jedného z cvičení v kapitole 2. Ako už bolo spomenuté vyššie, v klastri Spark bežiacom v samostatnom režime vykonáva hlavný proces Spark aj funkciu správcu klastra a riadi dostupné zdroje na klastra a pridelí ich hlavnému procesu na použitie v aplikácii Spark.

Sparkujte aplikácie bežiace na YARN

Hadoop je pre Spark veľmi populárna a bežná platforma nasadenia. Niektorí priemyselní experti veria, že Spark čoskoro nahradí MapReduce ako primárnu platformu pre spracovanie aplikácií v Hadoop. Aplikácie Spark na YARN zdieľajú rovnakú runtime architektúru, ale majú mierne rozdiely v implementácii.

ResourceManager ako správca klastra

Na rozdiel od samostatného plánovača je správcom klastra v klastri YARN YARN ResourceManager. ResourceManager monitoruje využitie a dostupnosť zdrojov vo všetkých uzloch v klastri. Klienti odosielajú aplikácie Spark do YARN ResourceManager. ResourceManager vyhradzuje pre aplikáciu prvý kontajner, špeciálny kontajner s názvom ApplicationMaster.

ApplicationMaster ako majster Spark

ApplicationMaster je hlavný proces Spark. Rovnako ako hlavný proces v iných nasadeniach klastrov, ApplicationMaster vyjednáva prostriedky medzi ovládačom aplikácie a správcom klastra (alebo v tomto prípade ResourceManager); potom sprístupní tieto prostriedky (kontajnery) vodičovi na použitie ako vykonávateľov na vykonávanie úloh a ukladanie údajov pre aplikáciu.

ApplicationMaster zostáva po celú dobu životnosti aplikácie.

Režimy nasadenia pre aplikácie Spark bežiace na YARN

Pri odosielaní aplikácií Spark do klastra YARN je možné použiť dva režimy nasadenia: režim klienta a režim klastra. Pozrime sa na ne teraz.

Klientský režim

V klientskom režime beží proces ovládača na klientovi, ktorý podáva žiadosť. Je to v podstate neriadené; ak hostiteľ ovládača zlyhá, aplikácia zlyhá. Režim klienta je podporovaný pre obe interaktívne relácie shellu (pyspark, iskraa tak ďalej) a neinteraktívne odosielanie aplikácií (iskra-podrobiť sa). Nasledujúci kód ukazuje, ako spustiť a pyspark relácia pomocou režimu nasadenia klienta.

$ SPARK_HOME / bin / pyspark \

- majster priadze-klient \

--počet exekútorov 1 \

- pamäť vodiča 512 m \

--exekútor-pamäť 512 m \

--exekútorské jadrá 1

# ALEBO

$ SPARK_HOME / bin / pyspark \

- majstrovská priadza \

- klient nasadenia v režime \

--počet exekútorov 1 \

- pamäť vodiča 512 m \

--exekútor-pamäť 512 m \

--exekútorské jadrá 1

Obrázok 7 poskytuje prehľad aplikácie Spark bežiacej na YARN v klientskom režime.

Pearson Addison-Wesley

Kroky zobrazené na obrázku 7 sú:

  1. Klient odošle aplikáciu Spark správcovi klastrov (YARN ResourceManager). Proces ovládača, SparkSession a SparkContext sa vytvorí a spustí na klientovi.
  2. ResourceManager priradí aplikácii ApplicationMaster (majster Spark).
  3. ApplicationMaster požaduje, aby kontajnery boli použité pre exekútorov z ResourceManagera. S pridelenými kontajnermi sa objavia exekútori.
  4. Vodič, ktorý sa nachádza na klientovi, potom komunikuje s exekútormi, aby vykonal maršalské spracovanie úloh a fáz programu Spark. Vodič vráti priebeh, výsledky a stav klientovi.

Režim nasadenia klienta je najjednoduchší režim, ktorý sa dá použiť. Chýba mu však odolnosť požadovaná pre väčšinu produkčných aplikácií.

Klastrový režim

Na rozdiel od režimu nasadenia klienta je pri aplikácii Spark spustenej v režime YARN Cluster samotný ovládač spustený v klastri ako podproces aplikácie ApplicationMaster. Toto poskytuje odolnosť: Ak proces ApplicationMaster, ktorý hosťuje ovládač, zlyhá, je možné ho znova vytvoriť na inom uzle v klastri.

Nasledujúci kód ukazuje, ako podať žiadosť pomocou iskra-podriadiť sa a režim nasadenia klastra YARN. Pretože ovládač je asynchrónny proces bežiaci v klastri, režim klastra nie je podporovaný pre interaktívne shell aplikácie (pyspark a iskra).

$ SPARK_HOME / bin / spark-submit \

- majster zoskupenia priadzí \

--počet exekútorov 1 \

- pamäť vodiča 512 m \

--exekútor-pamäť 512 m \

--exekútorské jadrá 1

$ SPARK_HOME / examples / src / main / python / pi.py 10 000

# ALEBO

- majstrovská priadza \

- cluster nasadenia \

--počet exekútorov 1 \

- pamäť vodiča 512 m \

--exekútor-pamäť 512 m \

--exekútorské jadrá 1

$ SPARK_HOME / examples / src / main / python / pi.py 10 000

Obrázok 8 poskytuje prehľad aplikácie Spark bežiacej na YARN v režime klastra.

Pearson Addison-Wesley

Kroky zobrazené na obrázku 8 sú:

  1. Klient, používateľský proces, ktorý vyvoláva iskra-podriadiť sa, odošle aplikáciu Spark správcovi klastrov (YARN ResourceManager).
  2. ResourceManager priradí aplikácii ApplicationMaster (majster Spark). Proces ovládača je vytvorený v rovnakom uzle klastra.
  3. Aplikácia ApplicationMaster požaduje kontajnery pre exekútorov z nástroja ResourceManager. vykonávatelia sa objavia v kontajneroch pridelených aplikácii ApplicationMaster ResourceManager. Vodič potom komunikuje s exekútormi, aby vykonal maršalské spracovanie úloh a fáz programu Spark.
  4. Ovládač bežiaci na uzle v klastri vracia klientovi priebeh, výsledky a stav.

Webové používateľské rozhranie aplikácie Spark, ako je uvedené vyššie, je k dispozícii od hostiteľa ApplicationMaster v klastri; odkaz na toto používateľské rozhranie je k dispozícii v používateľskom rozhraní YARN ResourceManager.

Miestny režim bol znovu navštívený

V lokálnom režime bežia vodič, hlavný aj exekútor v jednom JVM. Ako sme už uviedli v tejto kapitole, je to užitočné pre vývoj, testovanie jednotiek a ladenie, ale na spustenie produkčných aplikácií má obmedzené použitie, pretože nie je distribuované a nemá mierku. Ďalej sa zlyhané úlohy v aplikácii Spark spustenej v lokálnom režime predvolene nereštartujú. Toto správanie však môžete prepísať.

Keď je Spark spustený v lokálnom režime, používateľské rozhranie aplikácie je k dispozícii na // localhost: 4040. Hlavné a pracovné používateľské rozhrania nie sú k dispozícii, keď sú spustené v lokálnom režime.

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