Spark 的一个核心功能是创建两种特殊类型的变量:广播变量和累加器

广播变量(groadcast varible)为只读变量,它有运行SparkContext的驱动程序创建后发送给参与计算的节点。对那些需要让工作节点高效地访问相同数据的应用场景,比如机器学习。我们可以在SparkContext上调用broadcast方法创建广播变量:

  val broadcastList = sc.broadcast(List("Spark","Impala","Hadoop"))

广播变量也可以被非驱动程序所在节点(即工作节点)访问,访问方法就是调用该变量的value方法

  sc.parallelize(List("1","2","3")).map(x => broadcastList.value ++ x).collect

使用广播变量可以优化资源提高性能

广播变量的优势:是因为不是每个task一份变量副本,而是变成每个节点的executor才一份副本。这样的话,就可以让变量产生的副本大大减少。
广播变量,初始的时候,就在Drvier上有一份副本。task在运行的时候,想要使用广播变量中的数据,此时首先会在自己本地的Executor对应的
BlockManager中,尝试获取变量副本;如果本地没有,BlockManager,也许会从远程的Driver上面去获取变量副本;也有可能从距离比较近的其他
节点的Executor的BlockManager上去获取,并保存在本地的BlockManager中;BlockManager负责管理某个Executor对应的内存和磁盘上的数据,
此后这个executor上的task,都会直接使用本地的BlockManager中的副本。
例如,50个executor,1000个task。一个map,10M:
默认情况下,1000个task,1000份副本。10G的数据,网络传输,在集群中,耗费10G的内存资源。
如果使用了广播变量。50个execurtor,50个副本。500M的数据,网络传输,而且不一定都是从Driver传输到每个节点,还可能是就近从最近的
节点的executor的bockmanager上拉取变量副本,网络传输速度大大增加;500M,大大降低了内存消耗。

最新文章

  1. java 导出数据为word文档(保持模板格式)
  2. Mysql时间类型处理
  3. SSH 常用命令解析
  4. ui-grid
  5. public/private/protected访问控制权限的区别
  6. C++静态代码分析PreFast
  7. CentOS学习笔记--vi程序编辑器
  8. hdu 5587 Array 数学题
  9. SOFTWARE_INTRODUCE_01
  10. 4、File类之获取方法
  11. centos基本命令
  12. Vue-cli在webpack内使用雪碧图(响应式)
  13. spring boot 的参数配置。
  14. 浅析H5图片上传
  15. python3实现链表
  16. 关于Java 软件工程师应该知道或掌握的技术栈
  17. FastDFS数据迁移
  18. sqli-labs:5-6,盲注
  19. 01-Linux的基本指令
  20. [Deep-Learning-with-Python] Keras高级概念

热门文章

  1. c#复制数组的多种方法
  2. HDC2021:HMS Core分析服务,数智化营销闭环方案帮助开发者实现精益增长
  3. C++11 多线程同步 互斥锁 条件变量
  4. Linux内核内存检测工具KASAN
  5. 经过4次优化我把python代码耗时减少95%
  6. IO流(一)
  7. bat批处理命令及解释
  8. 退出cmd命令
  9. JS中bind、call和apply的作用以及在TS装饰器中的用法
  10. [atAGC054C]Roughly Sorted