我们使用Apache Spark每2小时执行一次ETL。
有时,在执行读/写操作时,Spark会对数据库施加很大压力。
对于Spark Streaming,我可以在kafka上看到backpressure
的配置。
是否可以在批处理中处理此问题?
答案 0 :(得分:3)
背压只是一个花哨的词,用于设置最大接收速率。因此,实际上它并不像您认为的那样起作用。
实际上应该在阅读端进行此操作。
现在在经典JDBC用法中,jdbc连接器具有fetchSize
的{{1}}属性。因此,基本上,您可以考虑根据以下答案中的内容配置该fetchSize:
不幸的是,这可能无法解决PreparedStatement
的所有性能问题。
您必须了解的是,与在单个工作程序上运行的基本jdbc阅读器相比,当使用整数列或使用谓词序列对数据进行分区时,以分布式方式加载数据会带来一些问题。在您的情况下,大量并发读取会轻易限制数据库。
为解决这个问题,我建议以下内容:
如果您想进一步了解使用JDBC源读取数据,建议您阅读以下内容:
免责声明: 。我是该仓库的合著者。