Spark Streaming源碼解讀之State管理之UpdataStateByKey和MapWithState解密


本期內容 :

  • 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的狀態

  

  

  

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM