acest document oferă o scurtă prezentare generală a modului în care Spark rulează pe clustere, pentru a facilita înțelegerea componentelor implicate. Citiți ghidul de depunere a aplicațiilorpentru a afla despre lansarea aplicațiilor pe un cluster.
aplicațiile Spark rulează ca seturi independente de procese pe un cluster, coordonate de obiectul SparkContext
din programul principal (numit programul driver).
mai exact, pentru a rula pe un cluster, SparkContext se poate conecta la mai multe tipuri de manageri de cluster(fie propriul manager de cluster independent Spark, Mesos sau fire), care alocă resurse peste aplicații. Odată conectat, Spark achiziționează executori pe nodurile din cluster, care suntprocese care rulează calcule și stochează date pentru aplicația dvs.Apoi, trimite codul aplicației dvs. (definit de fișierele JAR sau Python transmise către SparkContext) Executorilor. În cele din urmă, SparkContext trimite sarcini Executorilor pentru a rula.
există mai multe lucruri utile de remarcat despre această arhitectură:
- fiecare aplicație primește propriile procese de executor, care rămân pe durata întregii aplicații și rulează sarcini în mai multe fire. Acest lucru are avantajul izolării aplicațiilor unul de celălalt, atât pe partea de planificare (fiecare șofer își planifică propriile sarcini), cât și pe partea de execuție (SARCINI din diferite aplicații rulează în JVM-uri diferite). Cu toate acestea, înseamnă și astadatele nu pot fi partajate între diferite aplicații Spark (instanțe ale SparkContext) fără a le scrie într-un sistem de stocare extern.
- Spark este agnostic pentru managerul de cluster subiacent. Atâta timp cât se poate achiziționa executorprocesses, iar acestea comunică între ele, este relativ ușor să-l rulați chiar și pe acluster manager care acceptă și alte aplicații (de exemplu, Mesos/fire).
- programul driverului trebuie să asculte și să accepte conexiunile primite de la executorii săi pe toată durata de viață (de exemplu, consultați spark.șofer.port în configsection de rețea). Ca atare, programul driverului trebuie să fie în rețeaadresabil de la nodurile lucrătorului.
- deoarece driverul programează sarcini pe cluster, acesta ar trebui să fie rulat aproape de workernodes, de preferință în aceeași rețea locală. Dacă doriți să trimiteți solicitări către cluster de la distanță, este mai bine să deschideți un RPC șoferului și să îl trimiteți operațiuni din apropiere decât să rulați un șofer departe de nodurile lucrătorului.
tipuri de Manager de Cluster
sistemul acceptă în prezent mai mulți manageri de cluster:
- Standalone – un simplu manager de cluster inclus cu Spark, care face iteasy pentru a configura un cluster.
- Apache Mesos – un manager general de cluster care poate rula și aplicații de servicii Hadoop MapReduceand.
- Hadoop fire – managerul de resurse în Hadoop 2.
- Kubernetes – un sistem open-source pentru automatizarea implementării, scalării și gestionării aplicațiilor containerizate.
există un proiect terț (care nu este acceptat de Proiectul Spark) pentru a adăuga suport forNomad ca manager de cluster.
trimiterea cererilor
Cererile pot fi trimise la un cluster de orice tip folosind scriptul spark-submit
.Ghidul de depunere a cererii descrie cum se face acest lucru.
monitorizare
fiecare program de driver are o interfață web, de obicei pe portul 4040, care afișează informații despre rularea sarcinilor, executorii și utilizarea stocării. Pur și simplu du-te la într-un browser web toaccess acest UI. Ghidul de monitorizare descrie și alte opțiuni de monitorizare.
Job Scheduling
Spark oferă control asupra alocării resurselor atât între aplicații (la nivelul clustermanager), cât și în cadrul aplicațiilor (dacă se întâmplă mai multe calcule pe același SparkContext).Prezentarea generală a planificării lucrărilor descrie acest lucru mai detaliat.
Glosar
următorul tabel rezumă termenii pe care îi veți vedea folosiți pentru a face referire la concepte de cluster:
termen | înțeles |
---|---|
aplicație | program de utilizator construit pe Spark. Constă dintr-un program de driver și executori pe cluster. |
aplicație jar | un borcan care conține aplicația Spark a utilizatorului. În unele cazuri, utilizatorii vor dori să creeze un „uber jar” care să conțină aplicația lor împreună cu dependențele sale. Jar utilizatorului nu ar trebui să includă biblioteci Hadoop sau Spark, cu toate acestea, acestea vor fi adăugate în timpul rulării. |
programul Driver | procesul care rulează funcția principală () a aplicației și crearea SparkContext |
Cluster manager | un serviciu extern pentru achiziționarea de resurse pe cluster (de exemplu, standalone manager, Mesos, fire) |
modul de implementare | distinge unde rulează procesul driverului. În modul” cluster”, cadrul lansează driverul în interiorul clusterului. În modul „client”, emitentul lansează driverul în afara clusterului. |
nod lucrător | orice nod care poate rula codul aplicației în cluster |
Executor | un proces lansat pentru o aplicație pe un nod lucrător, care se execută sarcini și păstrează datele în memorie sau de stocare pe disc peste ele. Fiecare aplicație are proprii executori. |
sarcina | o unitate de lucru care va fi trimisă unui executor |
loc de muncă | un calcul paralel constând din mai multe sarcini care devine generat ca răspuns la o acțiune scânteie (de exemplu, save , collect ); veți vedea acest termen folosit în jurnalele șoferului. |
etapa | fiecare lucrare este împărțită în seturi mai mici DE SARCINI numite etape care depind una de cealaltă (similar cu harta și reducerea etapelor din MapReduce); veți vedea acest termen utilizat în jurnalele driverului. |