jdbc写信给greenplum/postgres问题



Spark jdbc写入会让列数更多(400列和200行(的数据成为噩梦,即使列数更少、行数更多,也需要相当长的时间(200k条记录需要30到60分钟(。我们没有用于分区的主键,所以将很少使用相关的键(从jdbc/转换中读取没有问题,只有写入有问题(。

  • Spark Cluster conf——1个主节点,2个工作节点>gt;8个核,每个32 Gb
  • Spark sumit命令参数--'execute_cores':2,'executor_memory':'2G','num_executors':2,'driver_memory':'2G'

根据其他stackoverflow建议,尝试了以下方法。

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(。这对性能有很大帮助
  2. 减少批处理大小有助于写入数据库。通过反复试验,我们可以为环境确定合适的价值

最新更新