一、再次思考pipeline
“真誠(chéng)服務(wù),讓網(wǎng)絡(luò)創(chuàng)造價(jià)值”是我們的服務(wù)理念,創(chuàng)新互聯(lián)團(tuán)隊(duì)十年如一日始終堅(jiān)持在網(wǎng)站建設(shè)領(lǐng)域,為客戶(hù)提供優(yōu)質(zhì)服。不管你處于什么行業(yè),助你輕松跨入“互聯(lián)網(wǎng)+”時(shí)代,PC網(wǎng)站+手機(jī)網(wǎng)站+公眾號(hào)+成都小程序開(kāi)發(fā)。
即使采用pipeline的方式,函數(shù)f對(duì)依賴(lài)的RDD中的數(shù)據(jù)集合的操作也會(huì)有兩種方式:
1, f(record),f作用于集合的每一條記錄,每次只作用于一條記錄;
2, f(records),f一次性作用于集合的全部數(shù)據(jù);
Spark采用是是第一種方式,原因:
1, 無(wú)需等待,可以最大化的使用集群的計(jì)算資源;
2, 減少OOM的發(fā)生;
3, 最大化的有利于并發(fā);
4, 可以精準(zhǔn)的控制每一Partition本身(Dependency)及其內(nèi)部的計(jì)算(compute);
5, 基于lineage的算子流動(dòng)式函數(shù)式編程,節(jié)省了中間結(jié)果的產(chǎn)生,并且可以最快的恢復(fù);
二:思考Spark Job具體的物理執(zhí)行
Spark Application里面可以產(chǎn)生1個(gè)或者多個(gè)Job,例如spark-shell默認(rèn)啟動(dòng)的時(shí)候內(nèi)部就沒(méi)有Job,只是作為資源的分配程序,可以在spark-shell里面寫(xiě)代碼產(chǎn)生若干個(gè)Job,普通程序中一般而言可以有不同的Action,每一個(gè)Action一般也會(huì)觸發(fā)一個(gè)Job。
Spark是MapReduce思想的一種更加精致和高效的實(shí)現(xiàn),MapReduce有很多具體不同的實(shí)現(xiàn),例如Hadoop的MapReduce基本的計(jì)算流程如下:首先是以JVM為對(duì)象的并發(fā)執(zhí)行的Mapper,Mapper中map的執(zhí)行會(huì)產(chǎn)生輸出數(shù)據(jù),輸出數(shù)據(jù)會(huì)經(jīng)過(guò)Partitioner指定的規(guī)則放到Local FileSystem中,然后在經(jīng)由Shuffle、Sort、Aggregate變成Reducer中的reduce的輸入,執(zhí)行reduce產(chǎn)生最終的執(zhí)行結(jié)果;Hadoop MapReduce執(zhí)行的流程雖然簡(jiǎn)單,但是過(guò)于死板,尤其是在構(gòu)造復(fù)雜算法(迭代)時(shí)候非常不利于算法的實(shí)現(xiàn),且執(zhí)行效率極為低下!
Spark算法構(gòu)造和物理執(zhí)行時(shí)最最基本的核心:最大化pipeline
Pipeline的思想,數(shù)據(jù)被使用的時(shí)候才開(kāi)始計(jì)算,從數(shù)據(jù)流動(dòng)的視角來(lái)說(shuō),是數(shù)據(jù)流動(dòng)到計(jì)算的位置,實(shí)質(zhì)上從邏輯的角度來(lái)看,是算子在數(shù)據(jù)上流動(dòng)。
從算法構(gòu)建的角度而言:肯定是算子作用于數(shù)據(jù),所以是算子在數(shù)據(jù)上流動(dòng);
從物理執(zhí)行的角度而言:是數(shù)據(jù)流動(dòng)到計(jì)算的位置;
對(duì)于pipeline而言,數(shù)據(jù)計(jì)算的位置就是每個(gè)stage中的最后RDD。
由于計(jì)算的Lazy特性,導(dǎo)致計(jì)算從后往前回溯,形成Computing Chain,導(dǎo)致的結(jié)果就是需要首先計(jì)算出具體一個(gè)Stage內(nèi)部左側(cè)的RDD中本次計(jì)算依賴(lài)的Partition
三:窄依賴(lài)的物理執(zhí)行內(nèi)幕
一個(gè)Stage內(nèi)部的RDD都是窄依賴(lài),窄依賴(lài)計(jì)算本身是邏輯上看是從Stage內(nèi)部最左側(cè)的RDD開(kāi)始立即計(jì)算的,根據(jù)Computing Chain,數(shù)據(jù)(Record)從一個(gè)計(jì)算步驟流動(dòng)到下一個(gè)結(jié)算步驟,以此類(lèi)推,直到計(jì)算到Stage內(nèi)部的最后一個(gè)RDD來(lái)產(chǎn)生計(jì)算結(jié)果。
Computing Chain的構(gòu)建是從后往前回溯構(gòu)建而成,而實(shí)際的物理計(jì)算則是讓數(shù)據(jù)從前往后在算子上流動(dòng),直到流動(dòng)到不能再流動(dòng)位置才開(kāi)始計(jì)算下一個(gè)Record。這就導(dǎo)致一個(gè)美好的結(jié)果:后面的RDD對(duì)前面的RDD的依賴(lài)雖然是Partition級(jí)別的數(shù)據(jù)集合的依賴(lài),但是并不需要父RDD把Partition中所有的Records計(jì)算完畢才整體往后流動(dòng)數(shù)據(jù)進(jìn)行計(jì)算,這就極大的提高了計(jì)算速率!
四:寬依賴(lài)物理執(zhí)行內(nèi)幕
必須等到依賴(lài)的父Stage中的最后一個(gè)RDD全部數(shù)據(jù)徹底計(jì)算完畢,才能夠經(jīng)過(guò)shuffle來(lái)計(jì)算當(dāng)前的Stage!
新聞名稱(chēng):從物理執(zhí)行角度透視SparkJob(23)
本文URL:http://aaarwkj.com/article28/psoojp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營(yíng)銷(xiāo)、動(dòng)態(tài)網(wǎng)站、手機(jī)網(wǎng)站建設(shè)、搜索引擎優(yōu)化、響應(yīng)式網(wǎng)站、商城網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)