国产无码免费,人妻口爆,国产V在线,99中文精品7,国产成人无码AA精品一,制度丝袜诱惑av,久久99免费麻辣视频,蜜臀久久99精品久久久久久酒店
        訂閱
        糾錯
        加入自媒體

        深度解析Spark底層執行原理(建議收藏)

        2021-03-13 08:49
        園陌
        關注

        Spark簡介

        Apache Spark是用于大規模數據處理的統一分析引擎,基于內存計算,提高了在大數據環境下數據處理的實時性,同時保證了高容錯性和高可伸縮性,允許用戶將Spark部署在大量硬件之上,形成集群。

        Spark源碼從1.x的40w行發展到現在的超過100w行,有1400多位大牛貢獻了代碼。整個Spark框架源碼是一個巨大的工程。下面我們一起來看下spark的底層執行原理。

        Spark運行流程

        Spark運行流程

        具體運行流程如下:

        SparkContext 向資源管理器注冊并向資源管理器申請運行Executor

        資源管理器分配Executor,然后資源管理器啟動Executor

        Executor 發送心跳至資源管理器

        SparkContext 構建DAG有向無環圖

        將DAG分解成Stage(TaskSet)

        把Stage發送給TaskScheduler

        Executor 向 SparkContext 申請 Task

        TaskScheduler 將 Task 發送給 Executor 運行

        同時 SparkContext 將應用程序代碼發放給 Executor

        Task 在 Executor 上運行,運行完畢釋放所有資源

        1. 從代碼角度看DAG圖的構建Val lines1 = sc.textFile(inputPath1).map(...).map(...)

        Val lines2 = sc.textFile(inputPath2).map(...)

        Val lines3 = sc.textFile(inputPath3)

        Val dtinone1 = lines2.union(lines3)

        Val dtinone = lines1.join(dtinone1)

        dtinone.saveAsTextFile(...)

        dtinone.filter(...).foreach(...)

        上述代碼的DAG圖如下所示:

        構建DAG圖

        Spark內核會在需要計算發生的時刻繪制一張關于計算路徑的有向無環圖,也就是如上圖所示的DAG。

        Spark 的計算發生在RDD的Action操作,而對Action之前的所有Transformation,Spark只是記錄下RDD生成的軌跡,而不會觸發真正的計算。

        2. 將DAG劃分為Stage核心算法

        一個Application可以有多個job多個Stage:

        Spark Application中可以因為不同的Action觸發眾多的job,一個Application中可以有很多的job,每個job是由一個或者多個Stage構成的,后面的Stage依賴于前面的Stage,也就是說只有前面依賴的Stage計算完畢后,后面的Stage才會運行。

        劃分依據:

        Stage劃分的依據就是寬依賴,像reduceByKey,groupByKey等算子,會導致寬依賴的產生。

        回顧下寬窄依賴的劃分原則:  

        窄依賴:父RDD的一個分區只會被子RDD的一個分區依賴。即一對一或者多對一的關系,可理解為獨生子女。 常見的窄依賴有:map、filter、union、mapPartitions、mapValues、join(父RDD是hash-partitioned)等。      

        寬依賴:父RDD的一個分區會被子RDD的多個分區依賴(涉及到shuffle)。即一對多的關系,可理解為超生。常見的寬依賴有groupByKey、partitionBy、reduceByKey、join(父RDD不是hash-partitioned)等。

        核心算法:回溯算法

        從后往前回溯/反向解析,遇到窄依賴加入本Stage,遇見寬依賴進行Stage切分。

        Spark內核會從觸發Action操作的那個RDD開始從后往前推,首先會為最后一個RDD創建一個Stage,然后繼續倒推,如果發現對某個RDD是寬依賴,那么就會將寬依賴的那個RDD創建一個新的Stage,那個RDD就是新的Stage的最后一個RDD。
        然后依次類推,繼續倒推,根據窄依賴或者寬依賴進行Stage的劃分,直到所有的RDD全部遍歷完成為止。

        1  2  下一頁>  
        聲明: 本文由入駐維科號的作者撰寫,觀點僅代表作者本人,不代表OFweek立場。如有侵權或其他問題,請聯系舉報。

        發表評論

        0條評論,0人參與

        請輸入評論內容...

        請輸入評論/評論長度6~500個字

        您提交的評論過于頻繁,請輸入驗證碼繼續

        暫無評論

        暫無評論

          人工智能 獵頭職位 更多
          掃碼關注公眾號
          OFweek人工智能網
          獲取更多精彩內容
          文章糾錯
          x
          *文字標題:
          *糾錯內容:
          聯系郵箱:
          *驗 證 碼:

          粵公網安備 44030502002758號

          主站蜘蛛池模板: 阜阳市| 日本三级久久| 东明县| 永久黄片| AV一本| 惠安县| 溆浦县| 中文字幕av久久爽Av| 无码岛国| 国产中文在线| 国产精品V在线播放| 亚洲熟妇色| 沅江市| 超碰97在线免费观看| 69精品| 金沙县| 日韩无码专区| 亚洲综合图片区| 亚洲爽图| 欧美性交网| 牡丹江市| 超碰人人人| 超浪熟女在线| 榆中县| 岛国免费视频| jiZZjiZZ欧美69| 铁岭市| 壤塘县| 一区二区水蜜桃| 精品老熟妇| 阿瓦提县| 亚洲最大成人综合网| 婷婷综合久久| 苍梧县| 天天日天天爽| 肉大榛一出一进免费观看| 美女黄区| 亚洲熟女视频| 宁津县| 日本无码一区二区| 国产精品a久久久久|