detta dokument ger en kort översikt över hur Spark körs på kluster, för att göra det lättare att förståde involverade komponenterna. Läs igenom ansökningsguiden för att lära dig om att starta applikationer i ett kluster.
Spark-applikationer körs som oberoende uppsättningar processer i ett kluster, samordnade av SparkContext
– objektet i ditt huvudprogram (kallat drivrutinsprogrammet).
specifikt för att köra på ett kluster kan SparkContext ansluta till flera typer av klusterhanterare(antingen Sparks egen fristående klusterhanterare, Mesos eller garn), som allokerar resurser acrossapplications. När den är ansluten förvärvar Spark exekutörer på noder i klustret, som ärprocesser som kör beräkningar och lagrar data för din applikation.Därefter skickar den din applikationskod (definierad av JAR-eller Python-filer som skickas till SparkContext) tillexekutorerna. Slutligen skickar SparkContext uppgifter till exekutörerna att köra.
det finns flera användbara saker att notera om denna arkitektur:
- varje applikation får sina egna exekveringsprocesser, som håller sig uppe under hela helhetapplication och kör uppgifter i flera trådar. Detta har fördelen att isolera applikationerfrån varandra, både på schemaläggningssidan (varje förare schemalägger sina egna uppgifter) och exekveraresida (uppgifter från olika applikationer körs i olika JVM). Det betyder dock också attdata inte kan delas mellan olika Spark-applikationer (instanser av SparkContext) utan att skriva det till ett externt lagringssystem.
- Spark är agnostisk för den underliggande klusterhanteraren. Så länge det kan förvärva executorprocesses, och dessa kommunicerar med varandra, är det relativt enkelt att köra det även på acluster manager som också stöder andra applikationer (t.ex. Mesos/garn).
- drivrutinsprogrammet måste lyssna efter och acceptera inkommande anslutningar från dess exekutörer genom hela dess livstid (t.ex. se spark.drivrutin.port i nätverket configsection). Som sådan måste drivrutinsprogrammet vara nätverkadresserbar från arbetarnas noder.
- eftersom drivrutinen schemalägger uppgifter på klustret, bör det köras nära workernodes, helst på samma lokala nätverk. Om du vill skicka förfrågningar till thecluster på distans, är det bättre att öppna en RPC till föraren och få den att skicka operationer från närheten än att köra en förare långt ifrån arbetaren noder.
typer av Klusterhanterare
systemet stöder för närvarande flera klusterhanterare:
- Fristående – en enkel klusterhanterare som ingår i Spark som gör det enkelt att skapa ett kluster.
- Apache Mesos – en allmän klusterhanterare som också kan köra Hadoop MapReduceand serviceapplikationer.
- Hadoop garn – resurshanteraren i Hadoop 2.
- Kubernetes – ett open source-system för automatisering av distribution, skalning och hantering av containeriserade applikationer.
ett tredjepartsprojekt (stöds inte av Spark-projektet) finns för att lägga till stöd forNomad som klusterhanterare.
skicka in ansökningar
ansökningar kan skickas till ett kluster av vilken typ som helst med skriptet spark-submit
.Ansökningshandboken beskriver hur du gör detta.
övervakning
varje drivrutinsprogram har ett webbgränssnitt, vanligtvis på port 4040, som visar information om runningtasks, exekutörer och lagringsanvändning. Gå helt enkelt till i en webbläsare tilltillgång till detta användargränssnitt. Övervakningsguiden beskriver också andra övervakningsalternativ.
Jobbschemaläggning
Spark ger kontroll över resursallokering både över applikationer (på nivå med clustermanager) och inom applikationer (om flera beräkningar händer på samma SparkContext).Jobbschemaläggningsöversikten beskriver detta mer detaljerat.
ordlista
följande tabell sammanfattar termer som du ser används för att hänvisa till klusterkoncept:
Term | betydelse |
---|---|
ansökan | användarprogram byggt på Spark. Består av ett förarprogram och exekutörer på klustret. |
Application jar | en burk som innehåller användarens Spark ansökan. I vissa fall vill användarna skapa en” uber jar ” som innehåller deras ansökan tillsammans med dess beroenden. Användarens burk ska aldrig innehålla Hadoop-eller Spark-bibliotek, men dessa kommer att läggas till vid körning. |
drivrutinsprogram | processen som kör programmets huvudfunktion () och skapar SparkContext |
Cluster manager | en extern tjänst för att skaffa resurser på klustret (t. ex. fristående chef, Mesos, garn) |
Driftsättningsläge | skiljer var drivrutinsprocessen körs. I” cluster ” – läge startar ramverket föraren inuti klustret. I” klient ” – läge startar sändaren drivrutinen utanför klustret. |
Arbetarnod | varje nod som kan köra programkod i klustret |
Executor | en process som lanserades för ett program på en arbetare nod, som kör uppgifter och håller data i minnet eller disklagring över dem. Varje ansökan har sina egna exekutörer. |
uppgift | en arbetsenhet som skickas till en exekutör |
Job | en parallell beräkning som består av flera uppgifter som skapas som svar på en Gniståtgärd (t. ex. save , collect ); du ser den här termen som används i förarens loggar. |
steg | varje jobb delas upp i mindre uppsättningar uppgifter som kallas steg som är beroende av varandra (liknar kartan och reducerar steg i MapReduce); du ser den här termen som används i förarens loggar. |