本篇文章為大家展示了如何進行JobScheduler內幕實現和深度思考,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。
DStream的foreachRDD方法,實例化ForEachDStream對象,并將用戶定義的函數foreachFunc傳入到該對象中。foreachRDD方法是輸出操作,foreachFunc方法會作用到這個DStream中的每個RDD。
/** |
ForEachDStream對象中重寫了generateJob方法,調用父DStream的getOrCompute方法來生成RDD并封裝Job,傳入對該RDD的操作函數foreachFunc和time。dependencies方法定義為父DStream的集合。
/** |
DStreamGraph的generateJobs方法中會調用outputStream的generateJob方法,就是調用ForEachDStream的generateJob方法。
def generateJobs(time: Time): Seq[Job] = { |
DStream的generateJob定義如下,其子類中只有ForEachDStream重寫了generateJob方法。
/** |
DStream的print方法內部還是調用foreachRDD來實現,傳入了內部方法foreachFunc,來取出num+1個數后打印輸出。
/** |
總結:JobScheduler是SparkStreaming 所有Job調度的中心,內部有兩個重要的成員:
JobGenerator負責Job的生成,ReceiverTracker負責記錄輸入的數據源信息。
JobScheduler的啟動會導致ReceiverTracker和JobGenerator的啟動。ReceiverTracker的啟動導致運行在Executor端的Receiver啟動并且接收數據,ReceiverTracker會記錄Receiver接收到的數據meta信息。JobGenerator的啟動導致每隔BatchDuration,就調用DStreamGraph生成RDD Graph,并生成Job。JobScheduler中的線程池來提交封裝的JobSet對象(時間值,Job,數據源的meta)。Job中封裝了業務邏輯,導致最后一個RDD的action被觸發,被DAGScheduler真正調度在Spark集群上執行該Job。
上述內容就是如何進行JobScheduler內幕實現和深度思考,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。