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 写入数据库
(Pyspark 使用 JDBC 写入 postgres 失败并出现 NullPointerException