gpt4 book ai didi

apache-spark - Spark JDBC fetchsize 选项

转载 作者:行者123 更新时间:2023-12-03 09:40:09 24 4
gpt4 key购买 nike

我目前有一个应用程序,它应该连接到不同类型的数据库,使用 Spark 的 JDBC 选项在该数据库上运行特定查询,然后将生成的 DataFrame 写入 HDFS。

Oracle 的性能非常糟糕(没有检查所有这些)。原来是因为 fetchSize Oracle 的默认属性为 10 行。所以我将它增加到 1000,性能提升非常明显。然后,我将其更改为 10000,但随后一些表开始因执行程序中的内存不足问题而失败(6 个执行程序,每个 4G 内存,2G 驱动程序内存)。

我的问题是:

  • Spark 的 JDBC 获取的数据是否在每次运行时都保存在执行程序内存中?有什么办法可以在作业运行时取消持久化吗?
  • 我在哪里可以获得有关 fetchSize 的更多信息属性(property)?我猜它不会被所有 JDBC 驱动程序支持。
  • 是否还有其他与 JDBC 相关的事情需要注意以避免 OOM 错误?
  • 最佳答案

    Fetch Size 它只是 JDBC PreparedStatement 的一个值。

    您可以在 JDBCRDD.scala 中看到它:

     stmt.setFetchSize(options.fetchSize)

    您可以阅读有关 JDBC FetchSize here 的更多信息

    您还可以改进的一件事是设置所有 4 个参数,这将导致读取并行化。查看更多 here .那么你的阅读可以拆分到多台机器上,所以每台机器的内存使用量可能会更小。

    有关支持哪些 JDBC 选项以及如何支持的详细信息,您必须搜索驱动程序文档 - 每个驱动程序可能都有自己的行为

    关于apache-spark - Spark JDBC fetchsize 选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46244171/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com