廣播變數和累加器的使用場景

2021-09-17 18:31:07 字數 708 閱讀 7547

對於經常用到變數值,在分布式計算當中,多個點檢task一定會多次請求這個變數就會產生大量網路io,會影響效率,這時就可以使用廣播變數的方式將資料廣播到對應的exector端,之後在使用該變數時就可以直接向本機獲取該值計算即可。

優點:不用從driver端拉取資料了,也不用從其他節點拉取資料了,只需要從自己的exector端獲取資料就可以了,減少網路io,提高執行效率。

缺點:資料一旦廣播出去,後期資料發生變化,無法同步到executor端,需要終止程式才可以,有些場景可以使用redis。

累加器是spark提供使用者多個task併發的對某個變數進行操作,task可以定義累加器進行操作,不能讀取其值,只有driver端才能讀取,累加器可以看做乙個靜態全域性變數。

應用場景:

能夠準確的統計資料的各種資料,例如:可以統計出符合userid的記錄數在同乙個時間段內產生了多少次購買,可以使用etl進行資料的清洗,並使用accumulator來進行資料的統計。

作為除錯工具,能夠觀察每個task的資訊,通過累加器可以在sparkui觀察到每次task所處理的記錄數。

累加器用來對資訊進行聚合,通常在向spark傳遞函式時,比如map()或者filter()傳條件時,可以使用驅動器程式中定義的變數,但是集群中執行的每個任務都會得到這些變數的乙份新的副本, 更新這些副本的值也不會影響驅動器中的對應變數。 如果我們想實現所有分片處理時更新共享變數的功能,那麼累加器可以實現我們

想要的效果。

關於廣播變數和累加器

廣播變數 groadcast varible 為唯讀變數,使用廣播變數的好處 每個節點的executor有乙個副本,不是每個task有乙個副本,可以優化資源提高效能,比如機器學習的時候。累加器 累加器可以在各個executor之間共享,修改,其中有幾種建立方法 objectaccumulatorte...

10 累加器和廣播變數

在建立函式時,如果需要捕獲自由變數,那麼包含指向 獲變數的引用的函式就被稱為閉包函式。在實際計算時,spark 會將對 rdd 操作分解為 task,task 執行在 worker node 上。在執行之前,spark 會對任務進行閉包,如果閉包內涉及到自由變數,則程式會進行拷貝,並將副本變數放在閉...

spark RDD累加器和廣播變數

在預設情況下,當spark在集群的多個不同節點的多個任務上並行執行乙個函式時,它會把函式中涉及到的每個變數,在每個任務 上都生成乙個副本。但是,有時候需要在多個任務之間共享變數,或者在任務 task 和任務控制節點 driver program 之間共享變數。為了滿足這種需求,spark提供了兩種型...