首先,推荐下大神(
anzhsoft
)的文章,http://blog.csdn.net/column/details/spark.html
仅作为大神未未提到的细枝末节,进行补充。
编写文章格式,亦是参考大神博文样式“照虎画猫”
Broadcast(广播)是相对较为常用方法功能,通常使用方式,包括共享配置文件,map数据集,树形数据结构等,为能够更好更快速为TASK任务使用相关变量。
期间,曾见过有童鞋用原始日志(log)进行广播,导致集群运行缓慢,诸位童鞋可以引此为戒,其与JAVA的ServletContext的作用近似,ServletContext存放过多数据也会内存溢出的,Broadcast虽然不会溢出(使用内存+硬盘方式),但是依然会影响运行。
基础使用:
<span style="font-size:18px;">val broadcastValue = sc.broadcast(存储值)
broadcastValue .value</span>
我们从三个方面叙述Broadcast,
初始化、创建(写入)、使用
初始化
Broadcast是典型的建造者模式方法,相对内部设计相对较为简单,同时
初始化并非直接创建
Broadcast对象,作用有两个方面:
1. 依据配置属性(
spark.broadcast.factory
)创建
BroadcastFactory对象 – 反射创建。
2. 将sparkConf对象注入
Broadcast中,同时定义压缩编码
初始化入口sparkContext启动时创建,其调用顺序为(后续有时间调整为时序图):
-
Spa
rkContext
#
构造方法
-
SparkEnv
#
create
-
BroadcastManager
#
initialize()
-
Tor
rentBroadcastFactoryr
#
initialize
(isDriver: Boolean, conf: SparkConf, securityMgr: SecurityManager)
-
TorrentBroadcast
#
initialize(
_isDriver: Boolean, conf: SparkConf)
1. 创建过程中,初始化Env配置环境时创建
BroadcastManager
对象
,相关代码为:
Spa
rkContext:
<span style="font-size:18px;"> // Create the Spark execution environment (cache, map output tracker, etc)
// 创建spark的执行环境
private[spark] val env = SparkEnv.create(
conf, // spark配置文件
"<driver>",
conf.get("spark.driver.host"), // 主机名
conf.get("spark.driver.port").toInt, // 端口号
isDriver = true, // 默认启动SparkContext客户端,便是Driver
isLocal = isLocal,// 是否是本地运行,是通过mast