1. <wbr id="cnjas"><legend id="cnjas"></legend></wbr>

          Linux培訓
          達內IT學院

          400-111-8989

          Spark on YARN客戶端模式作業運行全過程分析

          • 發布:Linux培訓
          • 來源:網絡
          • 時間:2015-07-03 21:00

          在前篇文章中我介紹了Spark on YARN集群模式(yarn-cluster)作業從提交到運行整個過程的情況(詳情見《Spark on YARN集群模式作業運行全過程分析》),我們知道Spark on yarn有兩種模式:yarn-cluster和yarn-client。這兩種模式作業雖然都是在yarn上面運行,但是其中的運行方式很不一樣,今天我就來談談Spark on YARN yarn-client模式作業從提交到運行的過程剖析。

          和yarn-cluster模式一樣,整個程序也是通過spark-submit腳本提交的。但是yarn-client作業程序的運行不需要通過Client類來封裝啟動,而是直接通過反射機制調用作業的main函數。下面就來分析:

          1、通過SparkSubmit類的launch的函數直接調用作業的main函數(通過反射機制實現),如果是集群模式就會調用Client的main函數。

          2、而應用程序的main函數一定都有個SparkContent,并對其進行初始化;

          3、在SparkContent初始化中將會依次做如下的事情:設置相關的配置、注冊MapOutputTracker、BlockManagerMaster、BlockManager,創建taskScheduler和dagScheduler;其中比較重要的是創建taskScheduler和dagScheduler。在創建taskScheduler的時候會根據我們傳進來的master來選擇Scheduler和SchedulerBackend。由于我們選擇的是yarn-client模式,程序會選擇YarnClientClusterScheduler和YarnClientSchedulerBackend,并將YarnClientSchedulerBackend的實例初始化YarnClientClusterScheduler,上面兩個實例的獲取都是通過反射機制實現的,YarnClientSchedulerBackend類是CoarseGrainedSchedulerBackend類的子類,YarnClientClusterScheduler是TaskSchedulerImpl的子類,僅僅重寫了TaskSchedulerImpl中的getRackForHost方法。

          4、初始化完taskScheduler后,將創建dagScheduler,然后通過taskScheduler.start()啟動taskScheduler,而在taskScheduler啟動的過程中也會調用SchedulerBackend的start方法。在SchedulerBackend啟動的過程中將會初始化一些參數,封裝在ClientArguments中,并將封裝好的ClientArguments傳進Client類中,并client.runApp()方法獲取Application ID。

          5、client.runApp里面的做是和前面客戶端進行操作那節類似,不同的是在里面啟動是ExecutorLauncher(yarn-cluster模式啟動的是ApplicationMaster)。

          6、在ExecutorLauncher里面會初始化并啟動amClient,然后向ApplicationMaster注冊該Application。注冊完之后將會等待driver的啟動,當driver啟動完之后,會創建一個MonitorActor對象用于和CoarseGrainedSchedulerBackend進行通信(只有事件AddWebUIFilter他們之間才通信,Task的運行狀況不是通過它和CoarseGrainedSchedulerBackend通信的)。然后就是設置addAmIpFilter,當作業完成的時候,ExecutorLauncher將通過amClient設置Application的狀態為FinalApplicationStatus.SUCCEEDED。

          7、分配Executors,這里面的分配邏輯和yarn-cluster里面類似,就不再說了。

          8、最后,Task將在CoarseGrainedExecutorBackend里面運行,然后運行狀況會通過Akka通知CoarseGrainedScheduler,直到作業運行完成。

          9、在作業運行的時候,YarnClientSchedulerBackend會每隔1秒通過client獲取到作業的運行狀況,并打印出相應的運行信息,當Application的狀態是FINISHED、FAILED和KILLED中的一種,那么程序將退出等待。

          10、最后有個線程會再次確認Application的狀態,當Application的狀態是FINISHED、FAILED和KILLED中的一種,程序就運行完成,并停止SparkContext。整個過程就結束了。

          預約申請免費試聽課

          填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

          上一篇:Spark和Hadoop作業之間的區別
          下一篇:MapReduce:詳細介紹Shuffle的執行過程

          社會化海量數據采集爬蟲框架搭建

          《Hadoop基礎教程》之初識Hadoop

          • 掃碼領取資料

            回復關鍵字:視頻資料

            免費領取 達內課程視頻學習資料

          • 視頻學習QQ群

            添加QQ群:1143617948

            免費領取達內課程視頻學習資料

          Copyright ? 2018 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

          選擇城市和中心
          黑龍江省

          吉林省

          河北省

          湖南省

          貴州省

          云南省

          廣西省

          海南省

          欧美做爰视频免费播放_做暖全过程免费的视频_性爱免费视频 百度 好搜 搜狗
          <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>