打通Spark系統運行內幕機制迴圈流程(DT大資料夢工廠)

來源:互聯網
上載者:User

標籤:打通spark系統運行內幕機制迴圈流程

內容:

1、TaskScheduler工作原理;

2、TaskScheduler源碼解密;

Stage裡面有一系列任務,裡面的任務是並行計算的,邏輯是完全相同的,只不過是處理的資料不同而已。

DAGScheduler會以Task方式提交給TaskScheduler(任務調度器)。

650) this.width=650;" src="/e/u261/themes/default/images/spacer.gif" style="background:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center;border:1px solid #ddd;" alt="spacer.gif" />

==========TaskScheduler工作原理解密============

1、DAGScheduler在提交TaskSet給底層調度器的時候是面向介面TaskScheduler,這符合物件導向中依賴抽象,而不依賴具體的原則,帶來了底層資源調度器的可插拔性,導致Spark可以運行在眾多的資源調度器模式上,例如Standalone、YARN、Mesos、Local、EC2以及其它自訂的資源調度器,在Standalone的模式下,我們聚焦於TaskSchedulerImpl;

2、在SparkContext執行個體化的時候,通過createTaskScheduler來建立TaskSchedulerImpl和SparkDeploySchedulerBackend

case SPARK_REGEX(sparkUrl) =>
  val scheduler = new TaskSchedulerImpl(sc)
  val masterUrls = sparkUrl.split(",").map("spark://" + _)
  val backend = new SparkDeploySchedulerBackend(scheduler, sc, masterUrls)
  scheduler.initialize(backend)
  (backend, scheduler)

在TaskSchedulerImpl的initialize方法中把SparkDeploySchedulerBackend傳進來從而賦值為TaskSchedulerImpl的,在TaskSchedulerImpl 調用start方法的時候會調用backend.start方法,在start方法中會最終註冊應用程式;

3、TaskScheduler的核心任務是提交TaskSet到叢集運算並彙報結果:

1)為TaskSet建立和維護一個TaskSetManager並追蹤任務的本地性以及錯誤資訊;

2)遇到Straggle任務的時候會放到其它的節點進行重試;

3)TaskScheduler必須向DAGScheduler彙報執行情況,包括在shuffle輸出lost的時候報告fetch fail等資訊;

4、TaskScheduler內部會握有SchedulerBackend,從Standalone的模式來講,具體實現是SparkDeploySchedulerBackend;

5、SparkDeploySchedulerBackend 在啟動的時候構造AppClient執行個體,並在該執行個體start的時候啟動了ClientEndpoint這個訊息迴圈體,ClientEndpoint 在啟動的時候會向Master註冊當前程式,而SparkDeploySchedulerBackend 的父類CoarseGrainedSchedulerBackend在start的時候會執行個體化類型為DriverEndpoint(這就是我們程式運行時候經典對象的Driver)的訊息迴圈體,SparkDeploySchedulerBackend專門負責收集Worker上的資源資訊,當ExecutorBackend啟動的時候會發送RegisterExecutor資訊向DriverEndpoint註冊,此時SparkDeploySchedulerBackend就掌握了當前應用程式擁有的計算資源,TaskScheduler就是通過SparkDeploySchedulerBackend 擁有的計算資源來具體運行Task;

6、SparkContext、DAGScheduler、TaskSchedulerImpl、SparkDeploySchedulerBackend在應用程式啟動的時候,只執行個體化一次,應用程式存在期間,始終存在這些對象;

大總結:在SparkContext執行個體化的時候調用createTaskScheduler來建立TaskSchedulerImpl和SparkDeployShedulerBackend,同時在Spark執行個體化的時候,會調用TaskSchedulerImpl的start,start方法中會調用SparkDeployShedulerBackend的start,在該方法中會建立AppClient對象,並調用AppClient對象的start方法,在該方法中會建立ClientEndpoint,在建立ClientEndpoint會傳入Command來指定具體為當前應用程式啟動的executor進程的入口類的名稱為CoarseGrainedExecutorBackend,然後ClientEndpoint啟動並通過tryRegisterMaster來註冊當前的應用程式到Master中,Master接收到註冊資訊後,如果可以運行程式則會為該程式產生JobID,並通過schedule()來分配計算資源,具體計算資源的分配是通過應用程式的運行方式、memory、cores等配置資訊來決定,最後Master會發送指令給Worker,Worker為當前應用程式分配計算資源時會首先分配ExecutorRunner,ExecutorRunner內部會通過Thread的方式構建ProcessBuiler來啟動另外一個JVM進程,這個JVM進程啟動時候載入的main方法所在的類的名稱就是在建立ClientEndpoint會傳入的Command來指定具體名稱為CoarseGrainedExecutorBackend的類,此時,JVM看到在通過ProcessBuilder啟動的時候獲得了CoarseGrainedExecutorBackend載入並調用裡面的main方法,在main方法中會執行個體化CoarseGrainedExecutorBackend本身這個訊息迴圈體,而CoarseGrainedExecutorBackend在執行個體化的時候會通過回調onStart向DriverEndpoint發送registerExecutor來註冊當前的CoarseGrainedExecutorBackend ,此時DriverEndpoint收到該註冊資訊並儲存在了SparkDeploySchedulerBackend執行個體的記憶體資料結構中,這樣Driver就獲得了計算資源。

650) this.width=650;" src="/e/u261/themes/default/images/spacer.gif" style="background:url("/e/u261/lang/zh-cn/images/localimage.png") no-repeat center;border:1px solid #ddd;" alt="spacer.gif" />

作業:

把大總結畫流程圖。

王家林老師名片:

中國Spark第一人

新浪微博:http://weibo.com/ilovepains

公眾號:DT_Spark

部落格:http://blog.sina.com.cn/ilovepains

手機:18610086859

QQ:1740415547

郵箱:[email protected]


本文出自 “一枝花傲寒” 部落格,謝絕轉載!

打通Spark系統運行內幕機制迴圈流程(DT大資料夢工廠)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.