SQL Google 数据融合中的服务器源不起作用(SSL 握手问题)
SQL Server Source in Google Data Fusion Doesn't Work (SSL handshake issue)
我在 Data Fusion 中创建了一个简单的管道,它从单个 MS SQL 服务器 table 读取并写入 BigQuery。连接到 SQL 服务器时出现套接字握手错误失败。
我在创建自己的 dataproc 集群时看到了这个问题,我知道这与在执行 ssl 时默认使用 conscrypt 的 dataproc 有关。我还找到了一个解决方法,即在创建集群时设置一个 属性:dataproc:dataproc.conscrypt.provider.enable=false
这在 运行 数据融合时是不可能的,因为我无法控制集群的创建方式。我试过将 属性 添加到引擎配置部分,但它不起作用,而且 属性 没有显示在 dataproc 集群配置页面中。
这是 Data Fusion 中的堆栈跟踪:
java.net.SocketException: Socket is closed
at org.conscrypt.NativeSsl.doHandshake(NativeSsl.java:390) ~[libconscrypt.jar:1.2.0-SNAPSHOT]
at org.conscrypt.ConscryptFileDescriptorSocket.startHandshake(ConscryptFileDescriptorSocket.java:225) ~[libconscrypt.jar:1.2.0-SNAPSHOT]
at com.microsoft.sqlserver.jdbc.TDSChannel.enableSSL(IOBuffer.java:1688) ~[na:na]
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1977) ~[na:na]
at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:1628) ~[na:na]
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:1459) ~[na:na]
at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:773) ~[na:na]
at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1168) ~[na:na]
at io.cdap.plugin.db.JDBCDriverShim.connect(JDBCDriverShim.java:60) ~[na:na]
at java.sql.DriverManager.getConnection(DriverManager.java:664) ~[na:1.8.0_212]
at java.sql.DriverManager.getConnection(DriverManager.java:208) ~[na:1.8.0_212]
我只想从 Data Fusion 中的 SQL 服务器读取数据。
发生这种情况是因为 Dataproc 在使用 Conscrypt SSL 提供程序创建 SSL 上下文时默认使用具有 bug 的 Conscrypt SSL 提供程序。
解决方案
要解决 运行 管道在创建 Dataproc 集群时禁用 concrypt 的问题。这可以通过为管道设置以下运行时参数来完成。
system.profile.properties.dataproc:dataproc.conscrypt.provider.enable
false
以下屏幕截图显示了如何使用 UI
为管道设置此项
我在 Data Fusion 中创建了一个简单的管道,它从单个 MS SQL 服务器 table 读取并写入 BigQuery。连接到 SQL 服务器时出现套接字握手错误失败。
我在创建自己的 dataproc 集群时看到了这个问题,我知道这与在执行 ssl 时默认使用 conscrypt 的 dataproc 有关。我还找到了一个解决方法,即在创建集群时设置一个 属性:dataproc:dataproc.conscrypt.provider.enable=false
这在 运行 数据融合时是不可能的,因为我无法控制集群的创建方式。我试过将 属性 添加到引擎配置部分,但它不起作用,而且 属性 没有显示在 dataproc 集群配置页面中。
这是 Data Fusion 中的堆栈跟踪:
java.net.SocketException: Socket is closed at org.conscrypt.NativeSsl.doHandshake(NativeSsl.java:390) ~[libconscrypt.jar:1.2.0-SNAPSHOT] at org.conscrypt.ConscryptFileDescriptorSocket.startHandshake(ConscryptFileDescriptorSocket.java:225) ~[libconscrypt.jar:1.2.0-SNAPSHOT] at com.microsoft.sqlserver.jdbc.TDSChannel.enableSSL(IOBuffer.java:1688) ~[na:na] at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectHelper(SQLServerConnection.java:1977) ~[na:na] at com.microsoft.sqlserver.jdbc.SQLServerConnection.login(SQLServerConnection.java:1628) ~[na:na] at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectInternal(SQLServerConnection.java:1459) ~[na:na] at com.microsoft.sqlserver.jdbc.SQLServerConnection.connect(SQLServerConnection.java:773) ~[na:na] at com.microsoft.sqlserver.jdbc.SQLServerDriver.connect(SQLServerDriver.java:1168) ~[na:na] at io.cdap.plugin.db.JDBCDriverShim.connect(JDBCDriverShim.java:60) ~[na:na] at java.sql.DriverManager.getConnection(DriverManager.java:664) ~[na:1.8.0_212] at java.sql.DriverManager.getConnection(DriverManager.java:208) ~[na:1.8.0_212]
我只想从 Data Fusion 中的 SQL 服务器读取数据。
发生这种情况是因为 Dataproc 在使用 Conscrypt SSL 提供程序创建 SSL 上下文时默认使用具有 bug 的 Conscrypt SSL 提供程序。
解决方案 要解决 运行 管道在创建 Dataproc 集群时禁用 concrypt 的问题。这可以通过为管道设置以下运行时参数来完成。
system.profile.properties.dataproc:dataproc.conscrypt.provider.enable false
以下屏幕截图显示了如何使用 UI
为管道设置此项