apache-spark - 在 Spark Structured Streaming 作业的 forEachBatch 循环中如何以及在何处创建 JDBC 连接?
问题描述
我有一个 spark 结构化流作业,它从 Kafka 读取数据并将数据帧写入 foreachBatch 循环内的 Oracle。我的代码如下。我知道并行连接的数量将取决于numPartitions配置,但对如何跨执行程序、任务和微批处理重用连接感到困惑。
- 如果所有执行程序都建立了一次连接,那么它将对未来的微批处理保持打开状态,或者将为每次迭代建立一个新连接。
如果为执行器内部的每个任务建立连接(例如,10 个任务,然后是 10 个连接),那么这是否意味着每次循环迭代及其任务都会建立新连接
StreamingDF.writeStream .trigger(Trigger.ProcessingTime("30 seconds")) .foreachBatch{ (microBatchDF: DataFrame, batchID) => { microBatchDF.write .format("jdbc") .option("url", jdbcUrl) .option("dbtable", "my_schema.my_table") .option("user", username) .option("password", password) .option("batchsize", 10000) .mode(SaveMode.Overwrite) .save( }
重用相同连接以最小化批处理执行时间的最佳方法是什么?
解决方案
推荐阅读
- python - 在 Visual Studio Code 中禁用 Python 的 Jedi linting
- c# - WPF C# 绑定来自另一个类的数据
- javascript - 当来自“背景 > 脚本”的脚本试图清除它时,“web_accessible_resources”脚本设置的间隔 ID 没有被清除
- python - 即使 pandas 中没有值也创建额外的行
- c++ - 我可以将表达式存储为双精度吗?(或任何变量)
- c# - ,net core 3.1 AddAuthorization 方法未找到
- c# - 如何防止 MS Word 文档中出现新行?
- amazon-web-services - Cloudfront 403 绕过
- javascript - D3 按钮输入更改数据(堆积条形图)
- file - 方案:使用 open-i/o-file 函数