我正在尝试使用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)
我尝试过的一些方法不起作用: -用火花代替胶水阅读 -使用一个很小的表(<100行)作为源
我应该补充一点,即Netezza数据库位于公司防火墙之后,但是在使用自定义驱动程序时,我看不到任何指定安全组的选项(就像对Glue本机连接所做的那样)。
有什么想法吗?
答案 0 :(得分:2)
1)如果您要访问本地的netezza主机,则首先需要验证您是否能够从为胶粘工作选择的VPC上访问netezza。
2)这引起了一个问题,因为VPC是根据您添加到胶水上的连接选择的,因此显然没有提到netezza被支持。但是,您仍然可以输入netezza网址并进行设置。测试可能无法进行,但是至少您可以选择一个子网和sec-group。您的sec组应该打开netezza端口
3)我猜您的vpc可以直接连接到办公室网络/ vpn。只要您的防火墙接受您添加到粘合作业中的子网的CIDR范围内的连接,它就可以正常工作。您可能需要请管理netezza防火墙的团队从您的VPC /子网ip-range打开连接