本期內容 :
- UpdateStateByKey解密
- MapWithState解密
Spark Streaming是實現State狀態管理因素:
01、 Spark Streaming是按照整個BachDuration划分Job的,每個BachDuration都會產生一個Job,為了符合業務操作的需求,
需要計算過去一個小時或者一周的數據,但是由於數據量大於BachDuration,此時不可避免的需要進行狀態維護
02、 Spark 的狀態管理其實有很多函數,比較典型的有類似的UpdateStateByKey、MapWithState方法來完成核心的步驟
一、 UPdateStateByKey :
在已有歷史數據中的狀態進行更新,具體怎么更新就取決於UPdateFunc函數進行操作,返回一個DSteam類型
最終還是使用DSteam操作的,會不斷的產生數據
生成RDD的過程,計算方法
對傳入的數據,通過K對所有數據進行集合:
優點: 每次都需要對RDD進行計算,確實需要對RDD進行計算,RDD怎么算,就對其進行Cogroup
缺點: 性能問題,因為需要每一次都要對所有數據進行掃描,最終變成CogroupedRDD,隨着數據量的增加速度也越慢
二、 MapWithState :
返回的是DStreams的時候,進行狀態更新與維護歷史狀態是基於K進行的,具體更新的函數、超時時間、初始狀態等都是由StateSpec(封裝了更新函數)進行獲取、
更新、刪除,相當於記錄在一張表中,對表中的哪個Key進行操作使用歷史數據,State是表名稱或者索引,獲取、更新數據,維護狀態。
所有的Partition都是由MapWithStateRDDRecord所代表的,數據結構是StateMap ,維護的是基於K的狀態