Programavimas

Pamoka: „Spark“ programų architektūra ir grupės

Gaukite visą knygą
Duomenų analizė naudojant „Spark“ naudojant „Python“ („Addison-Wesley Data & Analytics“ serija) MSRP 44,99 USD Žr.

Šis straipsnis yra Jeffrey Aveno ištrauka iš Pearson Addison-Wesley knygos „Duomenų analizė naudojant kibirkštį naudojant Python“. Čia perspausdinta su „Pearson“ leidimu © 2018. Norėdami gauti daugiau informacijos, apsilankykite adresu informit.com/aven/infoworld.

Prieš pradėdami „Apache Spark“ programuotojo kelionę, turėtumėte gerai suprasti „Spark“ programų architektūrą ir tai, kaip programos vykdomos „Spark“ klasteryje. Šiame straipsnyje atidžiai nagrinėjami „Spark“ programos komponentai, nagrinėjama, kaip šie komponentai veikia kartu, ir tai, kaip „Spark“ programos veikia atskirose ir YARN grupėse.

„Spark“ programos anatomija

„Spark“ programoje yra keli komponentai, kurie visi egzistuoja, nesvarbu, ar „Spark“ naudojate vienoje mašinoje, ar šimtų ar tūkstančių mazgų grupėje.

Kiekvienas komponentas turi tam tikrą vaidmenį vykdant „Spark“ programą. Kai kurie iš šių vaidmenų, pavyzdžiui, kliento komponentai, vykdymo metu yra pasyvūs; kiti vaidmenys yra aktyvūs vykdant programą, įskaitant komponentus, vykdančius skaičiavimo funkcijas.

„Spark“ programos komponentai yra šie:

  • vairuotojas
  • Meistras
  • klasterio valdytojas
  • vykdytojai

Jie visi bėga darbininkų mazgais, dar žinomais darbuotojais.

1 paveiksle pavaizduoti visi „Spark“ komponentai atskiros „Spark“ programos kontekste.

Pearson Addison-Wesley

Visi „Spark“ komponentai, įskaitant tvarkyklės, pagrindinio ir vykdytojo procesus, veikia „Java“ virtualiose mašinose. JVM yra kelių platformų vykdymo variklis, galintis vykdyti instrukcijas, sukompiliuotas į „Java“ baitkodą. „Scala“, kurioje parašyta „Spark“, kaupia baitų kodą ir veikia su JVM.

Svarbu atskirti „Spark“ vykdymo programos komponentus ir vietas bei mazgų tipus, kuriais jie veikia. Šie komponentai veikia skirtingose ​​vietose naudojant skirtingus diegimo režimus, todėl negalvokite apie šiuos komponentus fizinio mazgo ar egzempliorių terminais. Pavyzdžiui, vykdant „Spark“ naudojant YARN, būtų keletas 1 paveikslo variantų. Tačiau visi pavaizduoti komponentai vis dar yra susiję su programa ir turi tuos pačius vaidmenis.

Kibirkšties vairuotojas

„Spark“ programos gyvenimas prasideda ir baigiasi su „Spark“ tvarkykle. Tvarkyklė yra procesas, kurį klientai naudoja teikdami paraiškas „Spark“. Vairuotojas taip pat yra atsakingas už programos „Spark“ vykdymo planavimą ir koordinavimą bei būsenos ir (arba) rezultatų (duomenų) grąžinimą klientui. Vairuotojas gali fiziškai apsistoti kliente arba klasterio mazge, kaip pamatysite vėliau.

„SparkSession“

„Spark“ tvarkyklė yra atsakinga už „SparkSession“ sukūrimą. „SparkSession“ objektas reiškia ryšį su „Spark“ grupe. „SparkSession“ yra supaprastinta „Spark“ programos pradžioje, įskaitant interaktyvius apvalkalus, ir naudojama visai programai.

Prieš „Spark 2.0“ įvedimo į „Spark“ programas buvo įtraukta „SparkContext“, naudojama „Spark“ pagrindinėms programoms; SQLContext ir HiveContext, naudojami kartu su „Spark“ SQL programomis; ir „StreamingContext“, naudojamą „Spark Streaming“ programoms. „Spark 2.0“ pristatytas „SparkSession“ objektas sujungia visus šiuos objektus į vieną įvesties tašką, kurį galima naudoti visoms „Spark“ programoms.

