从 AWS Glue 读取 Netezza 时连接超时

Posted

技术标签:

【中文标题】从 AWS Glue 读取 Netezza 时连接超时【英文标题】:Connection timeout when reading Netezza from AWS Glue 【发布时间】:2020-05-21 20:21:56 【问题描述】:

我正在尝试使用 AWS Glue 将数据从我的本地 Netezza 数据库提取到 S3。到目前为止我写的代码(不完整)

df = glueContext.read.format("jdbc")\
    .option("driver", "org.netezza.Driver")\
    .option("url", "jdbc:netezza://NetezzaHost01:5480/Netezza_DB")\
    .option("dbtable", "ADMIN.table1")\
    .option("user", "myUser")\
    .option("password", "myPassword")\
    .load()

print(df.count())

我正在使用自定义 JDBC 驱动程序 jar,因为 AWS Glue 本身不支持 Netezza(驱动程序由 IBM 提供)并在触发作业时将其指定为依赖项。

此代码不断失败并出现超时错误:

py4j.protocol.Py4JJavaError: An error occurred while calling o68.load.
: org.netezza.error.NzSQLException: Connection timed out (Connection timed out)

我尝试过的一些方法不起作用: - 使用火花代替胶水阅读 - 使用非常小的表(

我应该补充一点,Netezza 数据库位于公司防火墙后面,但在使用自定义驱动程序时,我看不到任何用于指定安全组的选项(就像您可以使用 Glue 本机连接一样)。

有什么想法吗?

【问题讨论】:

【参考方案1】:

1) 如果您尝试访问本地的 netezza 主机,您首先需要验证您是否能够从您为粘合作业选择的 VPC 访问 netezza。

2) 这带来了一个问题,因为 VPC 是根据您添加到胶水的连接来选择的,显然没有提到支持 netezza。但是,您仍然可以输入 netezza url 并进行设置。测试可能无法正常工作,但至少您可以选择您选择的子网和 sec-group。你的 sec 组应该打开 netezza 端口

3) 我猜您的 vpc 已直接连接/*** 设置到您的办公室网络。只要您的防火墙接受来自您已添加到粘合作业的子网 CIDR 范围的连接,它就应该可以工作。您可能需要询问管理 netezza 防火墙的团队,从您的 VPC/子网 IP 范围打开连接

【讨论】:

感谢您的帮助。这正是 AWS 所推荐的。我们刚刚使用适当的 VPC 和 sec 组创建了一个 Glue netezza 连接(不起作用),然后将该非工作连接添加到粘合作业。这表明了要使用哪个 VPC/sec-group 的工作,它就像一个魅力。

以上是关于从 AWS Glue 读取 Netezza 时连接超时的主要内容,如果未能解决你的问题,请参考以下文章

AWS Glue 错误 |无法使用 spark 从开发人员端点读取 Glue 表

使用 AWS Glue 从 S3 读取动态 DataTpes

AWS Glue - 从 sql server 表中读取并作为自定义 CSV 文件写入 S3

如何从 AWS Glue 中的 JDBC 编目连接加载部分数据?

优化 Spark AWS GLUE 作业

AWS Glue - GlueContext:从 S3 读取分区数据,将分区添加为 DynamicFrame 的列