第6课:Spark Streaming源码解读之Job动态生成和深度思考

原创
2016/05/14 12:43
阅读数 186

本課內容是

  1. Job 生成的深度思考 
  2. Job 生成源碼解析

Job 生成的深度思考 

一切不是流處理的數據或者是跟流處理沒有關係的數據,最終都會變成沒有價值的數據。

意義上的流處理其實就是批處理加上時間維度構成的。比如說作業生成一般都會有定時任務,是批處理 (Batch Process) 加上定時器 (Scheduler)或者是定條件 (Event Trigger)來觸發作業。Spark Streaming 的 Job 是根據固定的時間會自動生成Job,所以一切的處理可以說是流處理,只是時間長短已而。

Spark Streaming 要基於時間不斷的去管理我們生成的作業,是用一個方法去定義要處理的業務邏輯,如果方法不調用的話,就執行不了就不會生成Job。

所以在這個時候我們每個作業又由於有 Action 級別的操作,Action  級別是對 DStream 進行操作,它是邏輯級別,它生成每個 Job 放在對列的時候,他一定會被翻譯成基於RDD 的操作,這個基於RDD 的操作的Job最後一個 RDD 一定是 Action 級別的,最後就會觸發然後生成作業。

 

Job 生成源碼解析

 

我們從最基本的那個程序開始看。

 

 

這個就是我們所說的 Batch Duration, 每5秒鍾 JobGenerator 都會產生一個 Job, 這個 Job 是邏輯級別,所謂邏輯級別就是,說有這個 Job, 並且這個 Job 具體該怎麼去做, 但是他還沒有做, 誰去做 ,是由底層的物理級別的 RDD 的 Action 觸發的,Spark Streaming 是基於 DStream 的 依賴關係,DStream 的 Action 也是邏輯級別的。

SparkStreaming.start() 方法 里面調度了 scheuler.start( ) 方法

JobScheduler 的 Start( ) 方法 里面調度了 receiverTracker and jobGenerator 的 start( ) 方法

然後再看一下 JobGenerator 的 start( ) 方法,里面有一個 eventLoop, 消息循環體,因為它不斷的生成 Job

如果所有都是第一次的話,就會調度 startFirstTime( ) 方法

里面有一個Timer 是創建一個新的RecurringTimer的類

然後里面的start()方法會調度thread.start( ) 開一條新的 Thread.

回去 JobGenerator 的 start( ) 方法,創建新的 eventLoop 然後調度一個 onReceiver()方法,這個方法里會調度 processEvent( )方法

這個JobGenerator 類里的 generateJobs方法做了5個步驟:

第一步,創建 receiverTacker,跟據我們的時間,分配時間數據,他接收到是元數據。metadata,based on metadata to allocate the block

第二步,基於 DStreamGraph, RDD 的依賴關係,創建Job


 

把業務邏輯 放在一個 functional variable: jobFunc里

這里有一個 getOrCompute 方法,里面就是把 基於時間不斷的創建 DStreamRDD

第三步,獲取JobSechduler的 Input Into

第四步,如果成功的話,要獲取的數據,然後生成一個 JobSet submitJobSet( ) 方法里有創建 JobHandler

這是一個 runnable 接口,這時候 Job 就生成了。

第五步,進行checkpoint

總結

1. SparkStreaming.start( ) call jobScheduler.start( ) and receiverTracker.start( )

2. 在 JobGenerator的start( )方法里會調度其他的方法,例如:eventLoop.start( ), 然後會判斷有沒有 checkpoint,沒有的話就直接調度startFirstTime( ) 方法。這里還會創建一個新的 eventLoop 的實例調度里面的 onReceiver( )方法,onReceiver 方法是一個abstract 級別的方法,在這里的具體實現是調度 JobGenerator.generateJob( )方法。這個很關鍵,因為有里面發生了五個步驟:其中有調度基於 DStreamGraph 的 generateJob( )方法,創建不同的 RDD,還有就是調度jobScheduler 的 submitJobSets 和 創建 JobHandler 這個 runnable 接口 去 觸發作業的執行。

Job 生成流程圖

 

Thanks for reading

Janice

——————————————————————————————–
Reference: DT大数据梦工厂SPARK版本定制課程 – 第6课:Spark Streaming源码解读之Job动态生成和深度思考

 

Sharing is Good, Learning is Fun.


今天很残酷、明天更残酷,后天很美好。但很多人死在明天晚上、而看不到后天的太阳。 –马云 Jack Ma


 

展开阅读全文
加载中

作者的其它热门文章

打赏
2
3 收藏
分享
打赏
0 评论
3 收藏
2
分享
返回顶部
顶部