我在 Data Fusion 中创建了一个简单的管道,它从单个 MS SQL Server 表读取数据并写入 BigQuery。当连接到 SQL Server 时由于套接字握手错误而失败。
我在创建自己的 dataproc 集群时看到了这个问题,并且我知道这与 dataproc 在执行 ssl 时使用 conscrypt 作为默认值有关。我还找到了一个解决方法,即在创建集群时设置一个属性:dataproc:dataproc.conscrypt.provider.enable=false
运行数据融合时这是不可能的,因为我无法控制集群的创建方式。我尝试将该属性添加到引擎配置部分,但它不起作用,并且该属性没有显示在 dataproc 集群配置页面中。
这是数据融合中的堆栈跟踪:
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 Server 读取数据。
最佳答案
发生这种情况是因为 Dataproc 默认使用具有 bug 的 Conscrypt SSL 提供商。使用 Conscrypt SSL Provider 创建 SSL 上下文时。
解决方案 要修复运行管道时的问题,请在创建 Dataproc 集群时禁用 conscrypt。这可以通过为管道设置以下运行时参数来完成。
system.profile.properties.dataproc:dataproc.conscrypt.provider.enable false
以下屏幕截图显示了如何使用 UI 为管道设置此项
关于sql-server - Google Data Fusion 中的 SQL Server 源不起作用(SSL 握手问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56736078/