目录

 

一:普通外部变量

二:广播变量(Broadcast Variable)

三:累加变量(Accumulator)

四:流量的消耗

五:逻辑构图


一:普通外部变量

需要定义为 final 终态后,才能被算子内部所使用。
每个应用到的Task都拷贝一份副本变量,计算时,只能针对副本

 

二:广播变量(Broadcast Variable)

只读属性,每个节点拷贝
好处:节省了内存的消耗,节省流量的消耗(每个节点上可能有 100 个 Task)

 

三:累加变量(Accumulator)

1.操作方式:
task只能对Accumulator进行累加操作,不能读取它的值
Driver程序可以读取    Accumulator    的值

2.详解 累加器的实现流程:
(1)在Driver端创建
(2)被序列化传输到executor端运行,每个Task都会有一个累加器的变量,直到再返回过来都是独立运行的;
(3)如果在Task端去获取值的话,只能获取到当前Task的,Task与Task之间不会有影响
(4)最后在Driver运行 value() 获取值时,会把每个Task上的累积器的值进行聚合(该时间段的值)

 

四:流量的消耗

如何产生:机器节点之间的网络传输,依据总量来判定
实例:节点上的变量传递到Executor 上,是否消耗  ——》否
              从 Driver 上传递变量到Worker 节点, 消耗   ——》 是

 

五:逻辑构图

Spark 共享变量详解

相关文章: