一:Broadcast彻底解析

1,Broadcast就是将数据从一个节点发送到其他的节点上;例如Driver上有一张表,而Executor中的每个并行的Task(100万个Task)都要查询这张表,那我们通过Broadcast方式就只需要往每个Executor把这张表发送一次就行了,Executor中的每个Task查询这张唯一的表,而不是每次执行的时候都从Driver获得这张表!

2,这就好像ServletContext的具体作用,只是Broadcast是分布式的共享数据,默认情况下只要程序在运行Broadcast变量就会存在,因为Broadcast子底层是通过BroadcastManager管理的!但是你可以手动指定或者配置具体周期来销毁Broadcast变量!

3,Broadcast一般用于处理共享配置文件、通用的DataSet、常用的数据结构等等;但是不适合存放太大的数据在Broadcast,Broadcast不会内存溢出,因为其数据的保存的StoreLevel是MEMORY_AND_DISK的方式;虽然如此,我们也不可以放入太大的数据在Broadcast中,因为网络IO和可能的单点压力会非常大!

4,Broadcast变量是只读变量,最为轻松保持了数据的一致性!

5,Broadcast的使用:

* {{{
* scala> val broadcastVar = sc.broadcast(Array(1, 2, 3))
* broadcastVar: org.apache.spark.broadcast.Broadcast[Array[Int]] = Broadcast(0)
*
* scala> broadcastVar.value
* res0: Array[Int] = Array(1, 2, 3)
* }}}

6,HttpBroadcast方式的Broadcast,最开始的时候数据放在Driver的本地文件系统中,Driver在本地会创建一个文件夹来存放Broadcast中的data,然后启动HttpServer来访问文件夹中的数据,同时写入到BlockManager(StorageLevel是MEMORY_AND_DISK)中获得BlockId(BroadcastBlockId),当Executor中的Task要访问Broadcast变量的时候,会向Driver通过HttpServer来访问数据,然后会在Executor中的BlockManager中注册该Broadcast中的数据,这样后要的Task需要访问Broadcast的变量的时候会首先查询BlockManager中有没有该数据,如果有就直接使用;

7,BroadcastManager是用来管理Broadcast,该实例对象是在SparkContext创建SparkEnv的时候创建的:

