首页 > 解决方案 > 在 Spark Structured Streaming 作业的 forEachBatch 循环中如何以及在何处创建 JDBC 连接?

问题描述

我有一个 spark 结构化流作业,它从 Kafka 读取数据并将数据帧写入 foreachBatch 循环内的 Oracle。我的代码如下。我知道并行连接的数量将取决于numPartitions配置,但对如何跨执行程序、任务和微批处理重用连接感到困惑。

  1. 如果所有执行程序都建立了一次连接,那么它将对未来的微批处理保持打开状态,或者将为每次迭代建立一个新连接。
  2. 如果为执行器内部的每个任务建立连接(例如,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(
    }
    

重用相同连接以最小化批处理执行时间的最佳方法是什么?

标签: apache-sparkjdbcspark-streamingspark-structured-streaming

解决方案


推荐阅读