spark 广播变量大数据_Spark性能调优之——在实际项目中广播大变量

Spark性能调优之——在实际项目中广播大变量

[数澜 Spark]性能调优系列,返回目录请猛戳这里

「数澜·大数据」技术团队荣誉出品

本文目录:

[TOC]

一、为什么要用广播变量

1.一个Spark Application

Driver进程

其实就是我们写的Spark作业,打成jar运行起来的主进程。

比如一个1M的map(随机抽取的map) ,创建1000个副本,网络传输!分到1000个机器上,则占用了1G内存。

不必要的网络消耗,和内存消耗。

2.会出现的恶劣情况:

如果你是从哪个表里面读取了一些维度数据,比方说,所有商品的品类的信息,在某个算子函数中使用到100M。

1000个task 。100G的数据,要进行网络传输,集群瞬间性能下降。

3.解决方案:

如果说,task使用大变量(1M-100M),明知道会导致大量消耗。该怎么做呢?

使用广播变量:

1.广播变量里面会在Driver有一份初始副本。一个executor 会对应一份blockManager!

2.task在运行的时候,想要使用 广播变量中的数据,此时会首先在本地的Executor对应的BlockManager上 获取,如果没有。

则:

blockManager会Driver上拉取map(也有可能从距离比较近的其他节点的Executor的BlockManager上获取!这样效率更高)

二、使用广播变量的好处:

1.举例来说:

50个Executor 1000个task。

一个map10M

默认情况下,1000个task 1000个副本

1000 * 10M = 10 000M = 10 G

10G的数据,网络传输,在集群中,耗费10G的内存资源。

如果使用 广播变量,

50个Executor ,50个副本,10M*50 = 500M的数据。

网络传输,而且不一定是从Drver传输到各个节点,还可能是从就近的节点

的Executor的BlockManager上获取变量副本,网络传输速度大大增加。

之前 10000M 现在 500M。

20倍网络传输性能的消耗。20倍内存消耗的减少。

虽然说,不一定会对性能产生决定向性的作用。比如运行30分钟的spark作业,可能做了广播变量以后,速度快了2分钟。变成28分钟。

2.实际效果

没有经过任何肉条有手段的spark作业,16个小时

三板斧下来(资源,并行度,RDD重构) ,就可以到5小时。

然后重要的一个调优,影响特别大,shuffle调优,2~3小时,应用了10个以上的性能调优技术点。

JVM调优+广播后,30分钟。

整体的调优效果: 16小时 变成 30分钟!!!!

[小节注]不是每个task一份副本,而是变成每个节点Executor上一个副本。

三、全文总结

无论是普通数据处理,还是在Spark SQL 中使用广播变量的方式进行Map Join,广播变量都充当了减少数据传输,加速计算的角色。利用好广播变量,可以使程序变得更加灵活。

四、扩展阅读:怎么使用广播变量。

参考资料

知识共享

除非另有注明,本《Spark 性能优化》系列文章使用 CC BY-NC(署名-非商业性使用) 知识共享许可协议。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值