首页 > 解决方案 > Spark JDBC 并行性

问题描述

我正在研究一个用例,在我的情况下,我需要一次卸载 JDBC 数据源,它是 SAP Hana 数据库。我想将整个 SAP Hana 数据库卸载到 HDFS/MapR FS。我们最初尝试过sqoop,但是Sqoop的问题在于它的主键字段,并且它通过--split-by争论只支持一个主键字段。然后我们想计划利用 Spark 来做数据集的 Sqoop。浏览 spark 中可用的各种 JDBC 选项,例如这篇文章https://forums.databricks.com/questions/14963/problems-doing-parallel-read-from-jdbc.html。它也只接受一列,而在 SAP Hana 表的情况下,它主要由共轭键(形成主键的多个键)组成。

  1. spark 如何读取 JDBC 源代码?它是否从表中读取所有数据,然后在工作人员之间按内存中的分区对其进行拆分?

  2. 如何在读取 JDBC SAP Hana 源时指定这样的选项并通过减少 OOM 错误来进行并行读取(如果上面的问题 #1 是肯定的)

  3. 一些 SAP Hana 表甚至没有主键,这就是带来 arge 数据集的问题。

请帮助我形成正确的方法和策略。

提前致谢。

马尼什

标签: apache-sparkdataframejdbcparallel-processing

解决方案


从 JDBC 源读取时,Spark SQL 能够进行有限级别的谓词下推和列修剪优化。鉴于此,可以肯定地说它不会将 JDBC 表中的完整数据读入内存;尽管这在很大程度上取决于您使用的提取查询的类型。

SAP HANA 的 Spark 控制器提供 HANA 与 Spark 的集成。您必须检查它是否支持具有共轭主键且没有主键的表。


推荐阅读