本課內容是
- Job 生成的深度思考
- 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
本文深入探讨了Spark Streaming中Job的生成机制与源码解析,包括流处理的意义、Job生成的具体步骤及其背后的逻辑,以及如何通过理解这些机制来优化Spark Streaming应用。

1431

被折叠的 条评论
为什么被折叠?



