Spark內(nèi)核架構(gòu)解密

Driver:運(yùn)行程序時(shí)具有main方法并且創(chuàng)建SparkContext的環(huán)境對(duì)象
程序運(yùn)行的核心
SparkContext,高層調(diào)度器DAGScheduler,底層調(diào)度器TaskScheduler,也有SchedulerBackEnd
負(fù)責(zé)向Master注冊(cè)當(dāng)前程序,Master給他分配資源,根據(jù)Action返回Job,Job里面有一系列的RDD,如果是寬依賴的話就劃分成不同的Stage,Stage交給底層調(diào)度器TaskScheduler,TaskScheduler拿到任務(wù)后根據(jù)任務(wù)情況把任務(wù)給Executor去執(zhí)行。
Executor如果出問(wèn)題會(huì)向Driver進(jìn)行匯報(bào),運(yùn)行完畢后SparkContext關(guān)閉
Application = Driver+ Executor
Driver部分的代碼:SparkConf+SparkContext
Executor部分的代碼:textFile, flatMap, map
Executor中有線程池,任務(wù)由線程池中的線程執(zhí)行,執(zhí)行后回收
Cluster Manager:獲取資源的外部程序
Spark Application的運(yùn)行不依賴于Cluster Manager
Worker上不運(yùn)行程序代碼,Worker管理資源使用情況,會(huì)接收Master分配資源的指令,并通過(guò)ExecutorRunner來(lái)啟動(dòng)新的進(jìn)程來(lái)開(kāi)啟Executor,Worker不會(huì)發(fā)機(jī)器資源信息給Master,在Master分配資源之時(shí)已經(jīng)知道了。
Job:包含一些列Task的并行計(jì)算
Action不會(huì)產(chǎn)生RDD
Spark快:調(diào)度、容錯(cuò)
窄依賴依賴固定個(gè)數(shù)的,不會(huì)變
Stage內(nèi)部計(jì)算邏輯完全一樣,只是計(jì)算的數(shù)據(jù)不同罷了
一個(gè)Application里面可以有多個(gè)jobs(不同的action),一般一個(gè)action對(duì)應(yīng)一個(gè)job,checkpoint也會(huì)導(dǎo)致job
Spark程序運(yùn)行的兩種模式:Client Cluster,建議使用Client模式
driver頻繁和executor通信,所以要在同一個(gè)網(wǎng)段中
不要用IDE作為Driver,Driver也可能有JavaEE
分配資源由以下內(nèi)容決定:
1、spark-env.sh和spark-default.sh
2、spark-submit提交的參數(shù)
3、程序中spark-conf配置的參數(shù)
TaskRunner繼承Runnable接口

|