// Called by SparkContext or Executor before using Broadcast
private def initialize() {synchronized {if (!initialized) {val broadcastFactoryClass =conf.get("spark.broadcast.factory", "org.apache.spark.broadcast.TorrentBroadcastFactory")broadcastFactory =Utils.classForName(broadcastFactoryClass).newInstance.asInstanceOf[BroadcastFactory] // Initialize appropriate BroadcastFactory and BroadcastObjectbroadcastFactory.initialize(isDriver, conf, securityManager)initialized = true}}
}

在实例化BlockcastManager的时候会创建BlockcastFactory工厂来构建具体实际的Brockcast类型,默认情况下是TorrentBroadcastFactory;

8,HttpBroadcast存在单点故障,和网络IO性能问题,所以默认使用TorrentBroadcast的方式,开始数据在Driver中,假设A节点用了数据,B访问的时候A节点就变成数据源,依次类推,都是数据源,当然是被BlockManger进行管理的,数据源越多,节点压力会大大降低;

9,TorrentBroadcast按照BLOCK_SIZE(默认是4MB)将Broadcast中的数据划分成为不同的Block,然后将分块信息也就是meta信息存放到Driver的 BlockManager中,同时会告诉BlockManagerMaster说明Meta信息存放完毕。

10,TorrentBroadcast存在慢启动和占内存!

Broadcast彻底解析相关推荐

  1. Spark Broadcast内幕解密

    一:Broadcast彻底解析 1,Broadcast就是将数据从一个节点发送到其他的节点上:例如Driver上有一张表,而Executor中的每个并行的Task(100万个Task)都要查询这张表, ...

  2. 《Android开发精要》读书笔记——Android应用模型

    Android应用模型的设计思想取自于web2.0的Mashup概念,是基于组件的应用设计模式.在该模型下,每个应用都由一系列的组件搭建而成,组件通过应用的配置文件描述功能.Android依照组件的配 ...

  3. Qt文档阅读笔记-Broadcast Sender Example与Broadcast Receiver Example解析

    目录 Broadcast Sender Example Broadcast Receiver Example Broadcast Sender Example 调用QtNetwork API实现发出广 ...

  4. 第42课: Spark Broadcast内幕解密:Broadcast运行机制彻底解密、Broadcast源码解析、Broadcast最佳实践

    第42课:  Spark Broadcast内幕解密:Broadcast运行机制彻底解密.Broadcast源码解析.Broadcast最佳实践 Broadcast在机器学习.图计算.构建日常的各种算 ...

  5. 广播(broadcast)的简单解析与实例运用

    1.简单介绍 单播:数据包发送只有一个接收方 广播:数据包发送给局域网中的所有主机 组播(多播):数据包发送给局域网中的部分主机 注:只有用户数据报(使用UDP协议)套接字才能广播,一个套接字只能进行 ...

  6. 【Android】Android Broadcast源码解析

    Android Broadcast源码解析 一.静态广播的注册 静态广播是通过PackageManagerService在启动的时候扫描已安装的应用去注册的. 在PackageManagerServi ...

  7. Qt文档阅读笔记-Broadcast Sender Example解析

    此例子展示了使用Qt Network API发送广播包 程序结构如下: 代码如下: sender.h #ifndef SENDER_H #define SENDER_H#include <QWi ...

  8. Qt文档阅读笔记-Broadcast Receiver Example解析

    这篇博文的例子是说明如何在局域网上搭建广播包接收端. 这里使用了Qt Network API,搭建本地广播包接收端. 结构如下: 代码如下: receiver.h #ifndef RECEIVER_H ...

  9. Vue.js解析(十一)【说说element组件库broadcast与dispatch】

    周所周知,Vue在2.0版本中去除了broadcast方法以及broadcast方法以及dispatch方法,最近在学习饿了么的Element时重新实现了这两种方法,并以minix的方式引入. 看一下 ...

最新文章

  1. Redis中集合set数据类型(增加(添加元素)、获取(获取所有元素)、删除(删除指定元素))
  2. Js - Dom原生对象和jQuery对象的联系、区别、相互转换
  3. wxWidgets:从文件中读取文本
  4. java捕捉音频,如何捕获在Java中的音频数据
  5. C++编译运行过程分析
  6. Linux基础(10)--管理文件和目录
  7. LFS笔记 00 准备环境
  8. gallery3d 代码分析之 glsurfaceview
  9. 关键路径例题图解_图解!九大常见数据结构被24张图给安排的明明白白
  10. r-cnn 行人检测_了解对象检测和R-CNN。
  11. linux系统可安装博途吗,安装博途V14是在什么系统下?
  12. 基于opengl编写简单的二维绘图软件
  13. 电脑开机自动推送微信通知
  14. font标签及其属性
  15. 华为od77 python最大消费金额
  16. 注塑机计算机控制器,注塑机微机控制器,Microprocessor-based Controller for PIM,音标,读音,翻译,英文例句,英语词典...
  17. UVALive 3959 Rectangular Polygons (排序贪心)
  18. 用于吸烟行为检测的可解释特征学习框架(附论文下载)
  19. linux环境下questasim 10.7的安装步骤
  20. 数据可视化笔记4 结构数据的可视化图形

热门文章

  1. fetch 之 header
  2. 最小化重投影误差(BA法)求解PnP
  3. 关闭Windows Defender,开机不启动
  4. 电脑远程控制安卓手机
  5. iOS APP黑盒/灰盒审计checklist
  6. python anaconda安装redis_python与redis的初次碰撞——把玩redis数据库的一点心得
  7. android+省电程序,Android5.1 系统之省电模式探索一启动流程
  8. mvc4 renderpartial html,MVC4使用嵌套@ Html.RenderPartial()抛出编译器错误信息:CS1502...
  9. spring boot 集成 mongodb 通过id查询问题
  10. html中留言表怎么写,html 留言板: