Apache Spark & JDBC:套接字异常:连接重置

Posted

技术标签:

【中文标题】Apache Spark & JDBC:套接字异常:连接重置【英文标题】:Apache Spark & JDBC : Socket Exception : Connection Reset 【发布时间】:2021-12-01 19:41:52 【问题描述】:

我们的 Spark Java 应用程序任务在运行时遇到异常 "com.microsoft.sqlserver.jdbc.SQLServerException: java.net.Socket Exception : Connection Reset"

它使用以下代码与数据库建立连接,并且表有数百万条记录:

session.read().format("jdbc")
                        .option("url", dbProperties.getProperty("URL"))
                        .option("driverClass", dbProperties.getProperty("DRIVERCLASS"))
                        .option("username", dbProperties.getProperty("USERNAME"))
                        .option("password", dbProperties.getProperty("PASSWORD"))
                        .option("dbtable", "(" + formattedSQL + ") as " + tablenameDS)
                        .load();

在 Apache Spark 中有没有一种方法,它可以对数据库执行一些 X 连接重试,并在重试之间有延迟?

是否将以下属性“spark.task.maxFailures”的默认值从 4 增加,修复此问题?

【问题讨论】:

【参考方案1】:

两种解决方案:

    option() 中添加特定于JDBC 的属性作为选项,例如connectRetryCount。您可以通过以下方式查看列表:https://docs.microsoft.com/en-us/sql/connect/jdbc/setting-the-connection-properties?view=sql-server-ver15。

    在 URL 本身中添加 JDBC 属性。

您的代码可能如下所示:

session.read().format("jdbc")
    .option("connectRetryCount", 200)
    .option("url", dbProperties.getProperty("URL"))
    .option("driverClass", dbProperties.getProperty("DRIVERCLASS"))
    .option("username", dbProperties.getProperty("USERNAME"))
    .option("password", dbProperties.getProperty("PASSWORD"))
    .option("dbtable", "(" + formattedSQL + ") as " + tablenameDS)
    .load();

您可以在此处找到详细示例:https://github.com/jgperrin/net.jgp.books.spark.ch08/tree/master/src/main/java/net/jgp/books/spark/ch08/lab100_mysql_ingestion。

【讨论】:

我确实添加了以下设置,并在数据库级别终止了会话,但仍然没有重新连接。

以上是关于Apache Spark & JDBC:套接字异常:连接重置的主要内容,如果未能解决你的问题,请参考以下文章

Apache Spark JDBC SQL 注入 (pyspark)

是否可以使用 spark 的 jdbc 驱动程序将 apache spark 与 jasper 集成?

Apache spark JDBC连接读写驱动程序丢失

Spark Jdbc 连接 JDBCOptions

在 Apache Spark JDBC DataFrame 中使用 Postgis 几何类型

从Apache Spark加载PrestoDB表