Per savo „SparkContext“ ir „SparkConf“ antrinius objektus „SparkSession“ objekte yra visos vartotojo nustatytos vykdymo laiko konfigūracijos ypatybės, įskaitant konfigūravimo ypatybes, tokias kaip pagrindinis, programos pavadinimas ir vykdytojų skaičius. 2 paveiksle parodytas „SparkSession“ objektas ir kai kurios jo konfigūravimo ypatybės pyspark apvalkalas.

Pearson Addison-Wesley

„SparkSession“ pavadinimas

„SparkSession“ egzemplioriaus objekto pavadinimas yra savavališkas. Pagal numatytuosius nustatymus „SparkSession“ interaktyvumas interaktyviuose „Spark“ korpusuose yra pavadintas kibirkštis. Siekdami nuoseklumo, jūs visada iš karto inicijuojate „SparkSession“ kibirkštis; tačiau vardas priklauso kūrėjui savo nuožiūra.

Žemiau pateiktas kodas parodo, kaip sukurti „SparkSession“ neinteraktyvioje „Spark“ programoje, pavyzdžiui, naudojant programą kibirkštis pateikti.

iš pyspark.sql importuokite „SparkSession“

kibirkštis = „SparkSession.builder“ \

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

.appName („My Spark Application“) \

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

.getOrCreate ()

numlines = spark.sparkContext.textFile ("failas: /// opt / spark / licenzijos") \

.count ()

spausdinti ("Bendras eilučių skaičius yra" + eilutė (skaičių eilutės))

Programos planavimas

Viena iš pagrindinių vairuotojo funkcijų yra programos planavimas. Tvarkyklė paima paraiškos apdorojimo įvestį ir planuoja programos vykdymą. Vairuotojas paima visus prašomus transformacijos(manipuliavimo duomenimis operacijos) ir veiksmai (išvesties užklausos arba raginimas vykdyti programas) ir sukuria nukreiptą mazgų aciklinį grafiką (DAG), kiekvienas iš jų reiškia transformacijos ar skaičiavimo žingsnį.

Nukreiptasis aciklinis grafikas (DAG)

DAG yra matematinis darinys, paprastai naudojamas informatikoje duomenų srautams ir jų priklausomybėms atspindėti. DAG yra viršūnės (arba mazgai) ir kraštai. Duomenų srauto kontekste esančios vertikalės yra proceso srauto žingsniai. DAG briaunos sujungia viršūnes viena su kita nukreipta kryptimi ir taip, kad neįmanoma turėti žiedinių nuorodų.

„Spark“ programą DAG sudaro užduotys ir etapai. Užduotis yra mažiausias planuojamo darbo vienetas „Spark“ programoje. Scena yra užduočių rinkinys, kurį galima atlikti kartu. Etapai priklauso vienas nuo kito; kitaip tariant, yra etapo priklausomybės.

Procesų planavimo prasme DAG nėra būdingi tik „Spark“. Pavyzdžiui, jie naudojami kituose didžiųjų duomenų ekosistemos projektuose, tokiuose kaip „Tez“, „Drill“ ir „Presto“ planuojant. DAG yra esminis „Spark“ dalykas, todėl verta susipažinti su šia koncepcija.

Programos orkestravimas

Vairuotojas taip pat koordinuoja DAG apibrėžtų etapų ir užduočių vykdymą. Pagrindinės vairuotojo veiklos, susijusios su užduočių planavimu ir vykdymu, yra šios:

  • Stebėkite turimus išteklius užduotims atlikti.
  • Planuoti užduotis, kad jos būtų „arti“ duomenų, jei įmanoma (duomenų lokalumo samprata).

Kitos funkcijos

Be to, kad planuoja ir organizuoja „Spark“ programos vykdymą, vairuotojas taip pat yra atsakingas už programos rezultatų grąžinimą. Tai gali būti grąžinimo kodai arba duomenys, jei atliekamas veiksmas, kuriuo prašoma grąžinti duomenis klientui (pavyzdžiui, interaktyvi užklausa).

Tvarkyklė taip pat aptarnauja 4040 prievado programos vartotojo sąsają, kaip parodyta 3 paveiksle. Ši vartotojo sąsaja sukuriama automatiškai; jis nepriklauso nuo pateikto kodo ar kaip jis buvo pateiktas (ty interaktyvus naudojant pysparkarba neinteraktyvus kibirkštis pateikti).

Pearson Addison-Wesley

Jei vėlesnės programos paleidžiamos tame pačiame pagrindiniame kompiuteryje, programos vartotojo sąsajoje naudojami nuoseklūs prievadai (pavyzdžiui, 4041, 4042 ir pan.).

Kibirkščių darbuotojai ir vykdytojai

