Spark動態更新廣播變數

2021-10-08 09:00:23 字數 734 閱讀 8408

既然無法更新,那麼只能動態生成,應用場景有實時風控中根據業務情況調整規則庫、實時日誌etl服務中獲取最新的日誌格式以及字段變更等。

@volatile private var instance: broadcast[array[int]] = null

//獲取廣播變數單例物件

def getinstance(sc: sparkcontext, ctime: long): broadcast[array[int]] =

}} instance

}//載入要廣播的資料,並更新廣播變數

def updatebroadcastvar(sc: sparkcontext, blocking: boolean = false): unit =

}def fetchlastestdata() =

val dataformat = fastdateformat.getinstance("yyyy-mm-dd hh:mm:ss")

......

stream.foreachrdd

rdd.foreachpartition }

注意:上述是給出了乙個實現思路的偽**,實際生產中還需要進行一定的優化。

此外,這種方式有一定的弊端,就是廣播的資料因為是週期性更新,所以存在一定的滯後性。廣播的週期不能太短,要考慮外部儲存要廣播資料的儲存系統的壓力。具體的還要看具體的業務場景,如果對實時性要求不是特別高的話,可以採取這種,當然也可以參考flink是如何實現動態廣播的。

Spark的廣播變數

將每個task都要計算的資料設定成廣播變數,如果不設定成廣播變數,則每個 task 都會儲存乙份這樣一模一樣的資料,這樣就占用了很多的儲存空間,將共享變數設定成廣播變數後只在乙個 excuter 裡面儲存這樣乙份 共享資料,這個 excuter 裡面的task 計算的時候共享這樣乙份資料,這樣就減少...

Spark廣播變數Broadcast

spark廣播變數的目的是讓每個worker節點在記憶體中儲存乙個唯讀的物件,節省了在每次tasks建立傳送到woker節點中攜帶該物件副本的網路io。一些需要在多個task中使用的,不可變的大資料集合物件尤其適合被定義程廣播變數。廣播變數的定義方法,fron spark官網 val broadca...

Spark之廣播變數

廣播變數 1.客戶端的 driver 中有乙個 list 如果 executor task要用到這個 list 這時候 在driver 建立乙個 list廣播變數 這樣會在 executor 啟動乙個 blockmanager 來管理 driver廣播的 變數 在driver一廣播變數 execut...