首页 > 解决方案 > 插入到 SQL Server RDS 的一行测试有效,但完全加载超时

问题描述

我有一个 Glue 作业脚本可以执行此操作(此处未显示导入和设置),并且可以很好地将行插入 SQL Server RDS:

columns = ['test']
vals = [("test")]

df = sqlContext.createDataFrame(vals, columns)
test = DynamicFrame.fromDF(df, glueContext, "test")
datasink = glueContext.write_dynamic_frame.from_catalog(frame = test, 
database = "database-name", table_name = "table-name")
job.commit()

当我使用相同的连接运行但测试负载更大(最终大约为 100 行)时,我收到此错误:

调用 o596.pyWriteDynamicFrame 时出错。与主机 1433 端口的 TCP/IP 连接失败。错误:“连接超时:没有更多信息。验证连接属性。确保 SQL Server 实例正在主机上运行并在端口接受 TCP/IP 连接。确保与端口的 TCP 连接未被阻止通过防火墙

问题是我知道没有防火墙或安全组问题,因为插入一行就可以了。我尝试向 JDBC 连接添加 loginTimeout 参数,如下所示:

jdbc:sqlserver://<host>:<port>;databaseName=dbName;loginTimeout=600;

因为它表明你可以在这里这样做。但是当我这样做时,使用 Glue 连接失败,但当我删除 loginTimeout 参数时连接成功。

我还检查了我的 SQL Server 实例上的远程超时配置,它显示为 600 秒,这比我的任何失败作业都长,所以不可能是这样。

如何解决此连接超时错误?这似乎是 Glue 内置的限制。

标签: apache-sparkpysparkaws-glue

解决方案


为了使用 Glue 进行 JDBC 连接,您需要按照本文档中的步骤操作:https ://docs.aws.amazon.com/glue/latest/dg/setup-vpc-for-glue-access.html

我们已经这样做了,但事实证明我们的自引用 sec 组实际上并不是自引用。一旦我们改变它得到解决

我还必须将连接创建为 Amazon RDS 连接,而不是 JDBC 连接,即使它在后台执行相同的操作。

即使做了所有这些,我仍然有问题。事实证明,您需要将 sql 连接专门添加到脚本之外的作业中。如果您点击“编辑作业”,您将在那里看到一个 sql 连接列表。如果您尝试访问的连接不在所需连接列表中,您将始终超时


推荐阅读