Programmēšana

Apmācība: Spark lietojumprogrammu arhitektūra un kopas

Iegūstiet pilnu grāmatu
Datu analīze ar Spark, izmantojot Python (Addison-Wesley Data & Analytics Series) MSRP 44,99 ASV dolāri Skatīt

Šis raksts ir fragments no Džeimrija Avena Pīrsona Adisona-Veslija grāmatas “Datu analīze ar dzirksti, izmantojot Python”. Pārpublicēts šeit ar Pearson atļauju © 2018. Lai iegūtu papildinformāciju, apmeklējiet vietni informit.com/aven/infoworld.

Pirms sākat ceļojumu kā Apache Spark programmētājs, jums vajadzētu labi izprast Spark lietojumprogrammu arhitektūru un to, kā programmas tiek izpildītas Spark kopā. Šajā rakstā tiek rūpīgi apskatītas Spark lietojumprogrammas sastāvdaļas, apskatīts, kā šie komponenti darbojas kopā, un aplūkots, kā Spark lietojumprogrammas darbojas atsevišķās un YARN kopās.

Spark aplikācijas anatomija

Spark lietojumprogrammā ir vairāki komponenti, kas visi pastāv neatkarīgi no tā, vai Spark lietojat vienā mašīnā vai simtiem vai tūkstošiem mezglu kopas.

Katram komponentam ir īpaša loma Spark programmas izpildē. Dažas no šīm lomām, piemēram, klienta komponenti, izpildes laikā ir pasīvas; citas lomas ir aktīvas programmas izpildē, ieskaitot komponentus, kas izpilda skaitļošanas funkcijas.

Spark lietojumprogrammas sastāvdaļas ir:

  • šoferis
  • profesionālis
  • klastera vadītājs
  • izpildītāji

Viņi visi darbojas pa strādnieku mezgliem, jeb strādniekiem.

1. attēlā parādīti visi Spark komponenti Spark atsevišķās lietojumprogrammas kontekstā.

Pīrsons Adisons-Veslijs

Visi Spark komponenti, ieskaitot draivera, galvenā un izpildītāja procesus, darbojas Java virtuālajās mašīnās. JVM ir starpplatformu izpildlaika dzinējs, kas var izpildīt Java baitkodā apkopotās instrukcijas. Scala, kurā ir ierakstīts Spark, apkopo baitkodā un darbojas ar JVM.

Ir svarīgi nošķirt Spark izpildlaika lietojumprogrammu komponentus un atrašanās vietas un mezglu tipus, kuros tie darbojas. Šie komponenti darbojas dažādās vietās, izmantojot dažādus izvietošanas režīmus, tāpēc nedomājiet par šiem komponentiem fizisko mezglu vai gadījumu izteiksmē. Piemēram, palaižot Spark YARN, ir vairākas 1. attēla variācijas. Tomēr visi attēlā redzamie komponenti joprojām ir iesaistīti lietojumprogrammā un tiem ir vienādas lomas.

Dzirksteles vadītājs

Spark aplikācijas mūžs sākas un beidzas ar Spark draiveri. Draiveris ir process, kuru klienti izmanto, lai iesniegtu pieteikumus Spark. Vadītājs ir atbildīgs arī par programmas Spark izpildes plānošanu un koordinēšanu un statusa un / vai rezultātu (datu) atdošanu klientam. Vadītājs var fiziski uzturēties klientā vai klastera mezglā, kā jūs redzēsiet vēlāk.

SparkSession

Spark vadītājs ir atbildīgs par SparkSession izveidi. SparkSession objekts apzīmē savienojumu ar Spark kopu. SparkSession tiek instantizēts Spark lietojumprogrammas sākumā, ieskaitot interaktīvās čaulas, un to izmanto visai programmai.

Pirms Spark 2.0 Spark lietojumprogrammu ieejas punkti ietvēra SparkContext, ko izmantoja Spark pamata lietojumprogrammām; SQLContext un HiveContext, ko izmanto kopā ar Spark SQL lietojumprogrammām; un StreamingContext, ko izmanto Spark Streaming lietojumprogrammām. Spark 2.0 ieviestais SparkSession objekts visus šos objektus apvieno vienā ieejas punktā, kuru var izmantot visām Spark lietojumprogrammām.

