大数据IMF传奇行动绝密课程第42课:Checkpoint内幕解密

原创 2016年08月29日 11:11:34

Broadcast内幕解密

1、Broadcast彻底解析
2、Broadcast源码彻底详解
3、Broadcast最佳实践

一、Broadcast彻底解析
1、Broadcast就是将数据从一个节点发送到其它的节点上。例如Driver上有一张表,而Executor中的每个并行执行的Task(100万个Task)都要查询这张表,那我们通过Broadcast的方式就只需要往每个Executor把这张表发送一次就行了,Executor中的每个运行的Task查询这张唯一的表,而不是每次执行的时候都从Driver中获得这张表。
2、这就好像ServletContext的具体作用,只是Broadcast是分布式的共享数据,默认情况下只要程序在运行,Broadcast变量就会存在,因为Broadcast在底层是通过BlockManager管理的!但是你可以手动指定或者配置具体周期来销毁Broadcast变量。
3、Broadcast一般用于处理共享配置文件、通用的Dataset、常用的数据结构等等;但是不适合存放太大的数据在Broadcast,Broadcast不会内存溢出,因为其数据保存的StorageLevel是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中的数据给BlockManager,这样后续的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 BroadcastObject
        broadcastFactory.initialize(isDriver, conf, securityManager)

        initialized = true
      }
    }
}

在实例化BroadcastManager的时候会创建BroadcastFactory工厂来构建具体实际的Broadcast类型,默认情况下是TorrentBroadcastFactory
8、HttpBroadcast存在单点故障,和网络IO等性能问题,所以默认使用TorrentBroadcast的方式,开始数据在Driver中,假设A节点用了数据,B访问的时候A节点就变成数据源,依次类推,都是数据源,当然是被BlockManager进行管理的,数据源越多,节点压力会大大降低
9、TorrentBroadcast按照BLOCK_SIZE(默认是4MB)将Broadcust中的数据划分成为不同的Block,然后将分块信息也就是meta信息存放到Driver的BlockManager中,同时会告诉BlockManagerMaster说明Meta信息存放完毕

大数据IMF传奇行动绝密课程第104-114课:Spark Streaming电商广告点击综合案例

Spark Streaming电商广告点击综合案例需求分析和技术架构广告点击系统实时分析 广告来自于广告或者移动App等,广告需要设定在具体的广告位,当用户点击广告的时候,一般都会通过ajax或So...
  • tom_8899_li
  • tom_8899_li
  • 2017年05月05日 11:33
  • 876

第83讲:Scala和Java二种方式实战Spark Streaming开发

一、Java方式开发 1、开发前准备:假定您以搭建好了Spark集群。 2、开发环境采用eclipse maven工程,需要添加Spark Streaming依赖。 3、Spark stre...
  • qq_21234493
  • qq_21234493
  • 2016年04月26日 14:58
  • 1579

大数据IMF传奇行动绝密课程第41课:Checkpoint彻底解密

Checkpoint彻底解密1、Checkpoint重大价值 2、Checkpoint运行原理图 3、Checkpoint源码解析一、Checkpoint到底是什么? 1、Spark在生产环境下...
  • tom_8899_li
  • tom_8899_li
  • 2016年08月26日 10:11
  • 206

大数据IMF传奇行动绝密课程第25课:Spark Sort-Based Shuffle内幕彻底解密

Spark Sort-Based Shuffle内幕彻底解密1、为什么使用Sort-Based Shuffle内幕彻底解密 2、Sort-Based Shuffle实战 3、Sort-Based ...
  • tom_8899_li
  • tom_8899_li
  • 2016年08月12日 00:10
  • 256

大数据IMF传奇行动绝密课程第15课:RDD创建内幕彻底解密

RDD创建内幕彻底解密为什么RDD有很多种创建方法因为Spark运行的介质、硬件存储不同Spark和Hadoop有没有关系? 没关系,Spark可以以Hadoop作为存储 学Spark有没有必要学...
  • tom_8899_li
  • tom_8899_li
  • 2016年08月11日 22:39
  • 306

大数据IMF传奇行动绝密课程第31课:Spark资源调度分配内幕天机彻底解密

Spark资源调度分配内幕天机彻底解密一、分配Driver(Cluster) 二、为Application分配资源 三、两种不同的资源分配方式彻底揭秘 四、Spark资源分配的思考一、任务调度与...
  • tom_8899_li
  • tom_8899_li
  • 2016年08月12日 22:32
  • 539

大数据IMF传奇行动绝密课程第36课:TaskScheduler内幕天机解密

TaskScheduler内幕天机解密1、TaskScheduler与SchedulerBackend 2、FIFO与FAIR两种调度模式彻底解密 3、Task数据本地性资源分配源码实现一、通过s...
  • tom_8899_li
  • tom_8899_li
  • 2016年08月22日 20:43
  • 282

大数据IMF传奇行动绝密课程第25课:Spark Sort-Based Shuffle内幕彻底解密

Spark Sort-Based Shuffle内幕彻底解密1、为什么使用Sort-Based Shuffle内幕彻底解密 2、Sort-Based Shuffle实战 3、Sort-Based ...
  • tom_8899_li
  • tom_8899_li
  • 2016年08月07日 21:31
  • 363

大数据IMF传奇行动绝密课程第100-101课:使用Spark Streaming+Spark SQL+Kafka+FileSystem综合案例

使用Spark Streaming+Spark SQL+Kafka+FileSystem综合案例1、项目分析流程图 2、项目代码实战Flume sink到Kafka需要一个jar包支持 https...
  • tom_8899_li
  • tom_8899_li
  • 2017年04月03日 22:07
  • 1090

大数据IMF传奇行动绝密课程第63课:Spark SQL下Parquet内幕深度解密

Spark SQL下Parquet内幕深度解密1、Spark SQL下的Parquet意义再思考 2、Spark SQL下的Parquet内幕揭秘一、Spark SQL下的Parquet意义再思考 ...
  • tom_8899_li
  • tom_8899_li
  • 2016年09月12日 00:33
  • 321
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:大数据IMF传奇行动绝密课程第42课:Checkpoint内幕解密
举报原因:
原因补充:

(最多只允许输入30个字)