SparkStreaming從入門到放棄(四)

從job角度看sparkStreaming

回顧前文,JobGenerator 維護了一個定時器,週期就是我們剛剛提到的 batchDuration,定時爲每個 batch 生成 RDD DAG 的實例,DStreamGraph.generateJobs(time) 將返回一個 Seq[Job],其中的每個 Job 是一個 ForEachDStream 實例的 generateJob(time) 返回的結果JobScheduler 收到 jobSet處理邏輯是 job => jobExecutor.execute(new JobHandler(job))然後是run();

Spark Streaming 裏也有一個 Job,但此 Job 非彼 JobSpark Streaming 裏的 Job 更像是個 Java 裏的 Runnable,可以 run() 一個自定義的 func .

回到JobGenerator啓動,ssc.start()啓動後,會JobGenerator.start(),會先判斷是否存在checkpoints,否則會先重啓。

JobGenerator 維護了一個定時器,會定時發送消息,導致結束消息,調用generateJobs(time)催生job生成流程5個步驟:

 

new RecurringTimer(clock, ssc.graph.batchDuration.milliseconds,
      longTime => eventLoop.post(GenerateJobs(new Time(longTime))), "JobGenerator")

 

  1. 要求 ReceiverTracker 將目前已收到的數據進行一次 allocate,即將上次 batch 切分後的數據切分到到本次新的 batch
  2. 要求 DStreamGraph 複製出一套新的 RDD DAG 的實例,具體過程是:DStreamGraph 將要求圖裏的尾 DStream 節點生成具體的 RDD 實例,並遞歸的調用尾 DStream 的上游 DStream 節點……以此遍歷整個 DStreamGraph,遍歷結束也就正好生成了 RDD DAG 的實
  3. 獲取第 1 步 ReceiverTracker 分配到本 batch 的源頭數據的 meta 信息
  4. 將第 2 步生成的本 batch RDD DAG,和第 3 步獲取到的 meta 信息,一同提交給 JobScheduler 異步執行
  5. 只要提交結束(不管是否已開始異步執行),就馬上對整個系統的當前運行狀態做一個 checkpoint
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章