目录
一:普通外部变量
需要定义为 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 节点, 消耗 ——》 是