Shared Variables(共享变量)
在 Spark 程序中,当一个传递给 Spark 操作(例如 map 和 reduce)的函数在远程节点上面运行 时,Spark 操作实际上操作的是这个函数所用变量的一个独立副本。这些变量会被复制到每台机器上,并且这些变量在远程机器上的所有更新都不会传递回驱动程序。通常跨任务的读 写变量是低效的,但是,Spark 还是为两种常见的使用模式提供了两种有限的共享变量: 广播变(Broadcast Variable)和累加器(Accumulator)
官网:http://spark.apache.org/docs/latest/rdd-programming-guide.html#shared-variables
1、Broadcast Variables(广播变量)
1.1、为什么要定义广播变量
如果我们要在分布式计算里面分发大对象,例如:字典,集合,黑白名单等,这个都会由 Driver 端进行分发,一般来讲,如果这个变量不是广播变量,那么每个 task 就会分发一份, 这在 task 数目十分多的情况下 Driver 的带宽会成为系统的瓶颈,而且会大量消耗 task 服务 器上的资源,如果将这个变量声明为广播变量,那么知识每个 executor 拥有一份,这个 executor 启动的 task 会共享这个变量,节省了通信的成本和服务器的资源。
没有使用广播变量:
使用了广播变量之后: