SPARK广播变量
-
意义
-
如果我们要在分布式计算里面分发大对象,例如:字典,集合,黑白名单等,这个都会由Driver端进行分发,一般来讲,如果这个变量不是广播变量,那么每个task就会分发一份,这在task数目十分多的情况下Driver的带宽会成为系统的瓶颈,而且会大量消耗task服务器上的资源,如果将这个变量声明为广播变量,那么只是每个executor拥有一份,这个executor启动的task会共享这个变量,节省了通信的成本和服务器的资源
-
-
-
不使用广播变量
-
使用广播变量
-
-
定义广播变量注意点
-
变量一旦被定义为一个广播变量,那么这个变量只能读,不能修改
-
-
注意事项
-
不能将一个RDD使用广播变量广播出去,因为RDD是不存储数据的。可以将RDD的结果广播出去
-
广播变量只能在Driver端定义,不能在Executor端定义
-
在Driver端可以修改广播变量的值,在Executor端无法修改广播变量的值
-
如果executor端用到了Driver的变量,如果不使用广播变量在Executor有多少task就有多少Driver端的变量副本
-
如果Executor端用到了Driver的变量,如果使用广播变量在每个Executor中只有一份Driver端的变量副本
-