美文网首页
共享变量:广播变量

共享变量:广播变量

作者: ryancao_b9b9 | 来源:发表于2020-05-01 20:49 被阅读0次

一、使用场景
如果我们要在分布式计算里面分发大对象(如:字典,集合,黑白名单等),由Driver端进行分发。如果这个变量不是广播变量,那么每个Task就会分发一份,如果Task数目较多的情况下,Driver的带宽会成为系统的瓶颈且会大量消耗Task所在的Executor服务器的内存资源。
如果将这个变量声明为广播变量,那么只是每个Executor分发一份,该Executor启动的所有Task都可共享这个变量,节省了网络带宽的成本和服务器的内存资源。
对比效果图如下:

不使用广播变量
使用广播变量

二、注意事项
1、广播变量只能在Driver端定义,不能在Executor端定义
2、广播变量只能在Driver端修改,不能在Executor端修改
3、广播变量在每个Executor中只有一份Driver端的变量副本
4、RDD无法作为广播变量,因为RDD是逻辑对象、不存储数据

三、使用方式
1、通过对一个类型 T 的对象调用 SparkContext.broadcast 创建出一个 Broadcast[T] 对象。任何可序列化的类型都可以这么实现。
2、通过 value 属性访问该对象的值(在 Java 中为 value() 方法)。
3、变量只会被发到各个节点一次,应作为只读值处理(修改这个值不会影响到别的节点)。
示例代码如下:

object BroadcastTest {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf().setMaster("local").setAppName("broadcast")
    val sc = new SparkContext(conf)
    val list = List("hello java")
    val broadcast = sc.broadcast(list)
    val linesRDD = sc.textFile("./word")
    linesRDD.filter(line => {
        broadcast.value.contains(line)
    }).foreach(println)
    sc.stop()
  }
}

相关文章

  • 共享变量:广播变量

    一、使用场景如果我们要在分布式计算里面分发大对象(如:字典,集合,黑白名单等),由Driver端进行分发。如果这个...

  • Spark-broadcast

    参见Spark相关--共享变量-广播变量-broadcast

  • Spark的广播变量机制

    Spark广播变量 什么是广播变量? 在同一个Execute共享同一份计算逻辑的变量 广播变量使用场景 我现在要在...

  • Spark之广播变量

    什么是广播变量 广播变量:分布式共享只读变量。广播变量用来高效分发较大的对象。向所有工作节点发送一个较大的只读值,...

  • Spark—广播变量

    广播变量 Spark有两种共享变量——累加器、广播变量。广播变量可以让程序高效地向所有工作节点发送一个较大的只读值...

  • spark之广播变量&累加器

    Spark两种共享变量:广播变量(broadcast variable)与累加器(accumulator)。累加器...

  • 共享变量:累加器

    一、使用场景上一篇提到了共享变量可以解决Task重复拷贝Driver端变量的问题,但广播变量在Task中只读不能修...

  • 十、广播变量

    简介 广播变量理解为是一个公共的共享变量,我们可以把一个dataset 数据集广播出去,然后不同的task在节点上...

  • 广播变量

    从 mysql 读取数据作为广播变量时, 虽然有 checkpoint 但是 kill 掉任务后,重启程序会失败。

  • Spark性能优化之如何使用广播变量以及Kryo序列化

    广播变量 在Spark Application中,经常会使用到一个共享变量,众所周知的,Spark是一个并行计算框...

网友评论

      本文标题:共享变量:广播变量

      本文链接:https://www.haomeiwen.com/subject/vvzqghtx.html