Izmantojot savus SparkContext un SparkConf pakārtotos objektus, SparkSession objekts satur visas izpildlaika konfigurācijas īpašības, kuras iestatījis lietotājs, ieskaitot konfigurācijas rekvizītus, piemēram, galveno, lietojumprogrammas nosaukumu un izpildītāju skaitu. 2. attēlā parādīts objekts SparkSession un dažas tā konfigurācijas īpašības pyspark apvalks.

Pīrsons Adisons-Veslijs

SparkSession nosaukums

SparkSession instances objekta nosaukums ir patvaļīgs. Pēc noklusējuma SparkSession interakcija Spark interaktīvajās čaulās ir nosaukta dzirkstele. Lai nodrošinātu konsekvenci, jūs vienmēr veicat SparkSession kā dzirkstele; tomēr nosaukums ir izstrādātāja ziņā.

Tālāk redzamais kods parāda, kā izveidot SparkSession neinteraktīvā Spark lietojumprogrammā, piemēram, programmā, kas iesniegta, izmantojot dzirksti iesniegt.

no pyspark.sql importēšanas SparkSession

dzirkstele = SparkSession.builder \

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

.appName ("Mana dzirksteles lietojumprogramma") \

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

.getOrCreate ()

numlines = spark.sparkContext.textFile ("fails: /// opt / spark / licences") \

.skaits ()

drukāt ("Kopējais rindu skaits ir" + str (numlines))

Lietojumprogrammu plānošana

Viena no galvenajām vadītāja funkcijām ir plānot lietojumprogrammu. Vadītājs paņem lietojumprogrammas apstrādes ievadi un plāno programmas izpildi. Autovadītājs paņem visu pieprasīto pārvērtības(datu manipulācijas darbības) un darbības (pieprasa izvadi vai liek izpildīt programmas) un izveido virzītu aciklisko diagrammu (DAG) par mezgliem, no kuriem katrs apzīmē transformācijas vai skaitļošanas soli.

Virzīts acikliskais grafiks (DAG)

DAG ir matemātiska konstrukcija, ko parasti izmanto datorzinātnēs, lai attēlotu datu plūsmas un to atkarības. DAG satur virsotnes (vai mezglus) un malas. Virsotnes datu plūsmas kontekstā ir procesa plūsmas soļi. DAG malas savieno virsotnes viena ar otru vērstā virzienā un tādā veidā, ka nav iespējams iegūt apļveida atsauces.

Spark lietojumprogramma DAG sastāv no uzdevumi un posmos. Uzdevums ir mazākā plānotā darba vienība Spark programmā. Posms ir uzdevumu kopums, ko var izpildīt kopā. Posmi ir atkarīgi viens no otra; citiem vārdiem sakot, ir skatuves atkarības.

Procesu plānošanas ziņā DAG nav tikai Spark. Piemēram, tos izmanto citos lielo datu ekosistēmas projektos, piemēram, Tez, Drill un Presto plānošanai. DAG ir būtisks Spark, tāpēc ir vērts iepazīties ar šo koncepciju.

Lietojumprogrammu orķestrēšana

Vadītājs arī koordinē DAG noteikto posmu un uzdevumu izpildi. Galvenās vadītāju darbības, kas saistītas ar uzdevumu plānošanu un izpildi, ir šādas:

  • Uzskaite pieejamos resursus uzdevumu izpildei.
  • Plānojot uzdevumus, lai tie būtu “tuvu” datiem, ja iespējams (datu lokalizācijas jēdziens).

Citas funkcijas

Papildus Spark programmas izpildes plānošanai un vadīšanai vadītājs ir atbildīgs arī par rezultātu atdošanu no lietojumprogrammas. Tie var būt atgriešanās kodi vai dati darbības gadījumā, kas pieprasa datu atdošanu klientam (piemēram, interaktīvu vaicājumu).

Draiveris apkalpo arī lietojumprogrammas lietotāja interfeisu portā 4040, kā parādīts 3. attēlā. Šis lietotāja interfeiss tiek izveidots automātiski; tas ir neatkarīgs no iesniegtā koda vai tā iesniegšanas veida (tas ir, interaktīvas izmantošanas pysparkvai neinteraktīvs dzirksti iesniegt).

Pīrsons Adisons-Veslijs

Ja nākamās lietojumprogrammas tiek palaistas tajā pašā resursdatorā, lietojumprogrammas lietotāja saskarnē tiek izmantotas secīgas ostas (piemēram, 4041, 4042 utt.).

Dzirksteles darbinieki un izpildītāji

