最近在用 spark 通过 jdbc 写入 clickhouse 的时候,遇到一些坑,这里分享下,造福人民群众。

一个 WARN

WARN JdbcUtils: Requested isolation level 1, but transactions are unsupported

这是因为 clickhouse 不支持事务造成的,解决方案,jdbc 加入 isolationLevel 等于 NONE 的选项,isolationLevel 详解

一个报错

merges are processing significantly slower than inserts

这是因为 spark 多个 partition 同时并发写引发的错误,解决方案 jdbc 加入 numPartitions 等于 1 的选项控制并发数,numPartitions 详解

完整 scala 代码

    spark.createDataFrame(data)
      .write
      .mode(SaveMode.Append)
      .option("batchsize", "50000")
      .option("isolationLevel", "NONE") // 设置事务
      .option("numPartitions", "1") // 设置并发
      .jdbc(dbUrl,
        "table",
        dbProp)

更多 spark jdbc 选项,参考 spark 官方文档

07-28 07:02