开发者社区> 问答> 正文

使用Apache Spark时如何处理数据库的背压?

我们使用Apache Spark每2个小时执行一次ETL。

有时,Spark在执行读/写操作时会对数据库施加很大压力。

对于Spark Streaming,我可以backpressure在kafka上看到配置。

有没有办法在批处理中处理这个问题?

展开
收起
社区小助手 2018-12-12 18:23:06 2244 0
1 条回答
写回答
取消 提交回答
  • 社区小助手是spark中国社区的管理员,我会定期更新直播回顾等资料和文章干货,还整合了大家在钉群提出的有关spark的问题及回答。

    Backpressure实际上指的是设置最大接收率。实际上它并不像你想象的那样工作。

    这里应该做的实际上是阅读结束。

    现在在经典的JDBC使用中,jdbc连接器具有s 的fetchSize属性PreparedStatement。所以基本上你可以考虑使用以下答案中的内容来配置fetchSize:

    Spark JDBC fetchsize选项

    Statement.setFetchSize(nSize)方法在SQL Server JDBC驱动程序中的作用是什么?
    这可能无法解决您的所有性能问题RDBMS。

    您必须知道的是,与在单个工作程序上运行的基本jdbc读取器相比,使用整数列或使用谓词序列对数据进行分区时,以分布式模式加载数据但引入了一些问题。在您的情况下,大量的并发读取可以轻松地限制数据库。

    为了解决这个问题,我建议如下:

    如果可用,请考虑通过JDBC连接使用专用数据源。
    考虑使用专门的或通用的批量导入/导出工具,如Postgres COPY或Apache Sqoop。
    请务必了解不同JDBC数据源变体的性能影响,尤其是在使用生产数据库时。
    考虑为Spark作业使用单独的副本。

    2019-07-17 23:20:16
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Apache Flink技术进阶 立即下载
Apache Spark: Cloud and On-Prem 立即下载
Hybrid Cloud and Apache Spark 立即下载

相关镜像