关于Spark的Broadcast解析

  • Post author:
  • Post category:其他



首先,推荐下大神(

anzhsoft

)的文章,http://blog.csdn.net/column/details/spark.html


仅作为大神未未提到的细枝末节,进行补充。


编写文章格式,亦是参考大神博文样式“照虎画猫”




Broadcast(广播)是相对较为常用方法功能,通常使用方式,包括共享配置文件,map数据集,树形数据结构等,为能够更好更快速为TASK任务使用相关变量。


期间,曾见过有童鞋用原始日志(log)进行广播,导致集群运行缓慢,诸位童鞋可以引此为戒,其与JAVA的ServletContext的作用近似,ServletContext存放过多数据也会内存溢出的,Broadcast虽然不会溢出(使用内存+硬盘方式),但是依然会影响运行。


基础使用:

<span style="font-size:18px;">val broadcastValue = sc.broadcast(存储值)
broadcastValue .value</span>




我们从三个方面叙述Broadcast,

初始化、创建(写入)、使用






初始化





Broadcast是典型的建造者模式方法,相对内部设计相对较为简单,同时

初始化并非直接创建

Broadcast对象,作用有两个方面:





1. 依据配置属性(

spark.broadcast.factory

)创建

BroadcastFactory对象 – 反射创建。







2. 将sparkConf对象注入

Broadcast中,同时定义压缩编码












初始化入口sparkContext启动时创建,其调用顺序为(后续有时间调整为时序图):



  1. Spa


    rkContext


    #



    构造方法




  2. SparkEnv


    #



    create




  3. BroadcastManager


    #



    initialize()




  1. Tor


    rentBroadcastFactoryr


    #



    initialize



    (isDriver: Boolean, conf: SparkConf, securityMgr: SecurityManager)



  2. TorrentBroadcast


    #



    initialize(



    _isDriver: Boolean, conf: SparkConf)






1. 创建过程中,初始化Env配置环境时创建


BroadcastManager

对象

,相关代码为:



Spa


rkContext:





<span style="font-size:18px;">  // Create the Spark execution environment (cache, map output tracker, etc)
  // 创建spark的执行环境
  private[spark] val env = SparkEnv.create(
    conf, // spark配置文件
    "<driver>",
    conf.get("spark.driver.host"), // 主机名
    conf.get("spark.driver.port").toInt, // 端口号
    isDriver = true, // 默认启动SparkContext客户端,便是Driver
    isLocal = isLocal,// 是否是本地运行,是通过mast



版权声明:本文为w412692660原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。