本期內容:函數
1,Spark Streaming數據清理緣由和現象對象
2,Spark Streaming數據清理代碼解析生命週期
由於RDD是由DStream產生的,對RDD的操做都是基於對DStream的操做,DStream負責RDD的生命週期。咱們通常會調用DStream的foreachRDD操做,進行輸出到HDFS的操做。foreachRDD操做會實例化ForEachDStream對象。ci
在ForEachDStream的generateJob方法中,調用了傳入的方法foreachFunc,做用在這個BatchTime生成的RDD。rem
在JobGenerator類中處理消息的函數processEvent中,當接收到清除元數據消息,則調用clearMetadata方法,當接收到清除checkpoint數據,則調用clearCheckpointData方法。io
clearMetadata方法中,先清除DStreamGraph的metadata信息,而後根據是否進行checkpoin操做,或是發送DoCheckpoint消息,或是清除掉ReceiverTracker和InputInfoTracker上以前的數據。foreach
DStreamGraph的clearMetadata方法會遍歷並調用全部OutputStream的clearMetadata方法,把以前persist的RDD進行unpersist操做,從generatedRDDs中清除掉,若是是BlockRDD的話,還會調用removeBlocks方法來移除,最後刪除它的依賴dependencies.foreach(_.clearMetadata(time))。遍歷
當前Batch完成後會發送ClearMetadata消息。meta
onBatchCompletion方法是被handleJobComplation方法調用的。方法
handleJobComplation方法是接收到JobCompleted消息時調用的。
在JobHandler的執行過程當中,先會發送JobStarted消息,而後調用job的run方法,最後發送JobCompleted消息。