spark中基本概念
- Application:表示你的應(yīng)用程序
- Driver:表示main()函數(shù)无虚,創(chuàng)建SparkContext学赛。由SparkContext負(fù)責(zé)與ClusterManager通信休涤,進(jìn)行資源的申請(qǐng)他炊,任務(wù)的分配和監(jiān)控等搭幻。程序執(zhí)行完畢后關(guān)閉SparkContext
- Executor:某個(gè)Application運(yùn)行在Worker節(jié)點(diǎn)上的一個(gè)進(jìn)程循狰,該進(jìn)程負(fù)責(zé)運(yùn)行某些task窟社,并且負(fù)責(zé)將數(shù)據(jù)存在內(nèi)存或者磁盤上。在Spark on Yarn模式下绪钥,其進(jìn)程名稱為 CoarseGrainedExecutor Backend灿里,一個(gè)CoarseGrainedExecutor Backend進(jìn)程有且僅有一個(gè)executor對(duì)象,它負(fù)責(zé)將Task包裝成taskRunner程腹,并從線程池中抽取出一個(gè)空閑線程運(yùn)行Task钠四,這樣,每個(gè)CoarseGrainedExecutorBackend能并行運(yùn)行Task的數(shù)據(jù)就取決于分配給它的CPU的個(gè)數(shù)跪楞。
- Worker:集群中可以運(yùn)行Application代碼的節(jié)點(diǎn)缀去。在Standalone模式中指的是通過(guò)slave文件配置的worker節(jié)點(diǎn),在Spark on Yarn模式中指的就是NodeManager節(jié)點(diǎn)甸祭。
- Task:在Executor進(jìn)程中執(zhí)行任務(wù)的工作單元缕碎,多個(gè)Task組成一個(gè)Stage
- Job:包含多個(gè)Task組成的并行計(jì)算,是由Action行為觸發(fā)的
- Stage:每個(gè)Job會(huì)被拆分很多組Task池户,作為一個(gè)TaskSet咏雌,其名稱為Stage
- DAGScheduler:根據(jù)Job構(gòu)建基于Stage的DAG,并提交Stage給TaskScheduler校焦,其劃分Stage的依據(jù)是RDD之間的依賴關(guān)系
-
TaskScheduler:將TaskSet提交給Worker(集群)運(yùn)行赊抖,每個(gè)Executor運(yùn)行什么Task就是在此處分配的。
spark運(yùn)行流程
- 構(gòu)建Spark Application的運(yùn)行環(huán)境(啟動(dòng)SparkContext)寨典,SparkContext向資源管理器(可以是Standalone氛雪、Mesos或YARN)注冊(cè)并申請(qǐng)運(yùn)行Executor資源;
- 資源管理器分配Executor資源并啟動(dòng)StandaloneExecutorBackend耸成,Executor運(yùn)行情況將隨著心跳發(fā)送到資源管理器上报亩;
- SparkContext構(gòu)建成DAG圖,將DAG圖分解成Stage井氢,并把Taskset發(fā)送給Task Scheduler弦追。Executor向SparkContext申請(qǐng)Task
- Task Scheduler將Task發(fā)放給Executor運(yùn)行同時(shí)SparkContext將應(yīng)用程序代碼發(fā)放給Executor。
-
Task在Executor上運(yùn)行花竞,運(yùn)行完畢釋放所有資源劲件。