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端的变量副本

posted @ 2019-08-12 13:55  北漂屌丝  阅读(597)  评论(0编辑  收藏  举报