Spark共享變量-Broadcast廣播變量介紹及scala實現

通常情況下,當1個function傳遞到1個spark operation(例如:map、reduce)時,這個function是在遠程的集羣node上被執行的。這些變量會被複制到每一臺機器,在遠程機器上不會更新這些變量,然後又傳送回driver program。跨tasks共享讀寫變量的支持,通常是低效率的。然而,spark提供了2種通用的共享變量模式:廣播變量和累加器。

  廣播變量

  廣播變量允許編程人員在每臺機器上保持1個只讀的緩存變量,而不是傳送變量的副本給tasks。
Spark actions通過步驟的集合進行執行,這個集合被分佈式的“shuffle” operations分開來執行。在每個步驟中,Spark自動廣播tasks所需的通用數據。這意味着,顯式地創建廣播變量,僅在當tasks跨多個步驟且需要同樣的數據或者使用反序列化的緩存數據時顯得非常重要。
  實例:

scala> val broadcastVar = sc.broadcast(Array(1, 2, 3))
broadcastVar: org.apache.spark.broadcast.Broadcast[Array[Int]] = Broadcast(0)

scala> broadcastVar.value
res0: Array[Int] = Array(1, 2, 3)

  廣播變量創建後,它可以運行在集羣中的任何function上,而不需要多次傳遞給集羣節點。另外需要記住,不應該修改廣播變量,這樣才能確保每個節點獲取到的值都是一致的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章