„Spark“ vykdytojai yra procesai, kuriuose vykdomos „Spark DAG“ užduotys. vykdytojai rezervuoja procesoriaus ir atminties išteklius vergų mazgams arba darbuotojams „Spark“ klasteryje. Vykdytojas yra skirtas konkrečiai „Spark“ programai ir nutraukiamas, kai programa baigiama. „Spark“ programą paprastai sudaro daugybė vykdytojų, kurie dažnai dirba lygiagrečiai.

Paprastai darbuotojo mazge, kuris talpina vykdytojo procesą, yra ribotas arba fiksuotas vykdytojų skaičius, paskirstytas bet kuriuo laiko momentu. Todėl klasteris - tai žinomas mazgų skaičius - turi ribotą vykdytojų skaičių, kurį galima paleisti bet kuriuo metu. Jei programai reikalingi vykdytojai, viršijantys fizinį klasterio pajėgumą, planuojama, kad jie bus pradėti, kai kiti vykdytojai užbaigs ir išleis savo išteklius.

Kaip minėta anksčiau, JVM priima „Spark“ vykdytojus. Vykdytojui JVM skiriama a krūva, kuri yra skirta atminties vieta objektams laikyti ir valdyti.

Vykdytojui JVM kaupui skirtą atminties kiekį nustato nuosavybė kibirkštis. vykdytojas. atmintis arba kaip - vykdytojas-atmintis argumentas pyspark, kibirkštisarba kibirkštis pateikti komandos.

Vykdytojai išvesties duomenis iš užduočių saugo atmintyje arba diske. Svarbu pažymėti, kad darbuotojai ir vykdytojai žino tik apie jiems paskirtas užduotis, o vairuotojas yra atsakingas už viso užduočių rinkinio ir atitinkamų priklausomybių, kurias sudaro programa, supratimą.

Naudojant „Spark“ programos vartotojo sąsają 404 prievadex vairuotojo pagrindinio kompiuterio, galite patikrinti vykdytojus dėl programos, kaip parodyta 4 paveiksle.

Pearson Addison-Wesley

Diegiant „Spark“ atskirą sankaupą, darbuotojo mazgas pateikia vartotojo sąsają 8081 prievade, kaip parodyta 5 paveiksle.

Pearson Addison-Wesley

„Spark“ meistras ir grupių valdytojas

„Spark“ tvarkyklė planuoja ir koordinuoja užduočių, reikalingų „Spark“ programai paleisti, rinkinį. Pačios užduotys vykdomos vykdytojų, kurie priglobti darbininkų mazguose.

Pagrindinis ir klasterio valdytojas yra centriniai procesai, stebintys, rezervuojantys ir paskirstantys paskirstytus klasterio išteklius (arba konteinerius, jei tai yra YARN arba „Mesos“), kuriais vykdo vykdytojai. Pagrindinis ir sankaupos valdytojas gali būti atskiri procesai, arba jie gali būti sujungti į vieną procesą, kaip yra tada, kai „Spark“ veikia atskiru režimu.

Kibirkščių meistras

„Spark master“ yra procesas, reikalaujantis išteklių grupėje ir suteikiantis galimybę jais naudotis „Spark“ tvarkyklei. Visais diegimo režimais pagrindinis asmuo derasi dėl išteklių ar konteinerių su darbuotojų mazgais ar vergais, stebi jų būseną ir stebi jų pažangą.

Paleidus „Spark“ atskiru režimu, „Spark“ pagrindinis procesas aptarnauja žiniatinklio vartotojo sąsają 8080 prievade pagrindiniame pagrindiniame kompiuteryje, kaip parodyta 6 paveiksle.

Pearson Addison-Wesley

„Spark master“, palyginti su „Spark“ vairuotoju

Svarbu atskirti vairuotojo ir meistro vykdymo funkcijas. Pavadinimas meistras gali būti daroma išvada, kad šis procesas valdo programos vykdymą, tačiau taip nėra. Meistras paprasčiausiai paprašo išteklių ir suteikia tuos išteklius vairuotojui. Nors kapitonas stebi šių išteklių būklę ir būklę, jis nedalyvauja vykdant paraišką ir derinant jos užduotis bei etapus. Tai yra vairuotojo darbas.

Klasterio vadovas

Klasterio valdytojas yra procesas, atsakingas už darbuotojo mazgų stebėjimą ir išteklių rezervavimą šiuose mazguose, meistrui paprašius. Tada kapitonas šiuos klasterio išteklius suteikia vairuotojui prieigą vykdytojų pavidalu.

