Apache spark 使用ApacheSpark时如何处理数据库上的反压力?
我们使用ApacheSpark每2小时执行一次ETL 有时,在执行读/写操作时,Spark会对数据库施加很大压力 对于Spark Streaming,我可以在kafka上看到Apache spark 使用ApacheSpark时如何处理数据库上的反压力?,apache-spark,apache-spark-sql,Apache Spark,Apache Spark Sql,我们使用ApacheSpark每2小时执行一次ETL 有时,在执行读/写操作时,Spark会对数据库施加很大压力 对于Spark Streaming,我可以在kafka上看到背压配置 有没有办法在批处理中处理这个问题?背压实际上只是一个花哨的词,用来指设置最大接收速率。所以事实上它不像你想象的那样工作 这里应该做的实际上是在阅读端 现在在经典的JDBC用法中,JDBC连接器为PreparedStatements提供了fetchSize属性。因此,基本上,您可以考虑在以下答案中配置“FETCHSI
背压配置
有没有办法在批处理中处理这个问题?背压实际上只是一个花哨的词,用来指设置最大接收速率。所以事实上它不像你想象的那样工作
这里应该做的实际上是在阅读端
现在在经典的JDBC用法中,JDBC连接器为PreparedStatement
s提供了fetchSize
属性。因此,基本上,您可以考虑在以下答案中配置“FETCHSIZE”:
不幸的是,这可能无法解决RDBMS
的所有性能问题
您必须知道的是,与运行在单个worker上的基本jdbc读取器相比,当使用整型列或谓词序列对数据进行分区时,以分布式模式加载数据会带来一些问题。在您的情况下,大量并发读取可以很容易地限制数据库
为此,我提出以下建议:
如果可用,请考虑在JDBC上使用专用数据源
联系李>
- 考虑使用专门的或通用的批量导入/导出工具,如Postgres COPY或Apache Sqoop李>
- 确保了解不同JDBC数据源的性能含义
变体,尤其是在使用生产数据库时李>
- 考虑为Spark作业使用单独的副本
如果您希望了解有关使用JDBC源读取数据的更多信息,我建议您阅读以下内容:
免责声明:我是该回购协议的合著者。背压实际上只是一个花哨的词,用来指设置最大接收率。所以事实上它不像你想象的那样工作
这里应该做的实际上是在阅读端
现在在经典的JDBC用法中,JDBC连接器为PreparedStatement
s提供了fetchSize
属性。因此,基本上,您可以考虑在以下答案中配置“FETCHSIZE”:
不幸的是,这可能无法解决RDBMS
的所有性能问题
您必须知道的是,与运行在单个worker上的基本jdbc读取器相比,当使用整型列或谓词序列对数据进行分区时,以分布式模式加载数据会带来一些问题。在您的情况下,大量并发读取可以很容易地限制数据库
为此,我提出以下建议:
如果可用,请考虑在JDBC上使用专用数据源
联系李>
- 考虑使用专门的或通用的批量导入/导出工具,如Postgres COPY或Apache Sqoop李>
- 确保了解不同JDBC数据源的性能含义
变体,尤其是在使用生产数据库时李>
- 考虑为Spark作业使用单独的副本
如果您希望了解有关使用JDBC源读取数据的更多信息,我建议您阅读以下内容:
免责声明:我是该回购协议的共同作者