Spark izpildītāji ir procesi, kuros darbojas Spark DAG uzdevumi. izpildītāji rezervē CPU un atmiņas resursus vergu mezgliem vai darbiniekiem Spark kopā. Izpildītājs ir veltīts konkrētai Spark lietojumprogrammai un tiek pārtraukts, kad lietojumprogramma ir pabeigta. Spark programmu parasti veido daudzi izpildītāji, kas bieži strādā paralēli.

Parasti darba ņēmēja mezglā, kurā atrodas izpildītāja process, jebkurā laikā tiek piešķirts ierobežots vai noteikts izpildītāju skaits. Tāpēc kopai - kas ir zināms mezglu skaits - ir pieejams ierobežots izpildītāju skaits, kas darbojas jebkurā brīdī. Ja lietojumprogrammai ir nepieciešami izpildītāji, kas pārsniedz klastera fizisko ietilpību, tiek plānots, ka tie tiks sākti, kad citi izpildītāji pabeigs un atbrīvos savus resursus.

Kā minēts iepriekš, JVM uzņem Spark izpildītājus. Izpildītāja JVM tiek piešķirts a kaudze, kas ir veltīta atmiņas vieta objektu uzglabāšanai un pārvaldīšanai.

Atmiņas apjomu, kas JVM kaudzei piešķirts izpildītājam, nosaka īpašums dzirksts.izpildītājs.atmiņa vai kā - izpildītāja atmiņa arguments pyspark, dzirksteles apvalksvai dzirksti iesniegt komandas.

Izpildītāji saglabā uzdevumu izvades datus atmiņā vai diskā. Ir svarīgi atzīmēt, ka darbinieki un izpildītāji zina tikai par tiem piešķirtajiem uzdevumiem, savukārt vadītājs ir atbildīgs par visu uzdevumu komplekta un attiecīgo atkarību, kas ietver lietojumprogrammu, izpratni.

Izmantojot Spark lietojumprogrammas lietotāja interfeisu 404. portāx vadītāja resursdatora, varat pārbaudīt izpildītājus par lietojumprogrammu, kā parādīts 4. attēlā.

Pīrsons Adisons-Veslijs

Spark atsevišķās kopu izvietošanai darbinieka mezgls atklāj lietotāja saskarni portā 8081, kā parādīts 5. attēlā.

Pīrsons Adisons-Veslijs

Spark meistars un klastera vadītājs

Spark vadītājs plāno un koordinē uzdevumu kopumu, kas nepieciešams, lai palaistu Spark lietojumprogrammu. Paši uzdevumi tiek izpildīti izpildītājos, kuri tiek mitināti uz darbinieku mezgliem.

Galvenais un klastera pārvaldnieks ir centrālie procesi, kas uzrauga, rezervē un piešķir sadalītos klastera resursus (vai konteinerus, YARN vai Mesos gadījumā), uz kuriem izpildītāji darbojas. Galvenais un klastera pārvaldnieks var būt atsevišķi procesi, vai arī tie var apvienoties vienā procesā, kā tas ir gadījumā, ja Spark darbojas atsevišķā režīmā.

Dzirksteļu meistars

Spark master ir process, kas pieprasa resursus klasterī un padara tos pieejamus Spark draiverim. Visos izvietošanas režīmos galvenais pārrunā resursus vai konteinerus ar darba ņēmēju vai vergu mezgliem, izseko to statusu un uzrauga viņu progresu.

Palaižot Spark autonomā režīmā, Spark master process apkalpo tīmekļa lietotāja interfeisu 8080 portā galvenajā resursdatorā, kā parādīts 6. attēlā.

Pīrsons Adisons-Veslijs

Spark master pret Spark driver

Ir svarīgi atšķirt vadītāja un kapteiņa izpildlaika funkcijas. Vārds meistars var secināt, ka šis process regulē lietojumprogrammas izpildi, bet tas tā nav. Kapteinis vienkārši pieprasa resursus un padara šos resursus pieejamus vadītājam. Lai arī kapteinis uzrauga šo resursu stāvokli un veselību, tas nav iesaistīts pieteikuma izpildē un tā uzdevumu un posmu koordinēšanā. Tas ir šofera darbs.

Klastera vadītājs

Klastera pārvaldnieks ir process, kas atbild par darba ņēmēju mezglu uzraudzību un resursu rezervēšanu šajos mezglos pēc kapteiņa pieprasījuma. Pēc tam kapteinis padara šos kopas resursus vadītājam pieejamus izpildītāju veidā.

