jdbc 写入 greenplum/postgres 问题

Posted

技术标签:

【中文标题】jdbc 写入 greenplum/postgres 问题【英文标题】:jdbc write to greenplum/postgres issue 【发布时间】:2021-05-23 04:50:43 【问题描述】:

Spark jdbc 写入会给具有更多列(400 列和 200 行)的数据带来噩梦,即使列更少而行更多,它也需要很长时间(20 万条记录需要 30 到 60 分钟)。我们没有用于分区的主键,因此将使用很少的相关键(从 jdbc/transformations 读取没有问题,只有写入有问题)。

Spark Cluster conf -- 1 个 master,2 个 worker >> 8 个核心,每个 32 Gb。 Spark sumit 命令参数 -- 'executor_cores': 2,'executor_memory': '2G','num_executors': 2,'driver_memory': '2G'

根据其他 *** 建议尝试以下方式。

df.write.format('jdbc').options(url=url,driver=driver,dbtable=table,user=user,password=password,batchsize=20000,rewriteBatchedStatements=true).mode(mode).save()
df.repartition(15).write.format('jdbc').options(url=url,driver=driver,dbtable=table,user=user,password=password,batchsize=20000,rewriteBatchedStatements=true).mode(mode).save()

写入 mysql 工作正常。写入 greenplum 和 postgres 是个问题(两者均已验证)。 我找不到太多选择。

【问题讨论】:

【参考方案1】:

经过反复试验,发现了一些有助于提高性能的参数。

    对于 Postgres,应使用 reWriteBatchedInserts=true 而不是 rewriteBatchedStatements=true(这仅适用于 mysql)。这对性能有很大帮助。 减少批量有助于写入数据库。通过反复试验,我们可以确定适合环境的价值。

【讨论】:

以上是关于jdbc 写入 greenplum/postgres 问题的主要内容,如果未能解决你的问题,请参考以下文章

我无法使用 jdbc 将 Spark DataFrame 写入数据库

Apache spark - JDBC 写入,中间提交

Spark将DataFrame写入jdbc错误

(Pyspark 使用 JDBC 写入 postgres 失败并出现 NullPointerException

使用 JDBC 写入编写 AWS Glue DynamicFrame 时出现 PostreSQL 枚举问题

如何为 jdbc 使用复合文件编写器或将数据写入数据库?