怎么結(jié)合Spark講一下Flink的runtime,針對(duì)這個(gè)問題,這篇文章詳細(xì)介紹了相對(duì)應(yīng)的分析和解答,希望可以幫助更多想解決這個(gè)問題的小伙伴找到更簡單易行的方法。
雄縣網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)建站!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營維護(hù)。創(chuàng)新互聯(lián)建站于2013年創(chuàng)立到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)建站。
Flink運(yùn)行時(shí)主要角色有兩個(gè):JobManager和TaskManager,無論是standalone集群,on yarn都是要啟動(dòng)這兩個(gè)角色。有點(diǎn)類似于MRv1的架構(gòu)了,JobManager主要是負(fù)責(zé)接受客戶端的job,調(diào)度job,協(xié)調(diào)checkpoint等。TaskManager執(zhí)行具體的Task。TaskManager為了對(duì)資源進(jìn)行隔離和增加允許的task數(shù),引入了slot的概念,這個(gè)slot對(duì)資源的隔離僅僅是對(duì)內(nèi)存進(jìn)行隔離,策略是均分,比如taskmanager的管理內(nèi)存是3GB,假如有三個(gè)slot,那么每個(gè)slot就僅僅有1GB內(nèi)存可用。
根據(jù)經(jīng)驗(yàn),taskslot數(shù)最佳默認(rèn)值就是CPU核心數(shù)。使用超線程,每個(gè)task slot需要2個(gè)或更多硬件線程上下文。
Client這個(gè)角色主要是為job提交做些準(zhǔn)備工作,比如構(gòu)建jobgraph提交到j(luò)obmanager,提交完了可以立即退出,當(dāng)然也可以用client來監(jiān)控進(jìn)度。
Jobmanager和TaskManager之間通信類似于Spark 的早期版本,采用的是actor系統(tǒng)。
根據(jù)以上描述,繪制出運(yùn)行架構(gòu)圖就是下圖:
Task到底是什么玩意?
講到這可以先回顧一下Spark了,主要三個(gè)概念:
1. Shuffle
Spark 任務(wù)job中shuffle個(gè)數(shù)決定著stage個(gè)數(shù)。
2. 分區(qū)
Spark 算子中RDD的分區(qū)數(shù)決定者stage任務(wù)的并行度。
3. 分區(qū)傳遞
復(fù)雜的入union,join等暫不提。簡單的調(diào)用鏈如下:
rdd.map-->filter-->reducebykey-->map。
例子中假設(shè)rdd有6個(gè)分區(qū),map到fliter的分區(qū)數(shù)傳遞是不變,filter到redcuebykey分區(qū)就變了,reducebykey的分區(qū)有個(gè)默認(rèn)計(jì)算公式,星球里講過了,假設(shè)我們?cè)谑褂胷educebykey的時(shí)候傳入了一個(gè)分區(qū)數(shù)12。
分區(qū)數(shù),map是6,filter也是6,reducebykey后面的map就是12。
override def getPartitions: Array[Partition] =firstParent[T].partitions
map這類轉(zhuǎn)換完全繼承了父RDD的分區(qū)器和分區(qū)數(shù),默認(rèn)無法人為設(shè)置并行度,只有在shuffle的時(shí)候,我們才可以傳入并行度。
上述講解主要是想帶著大家搞明白,以下幾個(gè)概念:
Flink的并行度由什么決定的?
Flink的task是什么?
1. Flink的并行度由什么決定的?
這個(gè)很簡單,F(xiàn)link每個(gè)算子都可以設(shè)置并行度,然后就是也可以設(shè)置全局并行度。
Api的設(shè)置
.map(new RollingAdditionMapper()).setParallelism(10)
全局配置在flink-conf.yaml文件中,parallelism.default,默認(rèn)是1:
2. Flink的task是什么?
按理說應(yīng)該是每個(gè)算子的一個(gè)并行度實(shí)例就是一個(gè)subtask-在這里為了區(qū)分暫時(shí)叫做substask。那么,帶來很多問題,由于flink的taskmanager運(yùn)行task的時(shí)候是每個(gè)task采用一個(gè)單獨(dú)的線程,這就會(huì)帶來很多線程切換開銷,進(jìn)而影響吞吐量。
為了減輕這種情況,flink進(jìn)行了優(yōu)化,也即對(duì)subtask進(jìn)行鏈?zhǔn)讲僮?,鏈?zhǔn)讲僮鹘Y(jié)束之后得到的task,再作為一個(gè)調(diào)度執(zhí)行單元,放到一個(gè)線程里執(zhí)行。
如下圖的,source/map 兩個(gè)算子進(jìn)行了鏈?zhǔn)剑籯eyby/window/apply有進(jìn)行了鏈?zhǔn)?,sink單獨(dú)的一個(gè)。
注釋:圖中假設(shè)是source/map的并行度都是2,keyby/window/apply的并行度也都是2,sink的是1,總共task有五個(gè),最終需要五個(gè)線程。
按照到這一步的理解,畫的執(zhí)行圖應(yīng)該是這樣的:
有些朋友該說了,據(jù)我觀察實(shí)際上并不是這樣的呀。。。
這個(gè)是實(shí)際上是flink又一次優(yōu)化。
默認(rèn)情況下,flink允許如果任務(wù)是不同的task的時(shí)候,允許任務(wù)共享slot,當(dāng)然,前提是必須在同一個(gè)job內(nèi)部。
結(jié)果就是,每個(gè)slot可以執(zhí)行job的一整個(gè)pipeline,如上圖。這樣做的好處主要有以下幾點(diǎn):
1.Flink 集群所需的taskslots數(shù)與job中最高的并行度一致。也就是說我們不需要再去計(jì)算一個(gè)程序總共會(huì)起多少個(gè)task了。
2.更容易獲得更充分的資源利用。如果沒有slot共享,那么非密集型操作source/flatmap就會(huì)占用同密集型操作 keyAggregation/sink 一樣多的資源。如果有slot共享,將基線的2個(gè)并行度增加到6個(gè),能充分利用slot資源,同時(shí)保證每個(gè)TaskManager能平均分配到重的subtasks,比如keyby/window/apply操作就會(huì)均分到申請(qǐng)的所有slot里,這樣slot的負(fù)載就均衡了。
鏈?zhǔn)降脑瓌t,也即是什么情況下才會(huì)對(duì)task進(jìn)行鏈?zhǔn)讲僮髂兀亢唵喂8乓幌拢?/strong>
上下游的并行度一致
下游節(jié)點(diǎn)的入度為1 (也就是說下游節(jié)點(diǎn)沒有來自其他節(jié)點(diǎn)的輸入)
上下游節(jié)點(diǎn)都在同一個(gè) slot group 中(下面會(huì)解釋 slot group)
下游節(jié)點(diǎn)的 chain 策略為 ALWAYS(可以與上下游鏈接,map、flatmap、filter等默認(rèn)是ALWAYS)
上游節(jié)點(diǎn)的 chain 策略為 ALWAYS 或 HEAD(只能與下游鏈接,不能與上游鏈接,Source默認(rèn)是HEAD)
兩個(gè)節(jié)點(diǎn)間數(shù)據(jù)分區(qū)方式是 forward(參考理解數(shù)據(jù)流的分區(qū))
用戶沒有禁用 chain
關(guān)于怎么結(jié)合Spark講一下Flink的runtime問題的解答就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識(shí)。
分享標(biāo)題:怎么結(jié)合Spark講一下Flink的runtime
標(biāo)題網(wǎng)址:http://www.rwnh.cn/article16/pgccgg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、小程序開發(fā)、外貿(mào)建站、品牌網(wǎng)站制作、ChatGPT、網(wǎng)站設(shè)計(jì)公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)