一、broadcast广播变量
1.定义
如果一个变量不是广播变量,Driver端会给每个task都发送一份。如果task数量很多,Driver的带宽会成为系统的瓶颈。而且会大量消耗task服务器上的资源。如果把这个变量声明为广播变量,会在每个executor上开辟一片共享不可修改的文件用来存放这个变量副本。节省了通信的成本和服务器的资源。
2.注意事项
a.不能将一个RDD广播出去,因为RDD不存储数据。
b.广播变量只能在Driver端定义,不能在Executor段定义
c.在Driver端可以修改广播变量的值,在Executor端无法修改广播变量的值。
d.如果executor端用到了Driver的变量,不使用广播变量,有多少task就有多少的Driver端的变 量副本
e.如果executor端用到了Driver的变量,使用广播变量在每个executor中只有一个Driver端的变 量副本。
二、accumulator累加器
1.定义
用来同步work中的计算结果到Driver中。
2.注意
a.累加器的调用,也就是accumulator.value必须要在action之后被调用,必须在执行算子触发之后
b.多次使用同一个累加器,尽量做到用完即重置。accumulator.reset
c.尽量给累加器指定name,方便我们在web-ui上进行查看