Spark调优(一)-----使用broadcast广播变量

本文介绍了Spark调优的一种方法——使用broadcast广播变量,以解决因HBase静态数据较大引起的性能问题。广播变量可以减少网络传输开销和内存占用,避免频繁GC。文章详细阐述了广播变量的原理、优化方案及其内部机制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

优化方式

以下是亲测的一些Spark调优方法并附上优化时间:

1.使用broadcast广播变量

使用broadcast广播变量,将HBase中的静态表数据做广播,可以大大提高效率,在我们的应用场景中,因为HBase中的静态数据较大,大概是6万多条静态路段信息,若不使用broadcast,会引发频繁GC。
 

1.1原理说明

在算子函数中使用到外部变量或两表join时,默认情况下,Spark会将该变量或小维表复制多个副本,通过网络传输到task中,此时每个task都有一个变量副本。如果变量本身比较大的话(比如100M,甚至1G),那么大量的变量副本在网络中传输的性能开销,以及在各个节点的Executor中占用过多内存导致的频繁GC,都会极大地影响性能。因为每个 task 是一个线程,而且同在一个进程运行的 tasks 都属于同一个 application。所以我们使用broadcast广播变量,使每个节点(executor)上放一份就可以被所有 task 共享。
贴上Spark官网上的一段话:
Broadcast variables allow the programmer to keep a read-only variable cached on each machine rather than shipping a copy of it with tasks. They can be used, for example, to give every node a copy of a large input dataset in an efficient manner. Spark also attempts to distribute broadcast variables using efficient broadcast algorithms to reduce communication cost.
为了避免维护数据一致性问题,Spark 目前只支持 br

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值