Kaip pažymėta anksčiau, klasterio tvarkyklė gali būti atskirta nuo pagrindinio proceso. Tai yra atvejis, kai „Spark“ veikia „Mesos“ ar „YARN“. Jei „Spark“ veikia atskiru režimu, pagrindinis procesas taip pat atlieka klasterio valdytojo funkcijas. Iš tikrųjų ji veikia kaip savo grupių valdytoja.

Geras klasterių tvarkytuvo funkcijos pavyzdys yra „Hark“ grupėse veikiančių „Spark“ programų „YARN ResourceManager“ procesas. „ResourceManager“ planuoja, paskirsto ir stebi konteinerių, veikiančių „YARN NodeManagers“, būklę. Tada „Spark“ programos naudoja šiuos konteinerius vykdytojo procesams, taip pat pagrindiniam procesui, jei programa veikia grupiniu režimu.

„Spark“ programos, naudojant atskirą planavimo priemonę

2 skyriuje „Spark diegimas“ paaiškinau atskirą tvarkaraštį kaip „Spark“ diegimo parinktį. Viename iš 2 skyriuje pateiktų pratimų įdiegiau visiškai veikiantį daugiašakį „Spark“ atskirą klasterį. Kaip jau buvo minėta anksčiau, „Spark“ klasteryje, veikiančiame atskiru režimu, „Spark“ pagrindinis procesas atlieka ir klasterio tvarkytojo funkciją, valdydamas turimus išteklius. grupę ir suteikiant jas pagrindiniam procesui naudoti „Spark“ programoje.

„Spark“ programos veikia „YARN“

„Hadoop“ yra labai populiari ir įprasta „Spark“ diegimo platforma. Kai kurie pramonės specialistai mano, kad „Spark“ netrukus pakeis „MapReduce“ kaip pagrindinę „Hadoop“ programų apdorojimo platformą. „YARN“ kibirkščių programoms taikoma ta pati vykdymo laiko architektūra, tačiau jų įgyvendinimas turi šiek tiek skirtumų.

„ResourceManager“ kaip sankaupos valdytojas

Priešingai nei „Standalone“ planavimo priemonėje, „YARN“ klasterio klasterio tvarkyklė yra „YARN ResourceManager“. „ResourceManager“ stebi išteklių naudojimą ir prieinamumą visuose mazgų mazguose. Klientai pateikia „Spark“ paraiškas „YARN ResourceManager“. „ResourceManager“ paskiria pirmąjį programos konteinerį, specialų konteinerį, vadinamą „ApplicationMaster“.

„ApplicationMaster“ kaip „Spark“ meistras

„ApplicationMaster“ yra pagrindinis „Spark“ procesas. Kaip pagrindinis procesas vyksta kitose grupių diegimo vietose, „ApplicationMaster“ derasi dėl išteklių tarp programos tvarkyklės ir grupių tvarkyklės (arba šiuo atveju „ResourceManager“); tada ji suteikia šiuos išteklius (konteinerius) tvarkyklei, kad jie galėtų naudoti kaip vykdytojai vykdydami užduotis ir saugodami programos duomenis.

„ApplicationMaster“ lieka visą programos laiką.

„Spark“ programų, veikiančių „YARN“, diegimo režimai

Pateikiant „Spark“ programas į YARN klasterį galima naudoti du diegimo režimus: kliento režimą ir grupių režimą. Pažvelkime į juos dabar.

Kliento režimas

Kliento režimu tvarkyklės procesas vykdomas klientui, pateikiančiam paraišką. Iš esmės jis nėra valdomas; jei nepavyksta tvarkyklės pagrindinis kompiuteris, programa nepavyksta. Kliento režimas palaikomas abiejose interaktyviose apvalkalo sesijose (pyspark, kibirkštisir pan.) ir neinteraktyvus paraiškos pateikimas (kibirkštis pateikti). Žemiau pateiktas kodas rodo, kaip pradėti pyspark sesija naudojant kliento diegimo režimą.

$ SPARK_HOME / bin / pyspark \

- pagrindiniai verpalai-klientas \

--num vykdytojai 1 \

- vairuotojo atmintis 512 m \

- vykdytojo atmintis 512 m \

- vykdytojo šerdys 1

# ARBA

$ SPARK_HOME / bin / pyspark \

- pagrindiniai verpalai \

--deploy-mode klientas \

--num vykdytojai 1 \

- vairuotojo atmintis 512 m \

- vykdytojo atmintis 512 m \

- vykdytojo šerdys 1

7 paveiksle pateikiama „Spark“ programos, veikiančios YARN kliento režimu, apžvalga.

