【发布时间】:2018-02-24 22:01:20
【问题描述】:
我目前有一个应用程序,它应该连接到不同类型的数据库,使用 Spark 的 JDBC 选项在该数据库上运行特定查询,然后将生成的 DataFrame 写入 HDFS。
Oracle 的性能非常糟糕(没有检查所有这些)。原来这是因为 fetchSize 属性默认为 10 行。所以我将它增加到 1000,性能提升非常明显。然后,我将其更改为 10000,但随后一些表开始因执行程序中的内存不足问题而失败(6 个执行程序,每个 4G 内存,2G 驱动程序内存)。
我的问题是:
Spark 的 JDBC 获取的数据是否在每次运行时都保存在执行程序内存中?有没有办法在作业运行时取消持久化它?
从哪里可以获得有关
fetchSize属性的更多信息?我猜它不会被所有 JDBC 驱动程序支持。我是否需要注意与 JDBC 相关的其他事项以避免 OOM 错误?
【问题讨论】:
标签: apache-spark jdbc apache-spark-sql