spark jdbc读取并发度优化

很多人在spark中使用默认提供的jdbc方法时,在数据库数据较大时经常发现任务 hang 住,其实是单线程任务过重导致,这时候需要提高读取的并发度。
下文以 mysql 为例进行说明。

在spark中使用jdbc

spark-env.sh 文件中加入:

任务提交时加入:

1. 单partition(无并发)

调用函数

使用:

查看并发度

该操作的并发度为1,你所有的数据都会在一个partition中进行操作,意味着无论你给的资源有多少,只有一个task会执行任务,执行效率可想而之,并且在稍微大点的表中进行操作分分钟就会OOM。

更直观的说法是,达到千万级别的表就不要使用该操作,count操作就要等一万年,no zuo no die ,don’t to try !

2. 根据Long类型字段分区

调用函数

使用:

查看并发度

该操作将字段 colName 中1-10000000条数据分到10个partition中,使用很方便,缺点也很明显,只能使用整形数据字段作为分区关键字。

3000w数据的表 count 跨集群操作只要2s。

3. 根据任意类型字段分区

调用函数

下面以使用最多的时间字段分区为例:

查看并发度

该操作的每个分区数据都由该段时间的分区组成,这种方式适合各种场景,较为推荐。

结语
以 mysql 3000W 数据量表为例,单分区count,僵死若干分钟报OOM。

分成5-20个分区后,count 操作只需要 2s

高并发度可以大幅度提高读取以及处理数据的速度,但是如果设置过高(大量的partition同时读取)也可能会将数据源数据库弄挂。

Original: https://www.cnblogs.com/itboys/p/12881976.html
Author: 大葱拌豆腐
Title: spark jdbc读取并发度优化

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/8826/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

发表回复

登录后才能评论
免费咨询
免费咨询
扫码关注
扫码关注
联系站长

站长Johngo!

大数据和算法重度研究者!

持续产出大数据、算法、LeetCode干货,以及业界好资源!

2022012703491714

微信来撩,免费咨询:xiaozhu_tec

分享本页
返回顶部