Pearson Addison-Wesley

7 paveiksle parodyti veiksmai yra šie:

  1. Klientas pateikia „Spark“ programą klasterio valdytojui („YARN ResourceManager“). Tvarkyklės procesas, „SparkSession“ ir „SparkContext“ yra sukurtas ir vykdomas kliente.
  2. „ResourceManager“ programai priskiria „ApplicationMaster“ („Spark master“).
  3. „ApplicationMaster“ reikalauja, kad vykdytojai iš „ResourceManager“ naudotų konteinerius. Priskyrus konteinerius, vykdytojai neršia.
  4. Tuomet vairuotojas, esantis kliente, bendrauja su vykdytojais, kad atliktų užduotis ir programos „Spark“ etapus. Tvarkyklė grąžina klientui pažangą, rezultatus ir būseną.

Kliento diegimo režimas yra paprasčiausias būdas. Tačiau trūksta atsparumo, reikalingo daugumai gamybos būdų.

Klasterio režimas

Skirtingai nuo kliento diegimo režimo, kai „Spark“ programa veikia YARN Cluster režimu, pati tvarkyklė veikia klasteryje kaip „ApplicationMaster“ paprocesas. Tai užtikrina atsparumą: jei nepavyksta tvarkyklę talpinantis „ApplicationMaster“ procesas, jį galima iš naujo nustatyti kitame klasterio mazge.

Žemiau pateiktas kodas parodo, kaip pateikti paraišką naudojant kibirkštis pateikti ir YARN sankaupos diegimo režimas. Kadangi tvarkyklė yra asinchroninis procesas, vykstantis grupėje, interaktyvių „shell“ programų klasterio režimas nepalaikomas (pyspark ir kibirkštis).

$ SPARK_HOME / bin / spark-pateikti \

- meistrų verpalų klasteris \

--num vykdytojai 1 \

- vairuotojo atmintis 512 m \

- vykdytojo atmintis 512 m \

- vykdytojo šerdys 1

$ SPARK_HOME / pavyzdžiai / src / main / python / pi.py 10000

# ARBA

- pagrindiniai verpalai \

--deploy-mode cluster \

--num vykdytojai 1 \

- vairuotojo atmintis 512 m \

- vykdytojo atmintis 512 m \

- vykdytojo šerdys 1

$ SPARK_HOME / pavyzdžiai / src / main / python / pi.py 10000

8 paveiksle pateikiama „Spark“ programos, veikiančios YARN, grupių režimu apžvalga.

Pearson Addison-Wesley

8 paveiksle parodyti veiksmai yra šie:

  1. Klientas, vartotojo procesas, kuris iškviečia kibirkštis pateikti, pateikia „Spark“ programą klasterio valdytojui („YARN ResourceManager“).
  2. „ResourceManager“ programai priskiria „ApplicationMaster“ („Spark master“). Tvarkyklės procesas sukurtas tame pačiame klasterio mazge.
  3. „ApplicationMaster“ prašo vykdytojų talpyklų iš „ResourceManager“. vykdytojai yra pagimdyti konteineriuose, kuriuos „ResourceManager“ skiria „ApplicationMaster“. Tada vairuotojas bendrauja su vykdytojais, kad atliktų užduočių ir programos „Spark“ etapų apdorojimą.
  4. Tvarkyklė, vykdoma klasterio mazge, klientui grąžina pažangą, rezultatus ir būseną.

„Spark“ programos žiniatinklio vartotojo sąsają, kaip parodyta anksčiau, galima gauti iš „ApplicationMaster“ pagrindinio kompiuterio klasterio; nuorodą į šią vartotojo sąsają galite rasti „YARN ResourceManager“ vartotojo sąsajoje.

Peržiūrėtas vietinis režimas

Vietiniu režimu tvarkyklė, pagrindinis ir vykdytojas veikia viename JVM. Kaip jau buvo pažymėta anksčiau šiame skyriuje, tai naudinga kuriant, bandant vienetus ir derinant, tačiau jis yra ribotas naudojimo vykdant gamybines programas, nes jis nėra platinamas ir nesikeičia. Be to, nepavykusios užduotys „Spark“ programoje, veikiančioje vietiniu režimu, pagal numatytuosius nustatymus nėra vykdomos iš naujo. Tačiau galite nepaisyti šio elgesio.

Vykdant „Spark“ vietiniu režimu, programos vartotojo sąsaja pasiekiama šiuo adresu: // localhost: 4040. Pagrindinis ir darbuotojo vartotojo sąsaja negalima, kai veikia vietiniu režimu.

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