真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

淺談Spark內(nèi)部運行機制-創(chuàng)新互聯(lián)

  1. Spark中最重要的機制有那些?

    創(chuàng)新互聯(lián)專注于企業(yè)成都全網(wǎng)營銷推廣、網(wǎng)站重做改版、撫州網(wǎng)站定制設計、自適應品牌網(wǎng)站建設、html5、成都商城網(wǎng)站開發(fā)、集團公司官網(wǎng)建設、外貿(mào)營銷網(wǎng)站建設、高端網(wǎng)站制作、響應式網(wǎng)頁設計等建站業(yè)務,價格優(yōu)惠性價比高,為撫州等各大城市提供網(wǎng)站開發(fā)制作服務。

    1.RDD,2.Spark調(diào)度機制,3Shuffle過程

  2. 什么是RDD?

    可以這么說,你懂了RDD,基本上就可以對Hadoop和Spark的一半給吃透了,那么到底是RDD

    RDD(彈性分布式數(shù)據(jù)集)首先體現(xiàn)數(shù)據(jù)集,RDD是對原始數(shù)據(jù)的封裝,該種數(shù)據(jù)結(jié)構(gòu)內(nèi)部可以對數(shù)據(jù)進行邏輯分區(qū),其次分布式體現(xiàn)是并行計算以及需要解決容錯問題,也就是根據(jù)依賴,找到第一層RDD,最后根據(jù)RDD編號與分區(qū)編號,可以唯一確定該分區(qū)對應的塊編號,就能從存儲介質(zhì)中提取出分區(qū)對應的數(shù)據(jù)。在就是彈性,RDD在可以不改變內(nèi)部存儲數(shù)據(jù)記錄的前提下,去調(diào)整并行計算單元的劃分結(jié)構(gòu)(這個可能就是Stage)

  3. 基本概念

    (1)應用程序:用戶構(gòu)建的Spark應用程序,包含驅(qū)動程序(一個Driver功能的代碼)和在集群的多個工作結(jié)點上運行的Executor代碼。

    (2)驅(qū)動程序:包含main入口函數(shù)并在main函數(shù)內(nèi)實例化SparkContext對象的應用程序稱為驅(qū)動應用程序。不說了,直接上代碼如下:

    Var logFile="YOUR_SPARK_HOME/README.md"http://本地文件目錄
    val conf=new SparkConf().setAppName("Simple Application");//給Application命名
    val sc=new SparkContext(conf);

    (3)Master(ClusterManager)管理者整個集群,目前Spark主要支持三種類型:Standlone模式,Mesos模式,Yarn模式。

    (4)Worker節(jié)點:運行Worker守護進程的集群結(jié)點。

    (5)任務執(zhí)行器(Executor):一個Worker節(jié)點上可能有多個Executor, 每個Executor都擁有固定的核心數(shù)量和堆棧大小。

    (6)作業(yè)(job)::包含多個Task(任務)組成的并行計算(并排的那些分區(qū))),往往由Spark的action觸發(fā)產(chǎn)生。在Spark中通過runJob方法向Spark集群中提交Job

    (7)階段(Stage):每個job會因為RDD之間的依賴關(guān)系被拆分成多個Task集合,其名稱稱為Stage,每一個Task集合,也可以叫TaskSet(任務集)

    補充:

    每個Application中可能有多個job,相互獨立。

    每個Worker可以起一個或多個Executor。
    每個Executor由若干core組成,每個Executor的每個core一次只能執(zhí)行一個Task。
    每個Task執(zhí)行的結(jié)果就是生成了目標RDD的一個partiton。

  4. 依賴于并行計算如何理解?

    4.1分區(qū)是并行計算的基本單位:一個原始數(shù)據(jù)分成了10個分區(qū),那么就可以同時并行這個10分區(qū),是不是可以這樣去理解?不一定,如果都是窄依賴,沒有問題,但其中會涉及到寬依賴,這其中就會產(chǎn)生分區(qū)與分區(qū)之間的數(shù)據(jù)進行交叉,反正不像同時完這10個分區(qū)數(shù)據(jù)這么快。

    4.2每個分區(qū)內(nèi)數(shù)據(jù)的計算當成一個并行任務,每個并行任務包含一個計算鏈,每一個CPU核心就去執(zhí)行這些計算連。直接,簡單,干脆,不玩虛的,上代碼理解計算鏈:

    rdd.map(line=>line.length).filter().等等之類的。

    如果這些計算鏈之間都是獨立的,而且互不影響,那么我們可以并行計算。我們可以將這些鏈條之間的關(guān)系定義為窄依賴(一對一依賴和范圍依賴)

  5. RDD為什么要劃分Stage,怎么劃分stage?

    如果子RDD一個分區(qū)內(nèi)的數(shù)據(jù)依賴于多個父RDD中分區(qū)的數(shù)據(jù),這個叫做寬依賴,或者叫做Shuffle依賴,那么如果有多個子RDD,每個子RDD都依賴多個父RDD中分區(qū)的數(shù)據(jù),我們是不是要想辦法把RDD數(shù)據(jù)保存起來,提供給這些子分區(qū)計算使用,否則是不是每個分區(qū)都要重新計算多個父RDD數(shù)據(jù),也在這個地方開始劃分Stage的原因。凡是遇到寬依賴,就劃分stage。

  6. Spark如何管理資源?

  7. Spark集群管理器分為三種,Standlone模式,Mesos模式,Yarn模式。這是重點,但又不是很重要,所以這地方不是十分了解,也沒有多大損失。

  8. Spark內(nèi)部如何調(diào)度?

    DAGScheduler是面向Stage的任務調(diào)度器,負責接收Spark應用提交的Job,根據(jù)RDD的依賴關(guān)系劃分Stage,并提交Stage給TaskScheduler

    TaskScheduler是面向Task的任務調(diào)度器,它接受DAGScheduler提交過來的TaskSets,然后把一個個Task提交到Work結(jié)點運行,每個Executor運行什么Task也是在此處分配的。

    最重要的就是這張圖了:

  9. 淺談Spark內(nèi)部運行機制

     (1)任何的Spark應用程序都包含Driver和Executor代碼。Spark應用程序首先在Driver初始化SparkContext。因為SparkContext是Spark應用程序通往集群的唯一途徑。在SparkContext里面包含了兩個調(diào)度器,一個是DAGScheduler和TaskScheduler,在創(chuàng)建SparkContext對象的同時也自動創(chuàng)建了這兩個類。

        (2)SparkContext初始化完成后,首先根據(jù)Spark的相關(guān)配置,想Cluster Master申請所需要的資源,然后在各個Worker結(jié)點初始化相應的Executor。Executor初始化完成后,Driver將通過對Spark應用程序中的RDD代碼進行解析,生成相應的RDD graph(RDD圖),該圖描述了RDD的相關(guān)信息及彼此之間的依賴關(guān)系。即是圖中第一個部分,這些RDD Objects

        (3)RDD圖構(gòu)建完畢后,Driver將提交給DAGScheduler進行解析。DAGScheduler在解析RDD圖的過程中,當遇到Action算子后將進行逆向解析,根據(jù)RDD之間的依賴關(guān)系,以及是否存在Shuffle,將RDD圖解析成一系列具有先后依賴關(guān)系的Stage。Stage以shuffle進行劃分,即如果兩個RDD之間存在依賴關(guān)系,DAGScheduler將會在這RDD之間拆分為兩個Stage進行執(zhí)行,且只有前一個Stage執(zhí)行完畢之后,才執(zhí)行后一個Stage。

       (4)DAGScheduler將劃分的一系列的Stage(TaskSet),按照Stage的先后順序依次提交給底層的調(diào)度器TaskScheduler執(zhí)行。

        (5)TaskScheduler接收到DAGScheduler的stage任務后,將會在集群環(huán)境中構(gòu)建一個TaskSetManager實例來管理Stage(TaskSet)的生命周期。

            (6)TaskSetManager將會把相關(guān)的計算代碼,數(shù)據(jù)資源文件等發(fā)送到相應的Executor上,并在相應的Executor上啟動線程池執(zhí)行。

         (7)在Task執(zhí)行的過程中,可能有部分應用程序涉及到I/0的輸入輸出,在每個Executor由相應的BlockManager進行管理,相關(guān)BlockManager的信息將會與Driver中的Blocktracker進行交互和同步。

            (8)在TaskThreads執(zhí)行的過程中,如果存在運行錯誤,或其他影響的問題導致失敗,TaskSetManager將會默認嘗試3次,嘗試均失敗后將上報TaskScheduler,TaskScheduler如果解決不了,在上報DAGScheduler,DAGScheduler將根據(jù)各個Worker結(jié)點的運行情況重新提交到別Executor中執(zhí)行。

        (9)TaksThread執(zhí)行完畢后,將把執(zhí)行的結(jié)果反饋給TaskSetManager,TaskSetManager反饋給TaskScheduler,TaskScheduler在上報DAGScheduler,DAGScheduler將根據(jù)是否還存在待執(zhí)行的的Stage,將繼續(xù)循環(huán)迭代提交給TaskScheduler去執(zhí)行。

        (10)待所有的Stage都執(zhí)行完畢后,將會最終達到應用程序的目標,或者輸出到文件,或者在屏幕顯示等,Driver的本次運行過程結(jié)束,等待用戶的其他指令或者關(guān)閉。

        (11)在用戶顯示關(guān)閉SparkContext,整個運行過程結(jié)束,相關(guān)的資源或被釋放,或被回收。

