spark多线程读取mysql_spark jdbc(mysql) 读取并发度优化

本文介绍了如何通过调整Spark的jdbc读取方式,优化从MySQL数据库读取大量数据的并发度,包括单partition、根据Long类型字段分区和根据任意类型字段分区的方法,以提高数据处理速度并避免OOM错误。
摘要由CSDN通过智能技术生成

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

下文以 mysql 为例进行说明。

在spark中使用jdbc

在 spark-env.sh 文件中加入:

export SPARK_CLASSPATH=/path/mysql-connector-java-5.1.34.jar

任务提交时加入:

--jars /path/mysql-connector-java-5.1.34.jar

1. 单partition(无并发)

调用函数

def jdbc(url: String, table: String, properties: Properties): DataFrame

使用:

val url = "jdbc:mysql://mysqlHost:3306/database"

val tableName = "table"

// 设置连接用户&密码

val prop = new java.util.Properties

prop.setProperty("user","username")

prop.setProperty("password","pwd")

// 取得该表数据

val jdbcDF = sqlContext.read.jdbc(url,tableName,prop)

// 一些操作

....

查看并发度

jdbcDF.rdd.partitions.size # 结果返回 1

该操作的并发度为

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值