【发布时间】:2021-01-02 05:25:08
【问题描述】:
我正在尝试从 SAP HANA 中的一个大表中提取数据,该表大小约为 1.5tb,最好的方法是跨节点和线程并行运行。 Spark JDBC 是该任务的完美候选者,但为了实际并行提取,它需要设置分区列、下限/上限和分区数选项。为了使提取操作更容易,我考虑添加一个添加的分区列,它是 row_number() 函数,并分别使用 MIN()、MAX() 作为下限/上限。然后只需要运维团队提供要拥有的分区数量。
问题在于 HANA 内存不足,并且很可能 row_number() 在引擎上的开销太大。我只能想象有超过 100 个线程在每次 fetch 期间运行相同的查询以应用 where 过滤器并检索相应的块。
所以我的问题是,如果我禁用谓词下推选项,spark 的行为如何?它是否仅由一个执行者读取,然后将过滤器应用于 spark 端?还是从数据库中拆分获取部分有什么魔力?
对于使用可用的 JDBC 阅读器提取如此大的表,您有什么建议?
提前致谢。
【问题讨论】:
标签: apache-spark jdbc hana