sql-server - Google Data Fusion 中的 SQL Server 源不起作用(SSL 握手问题)

标签 sql-server google-cloud-dataproc google-cloud-data-fusion

我在 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 为管道设置此项

enter image description here

关于sql-server - Google Data Fusion 中的 SQL Server 源不起作用(SSL 握手问题),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56736078/

相关文章:

google-cloud-data-fusion - 连接到 Cloud SQL MySQL

sql - 列出另一组记录 x 小时内发生的所有 SQL 记录

sql-server - 使用 Rest-API 查询 Azure SQL 数据库

apache-spark - 如何将 PySpark 中的数据帧/RDD 以 CSV/Parquet 文件的形式快速保存到磁盘?

apache-spark - 在 Dataproc 上使用 Spark 进行跨账户 GCS 访问

google-cloud-data-fusion - 如何在数据融合中将架构文件作为宏传递到 BigQuery 接收器

sql - 简单的更新查询花费的时间太长

sql - 谁在 SQL Server 代理中禁用了作业

hadoop - 在 socks 代理上访问 GCloud 资源

rest - Google Cloud Data Fusion——从 REST API 端点源构建管道