SparkSQL连接问题

时间:2018-07-24 00:08:43

标签: mysql apache-spark apache-spark-sql

我有一个Spark作业,它将CSV文件中的数据加载到MySQL数据库中。

一切正常,但最近我注意到Spark在插入阶段打开了许多连接(超过300个连接)。感觉就像是为每个插入语句打开一个新连接,使其保持打开状态,并在某个时间点进行提交和关闭连接。有没有一种方法可以在每次插入之后或在处理10K批处理后进行提交,并且一次提交?

这将是不为每个插入打开连接。如果需要处理1K记录是很好的选择,但是当您处理数十亿条记录时,它会占用大量资源。

1 个答案:

答案 0 :(得分:1)

如果对数据帧进行任何操作(默认情况下会导致shuffl,spark),则创建200个分区。导致200个数据库连接。

spark.sql.shuffle.partitions-配置在对联接或聚集的数据进行混排时要使用的分区数。 -默认值:200

使用以下方法检查数据帧的分区数量:

df.rdd.getNumPartitions

在常用列上使用重新划分数据框:
df.repartition(NUMBER_OF_PARTIOTONS, col("Frequent_used_column"))

您还可以设置'batchsize'参数来控制每次往返插入的行数。这有助于提高JDBC驱动程序的性能。默认值为1000。

jdbcDF.write
  .format("jdbc")
  .option("url", "jdbc:postgresql:dbserver")
  .option("dbtable", "schema.tablename")
  .option("user", "username")
  .option("password", "password")
  .option("batchsize", 5000)
  .save()