关于Spark的Broadcast解析

本文详细介绍了Spark的Broadcast机制,包括初始化、创建和使用过程。Broadcast用于在Task间高效共享数据,避免了数据复制。文章指出,不恰当的Broadcast使用,如广播大文件,可能影响性能。广播数据在Executor节点上缓存,采用P2P方式提高读取效率。建议用于广播小数据,如配置文件和数据结构。
摘要由CSDN通过智能技术生成

首先,推荐下大神(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. SparkContext#构造方法
  2. SparkEnv#create
  3. BroadcastManager#initialize()
  1. TorrentBroadcastFactoryr#initialize(isDriver: Boolean, conf: SparkConf, securityMgr: SecurityManager)
  2. TorrentBroadcast#initialize(_isDriver: Boolean, conf: SparkConf)



1. 创建过程中,初始化Env配置环境时创建BroadcastManager对象,相关代码为:

SparkContext:

<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,// 是否是本地运行,
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值