Kā minēts iepriekš, klastera pārvaldnieks var būt nošķirts no galvenā procesa. Tas notiek gadījumā, ja Spark darbojas Mesos vai YARN. Gadījumā, ja Spark darbojas atsevišķā režīmā, galvenais process veic arī klastera pārvaldnieka funkcijas. Faktiski tas darbojas kā savs kopu pārvaldnieks.

Labs klastera pārvaldnieka funkcijas piemērs ir YARN ResourceManager process Spark lietojumprogrammām, kas darbojas Hadoop kopās. ResourceManager ieplāno, piešķir un uzrauga konteineru stāvokli, kas darbojas ar YARN NodeManagers. Pēc tam Spark lietojumprogrammas izmanto šos konteinerus, lai mitinātu izpildītāja procesus, kā arī galveno procesu, ja lietojumprogramma darbojas klastermodā.

Spark lietojumprogrammas, izmantojot savrupo plānotāju

2. nodaļā “Spark izvietošana” es paskaidroju savrupo plānotāju kā Spark izvietošanas opciju. Vienā no 2. nodaļas vingrinājumiem es izvietoju pilnībā funkcionējošu daudzkodu Spark atsevišķo kopu. Kā jau minēts iepriekš, Spark kopā, kas darbojas atsevišķā režīmā, Spark master process veic arī klastera pārvaldnieka funkciju, pārvaldot pieejamos resursus kopu un piešķirot tās galvenajam procesam lietošanai Spark lietojumprogrammā.

Spark lietojumprogrammas, kas darbojas vietnē YARN

Hadoop ir ļoti populāra un izplatīta Spark izvietošanas platforma. Daži nozares speciālisti uzskata, ka Spark drīz aizstās MapReduce kā galveno apstrādes platformu lietojumprogrammām Hadoop. Spark lietojumprogrammām YARN ir vienāda izpildlaika arhitektūra, taču to ieviešanā ir nelielas atšķirības.

Resursu pārvaldnieks kā klastera pārvaldnieks

Atšķirībā no atsevišķā plānotāja, YARN klastera klastera pārvaldnieks ir YARN ResourceManager. ResourceManager uzrauga resursu izmantošanu un pieejamību visos klastera mezglos. Klienti iesniedz dzirksteles pieteikumus YARN ResourceManager. ResourceManager piešķir lietojumprogrammai pirmo konteineru, īpašu konteineru, ko sauc par ApplicationMaster.

ApplicationMaster kā Spark meistars

ApplicationMaster ir Spark pamatprocess. Kā galveno procesu veic citos klastera izvietojumos, ApplicationMaster veic sarunas par resursiem starp lietojumprogrammas draiveri un klastera pārvaldnieku (vai šajā gadījumā ResourceManager); pēc tam tas šos resursus (konteinerus) padara vadītājam pieejamus lietošanai kā izpildītājus uzdevumu izpildei un lietojumprogrammas datu glabāšanai.

ApplicationMaster paliek visu lietojuma laiku.

Izvietošanas režīmi Spark lietojumprogrammām, kas darbojas ar YARN

Iesniedzot Spark lietojumprogrammas YARN klasterī, var izmantot divus izvietošanas režīmus: klienta režīms un klastera režīms. Apskatīsim tos tagad.

Klienta režīms

Klienta režīmā draivera process darbojas klientam, kurš iesniedz pieteikumu. Būtībā tas netiek pārvaldīts; ja draivera resursdators neizdodas, programma neizdodas. Klienta režīms tiek atbalstīts abās interaktīvās čaulas sesijās (pyspark, dzirksteles apvalksun tā tālāk) un neinteraktīvu pieteikumu iesniegšanu (dzirksti iesniegt). Zemāk redzamais kods parāda, kā sākt a pyspark sesija, izmantojot klienta izvietošanas režīmu.

$ SPARK_HOME / bin / pyspark \

- galvenā dzija-klients \

--numādi izpildītāji 1 \

- draivera atmiņa 512 m \

- izpildītāja atmiņa 512 m \

- izpildītāja serdeņi 1

# VAI

$ SPARK_HOME / bin / pyspark \

- kapteiņa dzija \

--deploy-mode client \

--numizpildītāji 1 \

- draivera atmiņa 512 m \

- izpildītāja atmiņa 512 m \

- izpildītāja serdeņi 1

7. attēlā sniegts pārskats par Spark lietojumprogrammu, kas darbojas režīmā YARN klienta režīmā.

Pīrsons Adisons-Veslijs

