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,大大降低了内存消耗。

转载于:https://www.cnblogs.com/newdingwei/p/6802972.html

Spark 广播变量和累加器相关推荐

  1. spark广播变量 和 累加器

    1 为什么使用广播变量 和 累加器 变量存在的问题:在spark程序中,当一个传递给Spark操作(例如map和reduce)的函数在远程节点上面运行时,Spark操作实际上操作的是这个函数所用变量的 ...

  2. Spark广播变量与累加器

    在之前的文章中,我介绍了flink广播状态,从而了解了flink广播状态实际上就是将一个流广播到下游所有算子之中.在本文中我将介绍spark中类似的概念,为了方便理解,先放张spark应用程序架构图. ...

  3. spark 获取广播变量_Spark流式程序中广播变量和累加器为何使用单例模式

    Spark中广播变量详解以及如何动态更新广播变量​mp.weixin.qq.com 1.广播变量是只读的,使用单例模式可以减少Spark流式程序中每次job生成执行,频繁创建广播变量带来的开销 2. ...

  4. Spark编程指引(四)----共享变量(广播变量和累加器)

    转自:http://blog.csdn.net/happyanger6/article/details/46576831 共享变量 通常情况下,当向Spark操作(如map,reduce)传递一个函数 ...

  5. Spark _15 _广播变量和累加器

    广播变量和累加器 广播变量 广播变量理解图 未使用广播变量: package SparkRadioimport org.apache.spark.rdd.RDD import org.apache.s ...

  6. 【Spark】广播变量和累加器

    文章目录 一.Spark广播变量 二.累加器 Reference 一.Spark广播变量 多进程编程中,不同进程可以通过创建共享内存,进行进程间通信.而在分布式中,Spark通过[广播变量]和[累加器 ...

  7. Spark广播变量实现原理及基础编程

    Spark广播变量实现原理及基础编程 实现原理 广播变量用来高效分发较大的对象.向所有工作节点发送一个较大的只读值,以供一个或多个 Spark 操作使用.比如,如果你的应用需要向所有节点发送一个较大的 ...

  8. Spark广播变量使用示例

    Spark广播变量使用示例 实现原理 广播变量用来高效分发较大的对象.向所有工作节点发送一个较大的只读值,以供一个或多个 Spark 操作使用.比如,如果你的应用需要向所有节点发送一个较大的只读查询表 ...

  9. Spark广播变量之超大表left join小表时如何进行优化以及小表的正确位置

    Spark广播变量之大表left join小表时如何进行优化以及小表的正确位置放置,带着这个目标我们一探究竟. 项目场景: 最近工作中遇到一个场景: 有一个超大表3.5T和一个小表963K 需要做关联 ...

最新文章

  1. input 只输入数字并限制最大输入长度
  2. boost::fusion::any用法的测试程序
  3. 慢查询日志中出现超大时间的案例分析
  4. 【Coursera】SecondWeek(2)
  5. Linux Shell编程三
  6. C语言编程计算y,C语言编程入门之--第五章C语言基本运算和表达式-part4
  7. 沈伟华:图神经网络的三连问
  8. webpack的一些plugin,怎么使用webpack对项目进行优化
  9. oracle+buffer+busy+wait,Oracle数据库buffer busy wait等待事件 (2)
  10. Windows防火墙添加80端口,解决apache无法访问的问题
  11. getElementById和querySelector方法的区别
  12. 卸载所有supervisor残留_拯救C盘!这个良心的卸载工具还是免费的?!
  13. ps里面怎么插入流程图_教你如何正确画工艺流程图
  14. python3 读取.plist文件_在Python中解析plist文件
  15. 【学前教育论文】幼儿学前教育中采茶小游戏的运用可行性分析(节选)
  16. 七周成为数据分析师 | Excel
  17. android实现多画面播放,Android实现炫酷播放效果
  18. 系统性能优化的十大策略(强烈推荐,建议收藏)
  19. xps15 9500加装1T硬盘
  20. python中如何将数字转换成中文数字_Python把数字变成中文的方法

热门文章

  1. java摄像头推流,流媒体服务 javaCV-2 推流
  2. python数据库操作批量sql执行_Python批量修改数据库执行Sql文件
  3. php class variable,PHP中的變量類擴展 - 是否可能?
  4. php 慢日志,php-fpm慢执行日志
  5. storm中worker、executor、task之间的关系
  6. 第 4 章 terminal
  7. nginx的源码编译及相关文件配置
  8. @Aspect @around 多个参数
  9. java假设模拟请求重新启动路由器(网络爬虫经常使用),还有java怎样下载图片
  10. 如何写出高质量的shell脚本---------值得注意的地方