亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Spark2.x中SparkContext的原理是什么

發布時間:2021-07-03 18:49:04 來源:億速云 閱讀:479 作者:Leah 欄目:大數據

本篇文章給大家分享的是有關Spark2.x中SparkContext的原理是什么,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

  1. TaskScheduler初始化、向SparkMaster節點進行Application、及Executor反向注冊等(核心);

  2. DAGScheduler創建和初始化;

  3. SparkUI界面的創建和初始化;

    下面我就結合源碼詳細講解SparkContext的原理和加載過程,這里說明一下我們生產環境用的是Spark2.x,這里就拿Spark2.2.0的源碼進行講解,這里引用網上的一張SparkContext原理剖析圖:

Spark2.x中SparkContext的原理是什么

一.TaskScheduler:

  在源碼SparkContext.scala中首先調用函數createTaskScheduler()創建TaskScheduler;

Spark2.x中SparkContext的原理是什么

    在createTaskScheduler中會根據你的提交模式,分別進行對應模式下的代碼,不同的提交模式,會創建不同的TaskScheduler,這里我們以standalone模式進行講解:

Spark2.x中SparkContext的原理是什么

    函數createTaskScheduler先去創建一個TaskSchedulerImpl(它其實就是TaskScheduler),然后創建SparkDeploySchedulerBackend(它在底層會受TaskSchedulerImp的控制,實際上負責與Master的注冊,Executor的反注冊,Task發送到Executor等操作),然后調用TaskSchedulerImpl的initialize()方法,代碼如下:

Spark2.x中SparkContext的原理是什么

    最后一行代碼會根據不同的調度策略,調用函數buildPools去創建調度池。

    TaskScheduler和DAGScheduler創建完成后,調用TaskScheduler的start()函數啟動,其實函數內部是調用了SchedulerBackend的start()函數,

Spark2.x中SparkContext的原理是什么

    start()函數中,先是從spark-submit命令行中獲取用戶提交的一些參數進行了初始化,比如driverUrl、extraJavaOpts、classPathEntries、libraryPathEntries等,通過這些參數創建ApplicationDescription實例,這個ApplicationDescription非常重要,它代表了當前用戶提交的application的一切情況,包括application最大需要多少CPU Core,每個slave上需要多少內存等信息。最后去創建一個APPClient實例,由于這里是Standalone模式所以這里創建一個StandaloneAppClient實例,它負責為application與Spark集群進行通信。它會接收一個Spark Master的URL,以及一個application,和一個集群事件的監聽器,以及各種事件發生時監聽器的回調函數,如下圖:

Spark2.x中SparkContext的原理是什么

    至此TaskScheduler啟動完成,調用waitForRegistration()函數等待注冊完成;

二、DAGScheduler的創建

    DAGScheduler類實現了面向stage的調度機制的高層次的調度層,代碼位置:

Spark2.x中SparkContext的原理是什么

    DAGScheduler創建主要干了以下幾件事:

    1).每個job計算一個stage的DAG(有向無環圖),stage是根據action進行劃分的;

    2).追蹤RDD的stage輸出,是否寫入磁盤或者內存等存儲介質中;

    3).尋找一個消耗(最優、最小)調度機制來運行job;

    4).負責將stage封裝成Taskset提交到TaskSchdulerImpl,通過集群來運行一批task,這里注意:每一批task運行相同的代碼,只是處理不同部分的數據,這里才體現了分布式計算;

    5).負責每個task運行的最佳位置,根據當前緩存狀態,將這些最佳位置提交給TaskSchdulerImpl;

    6).處理由于shuffle導致文件輸出丟失導致的失敗,該stage會被重新提交;如果不是由于shuffle內部導致的失敗,例如OOM,會被TaskSchdulerImpl處理,多次重試每一個task,如果最后還是不行,取消stage運行,最后整個app掛掉。

三、SparkUI的創建

    這里是SparkContext初始化的最后一步,調用SparkUI中的函數createLiveUI進行界面的創建,默認綁定了4040端口,能顯示Application的運行狀態,這里會啟動一個jetty服務器來顯示網頁,代碼位置:

Spark2.x中SparkContext的原理是什么  這里注冊一個監聽SparkListenerBusts,即所有spark消息SparkListenerEvents 被異步的發送給它. ,這個類主要功能如下:

    1).保存有消息隊列,負責消息的緩存

    2).保存有注冊過的listener,負責消息的分發


補充下yarn常用的三種調度策略:

?1).FIFO Scheduler:

    把應用按提交的順序排成一個隊列,這是一個先進先出隊列,在進行資源分配的時候,先給隊列中最頭上的應用進行分配資源,待最頭上的應用需求滿足后再給下一個分配,以此類推。

2).Fair Scheduler:

?    在Fair調度器中,我們不需要預先占用一定的系統資源,Fair調度器會為所有運行的job動態的調整系統資源。如下圖所示,當第一個大job提交時,只有這一個job在運行,此時它獲得了所有集群資源;當第二個小任務提交后,Fair調度器會分配一半資源給這個小任務,讓這兩個任務公平的共享集群資源。

3).Capacity Scheduler:

    而對于Capacity調度器,有一個專門的隊列用來運行小任務,但是為小任務專門設置一個隊列會預先占用一定的集群資源,這就導致大任務的執行時間會落后于使用FIFO調度器時的時間。

以上就是Spark2.x中SparkContext的原理是什么,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

南开区| 龙里县| 苏尼特右旗| 潍坊市| 永登县| 乌拉特中旗| 鄯善县| 苍南县| 海口市| 岳阳县| 纳雍县| 黄平县| 固始县| 鸡泽县| 固阳县| 璧山县| 新乡市| 将乐县| 巴林左旗| 德阳市| 上蔡县| 汉沽区| 中方县| 西乌珠穆沁旗| 宁武县| 应城市| 吐鲁番市| 平原县| 镇坪县| 永吉县| 上栗县| 新邵县| 安乡县| 丘北县| 小金县| 泸水县| 南充市| 阿图什市| 沙河市| 九龙城区| 保定市|