【问题标题】:Time consuming write process of Spark Dataset into the Oracle DB using JDBC driver使用 JDBC 驱动程序将 Spark 数据集写入 Oracle DB 的耗时过程
【发布时间】:2018-08-23 12:40:47
【问题描述】:

我正在使用 Apache Spark 进行数据集加载、处理以及使用 JDBC 驱动程序将数据集输出到 Oracle DB。

我正在使用 spark jdbc write 方法将数据集写入数据库。 但是,在将数据集写入数据库的同时,将 10 行和 1000 万行写入数据库的不同表需要相同的时间。 我想知道如何使用 spark 调整这种写入方法的性能,以便我们可以明智地使用 apache spark 计算引擎。否则,使用它进行快速计算过程没有任何好处;如果写入数据集需要时间进入数据库。 写10行10M行的代码如下:

要写 10 行

 finalpriceItemParamsGroupTable.distinct().write().mode("append").format("jdbc").option("url", connection).option("dbtable", CI_PRICEITEM_PARM).save();

要写入 10M 行

finalPritmOutput.distinct().write().mode("append").format("jdbc").option("url", connection).option("dbtable", CI_TXN_DTL).save();

附上apache spark Dashb的截图 董事会Spark Stages Screenshot

如果有人可以提供帮助会有所帮助...

【问题讨论】:

    标签: scala apache-spark pyspark apache-spark-sql pyspark-sql


    【解决方案1】:

    您可以一次批量插入记录,而不是一次插入 1000 条记录(默认设置),方法是添加一个新选项 batchSize 并增加其值

       finalPritmOutput.distinct().write()
         .mode("append")
         .format("jdbc").option("url", connection)
         .option("dbtable", CI_TXN_DTL)
         .option("batchsize", "100000")
         .save()
    

    请参阅https://spark.apache.org/docs/latest/sql-programming-guide.html#jdbc-to-other-databases,了解如何配置 jdbc 以获得更好的性能。

    【讨论】:

    • 我在命令中添加了上面的 batchsize 选项,但我仍然可以在同一时间写入 DB..为了解决这个问题还有更多工作要做。
    • @user9207408 你能提供你的执行者页面和工作页面的图像吗?我想看看这些任务是否并行运行。
    • 我看到两个任务花费了更长的时间,这通常发生在特定分区的值比其他分区多时。我在这里能想到的就是在 finalPritmOutput 和合并操作的输入上执行合并,你可以给 num-executors * num-cores。
    • @user9207408 你能检查一下这个问题并告诉我解决方案吗stackoverflow.com/questions/56151363/…
    猜你喜欢
    • 2013-09-29
    • 2011-05-05
    • 2011-01-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-04
    相关资源
    最近更新 更多