Tungsten Fabric SDN — SmartNIC vRouter
618
2022-05-30
大家好,我是一條~
5小時推開Spark的大門,第四小時,帶大家理解Spark的核心概念。
話不多說,開干!
運行架構(gòu)
大家還記得第一節(jié)的系統(tǒng)架構(gòu)圖嗎,就是這張
有同學(xué)反饋說都是英文的看不太懂,對照起來看又特別麻煩。
這個是因為有些概念我也找不到特別標準且統(tǒng)一的翻譯,這也是目前的一個現(xiàn)狀,很多文檔都是英文的,雖然有國人翻譯,但是不溝通統(tǒng)一,難免會對新手造成困擾。
要改變這一現(xiàn)狀,需要所有程序員的共同努力。
首先回顧一下每個節(jié)點都是什么意思:
Spark整體采用了標準master-slave的結(jié)構(gòu)。
圖中的Driver表示master,負責(zé)管理整個集群中的作業(yè)任務(wù)調(diào)度;Executor 則是 slave,負責(zé)實際執(zhí)行任務(wù)。
1.Driver
負責(zé)實際代碼的執(zhí)行工作,即執(zhí)行 Spark 任務(wù)中的 main 方法,在 Spark 作業(yè)執(zhí)行時主要負責(zé):
將用戶程序轉(zhuǎn)化為作業(yè)(job)
在Executor之間調(diào)度任務(wù)(task)
跟蹤Executor的執(zhí)行情況
通過WebUI展示查詢運行情況
簡單理解,所謂Driver就是驅(qū)使整個應(yīng)用運行起來的程序。
2.SparkContext
每一個Spark應(yīng)用都是一個SparkContext實例,可以理解為一個SparkContext就是一個spark application的生命周期,一旦SparkContext創(chuàng)建之后,就可以用這個SparkContext來創(chuàng)建RDD、累加器、廣播變量,并且可以通過SparkContext訪問Spark的服務(wù),運行任務(wù)。
就像上一節(jié)課我們與Spark建立連接的代碼:
// 創(chuàng)建 Spark 運行配置對象 val sparkConf = new SparkConf().setMaster("local[*]").setAppName("WordCount") // 創(chuàng)建 Spark 上下文環(huán)境對象(連接對象) val sc = new SparkContext(sparkConf)
1
2
3
4
4.Master & Worker
Spark集群的獨立部署環(huán)境中,不需要依賴其他的資源調(diào)度框架,自身就實現(xiàn)了資源調(diào)度的功能(當然也有Yarn調(diào)度模式),所以環(huán)境中還有其他兩個核心組件:Master 和 Worker。
Master主要負責(zé)資源的調(diào)度和分配的進程,并進行集群的監(jiān)控等職責(zé)。
Worker也是進程,運行在集群中的一臺服務(wù)器上,由 Master 分配資源對數(shù)據(jù)進行并行的處理和計算。
簡單理解,你是Worker,Master是你老板。
5.Executor
Spark Executor是集群中工作節(jié)點(worker node)中的一個進程,負責(zé)在Spark作業(yè)中運行具體任務(wù),也就是真正干活的那個。
任務(wù)彼此之間相互獨立。Spark應(yīng)用啟動時,Executor節(jié)點被同時啟動,并且始終伴隨著整個 Spark 應(yīng)用的生命周期而存在。
如果有 Executor 節(jié)點發(fā)生了故障或崩潰,Spark 應(yīng)用也可以繼續(xù)執(zhí)行,會將出錯節(jié)點上的任務(wù)調(diào)度到其他 Executor節(jié)點上繼續(xù)運行。
就好比這個人干不動了,換個人接著干。
Executor的核心功能
負責(zé)運行組成 Spark 應(yīng)用的任務(wù),并將結(jié)果返回給驅(qū)動器進程。
它們通過自身的塊管理器(Block Manager),作為用戶程序的緩存,因此任務(wù)可以在運行時充分利用緩存,提高運算速度。
核心概念
了解了運行架構(gòu),還有一些Spark的核心概念需要理解。
1.并行度
我們常說高并發(fā),是說同時處理大量請求的能力,那么在分布式計算框架中同樣是多個任務(wù)同時執(zhí)行,不同的是分布在不同的計算節(jié)點同時進行計算,是能夠真正地實現(xiàn)多任務(wù)并行執(zhí)行。
所以整個集群并行執(zhí)行任務(wù)的數(shù)量稱之為并行度。
那么一個作業(yè)到底并行度是多少呢?這個取決于框架的默認配置。應(yīng)用程序也可以在運行過程中動態(tài)修改。
2.有向無環(huán)圖
DAG(Directed Acyclic Graph)
大數(shù)據(jù)計算引擎框架我們根據(jù)使用方式的不同一般會分為四類,其中第一類就是Hadoop 所承載的 MapReduce,它將計算分為兩個階段,分別為 Map 階段 和 Reduce 階段。
對于上層應(yīng)用來說,就不得不想方設(shè)法去拆分算法,甚至于不得不在上層應(yīng)用實現(xiàn)多個Job的串聯(lián),以完成一個完整的算法,例如迭代計算。
由于這樣的弊端,催生了支持DAG框架的產(chǎn)生。因此,支持 DAG 的框架被劃分為第二代計算引擎。
接下來就是以 Spark 為代表的第三代的計算引擎。第三代計算引擎的特點主要是 Job 內(nèi)部的DAG支持(不跨越 Job),以及實時計算。
這里所謂的有向無環(huán)圖,并不是真正意義的圖形,而是由 Spark 程序直接映射成的數(shù)據(jù)流的高級抽象模型。簡單理解就是將整個程序計算的執(zhí)行過程用圖形表示出來,這樣更直觀,更便于理解,可以用于表示程序的拓撲結(jié)構(gòu)。
DAG是一種非常重要的圖論數(shù)據(jù)結(jié)構(gòu)。如果一個有向圖無法從任意頂點出發(fā)經(jīng)過若干條邊回到該點,則這個圖就是有向無環(huán)圖,如圖:
3.RDD
到了最重要的了,也是最后一個大坑,內(nèi)容比較多,留給明天填。
我們下期見!
spark 任務(wù)調(diào)度
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。