spark2.4.6+jdbc读取器:当predicate pushdown设置为false时,spark是否从引擎并行读取数据?

ycl3bljg  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(534)

我正在尝试从saphana中的一个大表中提取数据,这个表的大小约为1.5tb,最好的方法是跨节点和线程并行运行。sparkjdbc是该任务的最佳候选,但为了实际并行提取,它需要设置partition列、下限/上限和分区数选项。为了简化提取操作,我考虑添加一个分区列,它将是row_number()函数,并分别使用min()、max()作为下限/上限。然后操作团队只需要提供分区的数量。
问题是hana内存不足,很可能是row_number()在引擎上开销太大。我只能想象,100多个线程在每次获取期间运行相同的查询,以应用where过滤器并检索相应的块。
所以我的问题是,如果我禁用 predicate 下推选项,spark的行为如何?它是否只由一个执行器读取,然后在Spark侧应用过滤器?或者从数据库中拆分获取部分是否有魔力?
对于使用可用的jdbc读取器提取如此大的表,您有什么建议?
提前谢谢。

fjaof16o

fjaof16o1#

在从spark执行主查询之前,请运行预摄取查询以获取正在加载的数据集的大小,如您所提到的min()、max()等。
希望数据均匀分布在min和max键之间,您可以通过提供min/max/number of executors在spark中对执行器进行分区。
在这种情况下,您不需要(希望)通过添加其他列来更改主数据源以支持数据摄取。

相关问题