Spark這種運行形式有利于不同Application之間的資源調(diào)度,同時也就意味著不同的Application無法做到相互通信和信息交互。

            Driver負責所有任務調(diào)度,所以他應該盡可能地靠近Worker結(jié)點,能在同一個網(wǎng)絡中最后了。

10.Shuffle是怎么個過程?

只有當Shuffle依賴中父RDD所有分區(qū)的數(shù)據(jù)被計算和存儲完畢后,子RDD才會開始拉取需要的分區(qū)數(shù)據(jù)。這里將整個數(shù)據(jù)傳輸?shù)倪^程稱為Spark的Shuffle過程。在Shuffle過程中,把一個分區(qū)數(shù)據(jù)計算完畢到數(shù)據(jù)被寫入到磁盤的過程,稱為Shuffle寫過程。對應的,在子RDD某個分區(qū)計算的過程中,把所需的數(shù)據(jù)從父RDD拉取過來的過程,稱為Shuffle讀過程。

不論是Spark還是Hadoop,在對待shuffle的過程中有著諸多類似,一些概念可以直接套用,例如shuffle過程中,提供數(shù)據(jù)的一端稱作map端, map端生成的任務稱為mapper.對應的,接受數(shù)據(jù)的一端稱作reduce端,reduce端每個拉取數(shù)據(jù)的任務稱為reducer。Shuffle過程的本質(zhì)是將map端獲得的數(shù)據(jù)使用分區(qū)器進行劃分,并將數(shù)據(jù)發(fā)送給對應的reducer的過程。

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。


網(wǎng)頁題目:淺談Spark內(nèi)部運行機制-創(chuàng)新互聯(lián)
鏈接URL:http://weahome.cn/article/doeoee.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部