Spark性能调优之Broadcast广播大变量

Broadcast广播大变量背景:

spark作业中引用了外部变量时,spark会给每个task拷贝一份变量副本。那么,这会有什么缺点?又会对性能产生怎么用恶劣的影响呢?

在这里插入图片描述
举例说明:假如有一个外部变量,大小是1M,被spark作业引用。Spark作业设置有500个task。首先,saprk会拷贝500份副本到task(如下图),而拷贝是通过网络传输的。共计就有500M全部通过网络传输,造成很大的网络开销。另外,变量副本拷贝到各个task后,占用的是内存,就有500M的内存被变量副本消耗了。内存被占用过多后,导致RDD持久化到内存时,可能无法全部写入内存,部分数据写入到磁盘,这导致了在磁盘IO上消耗性能;接着task在创建对象时,也许堆内存不够而存不下对象,这又引起频繁GC,GC时,一定会导致工作线程停止,导致spark作业暂停下来。这是一系列的恶劣影响。

解决问题:

这里引出一个角色 - BlockManager 它负责管理某个executor对应的内存和磁盘数据。

如下图:
1.Task有广播变量时,会先尝试在本地BlockManager 中找变量;
2.本地BlockManager 没找到,就会到driver去拿到变量后,把变量再拷贝保存到BlockManager ;另外,BlockManager

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值