Spark JDBC从关系数据库中获取数据优化

Posted

技术标签:

【中文标题】Spark JDBC从关系数据库中获取数据优化【英文标题】:Spark JDBC data fetch Optimization from relational database 【发布时间】:2015-08-18 06:37:27 【问题描述】:

a) 与传统的 java JDBC 调用相比,Spark 是否可以优化从关系数据库中获取数据的方法。 b) 如何在运行 Spark 查询时减少数据库负载,因为我们将直接针对所有查询访问生产数据库。假设 Spark 报告案例的生产中有 3000 万条订单记录和 1.5 亿条订单行记录。

【问题讨论】:

【参考方案1】:

Re a)

您当然可以 .cache() Spark 应用程序中的数据帧,以避免在 Spark 应用程序的生命周期内重复执行该数据帧的 JDBC

您可以使用 partitionColumn、lowerBound、upperBound 和 numPartitions 属性通过范围分区并行 JDBC 调用读取数据帧。这对分布式(分区)数据库后端很有意义。

您可以将集成的 Spark 集群与分布式数据库引擎(如 IBM dashDB)一起使用,该引擎运行与数据库分区位于同一位置的 Spark 执行程序,并在 Spark 和数据库之间执行本地 IPC 数据交换机制:https://ibmdatawarehousing.wordpress.com/category/theme-ibm-data-warehouse/

b) 如果适用,上述 Spark 端缓存会有所帮助。此外,Spark 中的 JDBC 数据源确实尝试将预测和过滤器从您的 Spark SQL/数据帧操作推到底层 SQL 数据库。检查命中数据库的结果 SQL。

【讨论】:

以上是关于Spark JDBC从关系数据库中获取数据优化的主要内容,如果未能解决你的问题,请参考以下文章

Java实现关系型数据库工具类JdbcUtils系列一 :JDBC连接关系型数据库

从 JDBC 源迁移数据时如何优化分区?

spark SQL和hive到底啥关系

使用没有整数列的 Spark(并行)从关系数据库中提取数据?

JDBC访问数据库的步骤

Spark读取JDBC调优