广播变量(Broadcast)-及生命周期

简介:

1 Spark中广播变量概念
广播变量是spark中共享变量的其中一种。它可以让程序高效的向所有工作节点发送一个只读的值,以供一个或多个spark操作使用。

2 广播变量使用示例
下面是一段简单的计算逻辑,对比了不使用广播变量和使用广播变量的两种方式:

val pws = Map("Apache Spark" -> "http://spark.apache.org/", "Scala" -> "http://www.scala-lang.org/")
//不使用广播变量(比较低效,需要多次将pws变量发送到各个节点)
val time1=System.currentTimeMillis()
val websites = sc.parallelize(Seq("Apache Spark", "Scala")).map(pws).collect
val time2 =System.currentTimeMillis()
println("websites = " + (time2 - time1))
websites.foreach(println)
//使用广播变量
val pwsB = sc.broadcast(pws)
val time3=System.currentTimeMillis()
val websitesWithBroadcast = sc.parallelize(Seq("Apache Spark", "Scala")).map(pwsB.value).collect
println("websitesWithBroadcast = " + (System.currentTimeMillis() - time3))
websitesWithBroadcast.foreach(println)
输出:
===============广播变量使用示例================
cost = 446ms
websites =
http://spark.apache.org/
http://www.scala-lang.org/
cost = 32ms
websitesWithBroadcast =
http://spark.apache.org/
http://www.scala-lang.org/
可以看出,输出结果是一样的,但是耗时,广播变量明显优于非广播变量模式。

3 广播变量原理
将变量广播到各个执行器:

在spark中,使用SparkContext创建广播变量,使用broadcastmanager和ContextCleaner管理其生命周期。

org.apache.spark.SparkContext#broadcast核心代码:

def broadcast[T: ClassTag](value: T): Broadcast[T] = {
//调用broadcastManager创建新的广播变量
val bc = env.broadcastManager.newBroadcast[T](value, isLocal)
//注册广播变量到ContextCleaner
cleaner.foreach(_.registerBroadcastForCleanup(bc))
bc
}
也可以手动销毁广播变量org.apache.spark.broadcast.Broadcast#destroy:

def destroy() {
destroy(blocking = true)
}
获取广播变量的值:


/** Get the broadcasted value. */
def value: T = {
assertValid()
getValue()
}
相关文章
|
4月前
|
TensorFlow 算法框架/工具
广播(broadcast_to)
【8月更文挑战第15天】广播(broadcast_to)。
48 2
|
5月前
|
算法 网络协议 物联网
|
4月前
|
存储 分布式计算 监控
Spark中广播变量
【8月更文挑战第13天】
147 0
|
7月前
|
Java Android开发
Broadcast的注册、发送和接收过程
Broadcast的注册、发送和接收过程
55 0
|
7月前
|
XML Java Android开发
Android Studio App开发之监听系统广播Broadcast的讲解及实战(包括接收分钟到达广播、网络变更广播、定时管理器等 附源码)
Android Studio App开发之监听系统广播Broadcast的讲解及实战(包括接收分钟到达广播、网络变更广播、定时管理器等 附源码)
493 0
|
Java 开发工具 Android开发
全局事件-广播(Broadcast)
全局事件-广播(Broadcast)
95 0
|
JavaScript 中间件
如何在 reducer 之间共享 state?
如何在 reducer 之间共享 state?
95 0
|
存储 缓存 分布式计算
Spark中广播变量详解
【前言:Spark目前提供了两种有限定类型的共享变量:广播变量和累加器,今天主要介绍一下基于Spark2.4版本的广播变量。先前的版本比如Spark2.1之前的广播变量有两种实现:HttpBroadcast和TorrentBroadcast,但是鉴于HttpBroadcast有各种弊端,目前已经舍弃这种实现,本篇文章也主要阐述TorrentBroadcast】
Spark中广播变量详解