一: Spark內(nèi)核架構(gòu)
1,Drive是運(yùn)行程序的時(shí)候有main方法,并且會(huì)創(chuàng)建SparkContext對(duì)象惠昔,是程序運(yùn)行調(diào)度的中心幕与,向Master注冊(cè)程序,然后Master分配資源镇防。
應(yīng)用程序: Application = Driver(驅(qū)動(dòng)程序) + Executor(執(zhí)行程序)
Driver部分的代碼:主要是SparkContext +SparkConf
Application 的main 方法 啦鸣、創(chuàng)建sparkcontext、這樣 環(huán)境對(duì)象 sparkcontext 創(chuàng)建時(shí)要有程序的高層調(diào)度器DAGScheduler 分為幾個(gè)階段 来氧、底層調(diào)度器TasKScheduler 一個(gè)階段的任務(wù)處理 诫给、SchedulerBackend向Master 注冊(cè)程序 、分資源 啦扬、根據(jù) job 許多RDD 從后向前倒推 如寬依賴劃分不同的stage 然后提交給底層調(diào)度器TaskScheduler 然后根據(jù) 數(shù)據(jù)的本地性 發(fā)送到 Excutor 去執(zhí)行中狂,如出問(wèn)題 向 Drive 部分 匯報(bào) 完成 關(guān)閉創(chuàng)建對(duì)象
Executor 是運(yùn)行在Worker所在節(jié)點(diǎn)上,為當(dāng)前應(yīng)用程序而開(kāi)啟的一個(gè)JVM進(jìn)程里邊的一個(gè)對(duì)象扑毡,這個(gè)對(duì)象負(fù)責(zé)具體Task的運(yùn)行胃榕。這個(gè)JVM進(jìn)程里面是通過(guò) 線程池并發(fā) 每個(gè)線程運(yùn)行一個(gè)Task任務(wù) ,完成后 進(jìn)行 線程復(fù)用瞄摊。
默認(rèn)情況在一個(gè)節(jié)點(diǎn)上 只為當(dāng)前程序 開(kāi)啟 一個(gè) Excutor勋又。?
Cluster Manager(集群中獲取資源的Web服務(wù))?
spark Aplication 運(yùn)行不依賴 Cluster Manager?
可插拔的 資源方式 粗粒度的?
Worker 操作代碼的節(jié)點(diǎn),不運(yùn)行 程序的代碼泉褐,管理 當(dāng)前 節(jié)點(diǎn)的資源(cup赐写,Memory),并接收 Master指令來(lái)分配具體的計(jì)算資源的Excutor(在新的進(jìn)程中分配)?
并通過(guò)ExcutorRunner 來(lái)具體啟動(dòng)一個(gè)新進(jìn)程膜赃,進(jìn)程里面有Executor挺邀。
在此可以做一個(gè)比喻:Worker是工頭,Cluster Manager:是項(xiàng)目經(jīng)理?
Master:是Boss
worker 不會(huì) 匯報(bào) 當(dāng)前信息(發(fā)心跳) 給 Master?
故障時(shí)候 發(fā)的心跳 只有 workid?
Master 分配時(shí) 就知道 資源
Job 包含一系列的task 并行計(jì)算 一般由action 觸發(fā) action不會(huì)產(chǎn)生RDD
action前面的是RDD ,前面的RDD是Transformation級(jí)別的是lazy的執(zhí)行方式跳座,他是從后往前推端铛,如果后面的RDD與前面的RDD是回溯的話是窄依賴(如果父RDD的一個(gè)Partition被一個(gè)子RDD的Partion所使用的話就是窄依賴,否則的話就是寬依賴疲眷,如果子RDD中的Partition對(duì)父RDD的Partition依賴的數(shù)量不會(huì)隨著數(shù)據(jù)量規(guī)模的改變而改變的話就是窄依賴禾蚕,否則的話就是寬依賴)的話就在內(nèi)存中進(jìn)行迭代。寬依賴導(dǎo)致stage的劃分狂丝。?
Spark快絕不是因?yàn)榛趦?nèi)存换淆,最基本的是他的調(diào)度,然后是他的容錯(cuò)
如果 寬依賴?
依賴構(gòu)成了 DAG 几颜,DAG導(dǎo)致 寬依賴?
stage 是內(nèi)存迭代 當(dāng)然也可以 磁盤的迭代 倍试,如有100W 個(gè)數(shù)據(jù)分片 就有 100W 個(gè)task任務(wù)?
stage內(nèi)部:計(jì)算邏輯一樣 只是 算的數(shù)據(jù)不一樣而已
任務(wù)本身計(jì)算數(shù)據(jù)分片 ,一個(gè)pation是否精的 等于 一個(gè) block大械翱蕖县习??
默認(rèn)情況下 是 一個(gè)數(shù)據(jù)分片 128MB 最后一個(gè)記錄跨2個(gè) block
怎么分配資源:通過(guò)spark-env.sh和spark-defaults.sh
Scheduling:
Dependency Types :?
Event Flow :?
????????????????????????????????????????????????????????????????????????長(zhǎng)按識(shí)別關(guān)注我們,每天都有技術(shù)和精彩內(nèi)容分享哦!~