7. attēlā norādītās darbības ir šādas:

  1. Klients klastera pārvaldniekam (YARN ResourceManager) iesniedz Spark lietojumprogrammu. Draivera process, SparkSession un SparkContext tiek izveidots un palaists klientā.
  2. ResourceManager piešķir lietojumprogrammai ApplicationMaster (Spark master).
  3. ApplicationMaster pieprasa konteinerus izmantot izpildītājiem no ResourceManager. Ar piešķirtajiem konteineriem izpildītāji nārsto.
  4. Vadītājs, kas atrodas klientā, sazinās ar izpildītājiem, lai veiktu uzdevumus un programmas Spark posmus. Vadītājs klientam atgriež progresu, rezultātus un statusu.

Klienta izvietošanas režīms ir vienkāršākais izmantojamais režīms. Tomēr tam trūkst elastības, kas nepieciešama lielākajai daļai ražošanas lietojumu.

Klastera režīms

Atšķirībā no klienta izvietošanas režīma, Spark lietojumprogrammai, kas darbojas YARN Cluster režīmā, pats draiveris darbojas uz klastera kā ApplicationMaster apakšprocess. Tas nodrošina elastīgumu: ja draivera mitināšanas process ApplicationMaster neizdodas, to var atkārtoti atjaunot citā klastera mezglā.

Zemāk redzamais kods parāda, kā iesniegt pieteikumu, izmantojot dzirksti iesniegt un YARN klastera izvietošanas režīms. Tā kā draiveris ir asinhronais process, kas darbojas klasterī, klastera režīms netiek atbalstīts interaktīvās čaulas lietojumprogrammās (pyspark un dzirksteles apvalks).

$ SPARK_HOME / bin / spark-submitted \

- kapteiņa dzijas kopa \

--numādi izpildītāji 1 \

- vadītāja atmiņa 512 m \

- izpildītāja atmiņa 512 m \

- izpildītāja serdeņi 1

$ SPARK_HOME / piemēri / src / main / python / pi.py 10000

# VAI

- kapteiņa dzija \

--deploy-mode cluster \

--numādi izpildītāji 1 \

- vadītāja atmiņa 512 m \

- izpildītāja atmiņa 512 m \

- izpildītāja serdeņi 1

$ SPARK_HOME / piemēri / src / main / python / pi.py 10000

8. attēlā sniegts pārskats par Spark lietojumprogrammu, kas darbojas YARN klastera režīmā.

Pīrsons Adisons-Veslijs

8. attēlā norādītās darbības ir šādas:

  1. Klients, lietotāja process, kas izsauc dzirksti iesniegt, iesniedz Spark lietojumprogrammu klastera pārvaldniekam (YARN ResourceManager).
  2. ResourceManager piešķir lietojumprogrammai ApplicationMaster (Spark master). Draivera process tiek izveidots tajā pašā klastera mezglā.
  3. ApplicationMaster pieprasa izpildītājiem konteinerus no ResourceManager. izpildītāji tiek nārstoti konteineros, kurus ResourceManager ir piešķīris ApplicationMaster. Pēc tam vadītājs sazinās ar izpildītājiem, lai veiktu uzdevumu un programmas Spark posmu apstrādi.
  4. Vadītājs, darbojoties klastera mezglā, klientam atgriež progresu, rezultātus un statusu.

Spark lietojumprogrammas tīmekļa lietotāja saskarne, kā parādīts iepriekš, ir pieejama no klastera resursdatora ApplicationMaster; saite uz šo lietotāja saskarni ir pieejama no YARN ResourceManager lietotāja saskarnes.

Pārskatīts lokālais režīms

Vietējā režīmā gan vadītājs, gan galvenais, gan izpildītājs darbojas vienā JVM. Kā minēts iepriekš šajā nodaļā, tas ir noderīgi izstrādei, vienību testēšanai un atkļūdošanai, taču ražošanas lietojumprogrammu darbināšanai to izmanto ierobežoti, jo tas netiek izplatīts un nav mērogojams. Turklāt neveiksmīgie uzdevumi Spark lietojumprogrammā, kas darbojas vietējā režīmā, pēc noklusējuma netiek atkārtoti veikti. Tomēr jūs varat ignorēt šo uzvedību.

Palaižot Spark vietējā režīmā, lietojumprogrammas lietotāja saskarne ir pieejama vietnē // localhost: 4040. Galvenais un strādājošais lietotāja interfeisi nav pieejami, darbojoties vietējā režīmā.