AWS Python Shell - 如何使用 Glue 目录连接
Posted
技术标签:
【中文标题】AWS Python Shell - 如何使用 Glue 目录连接【英文标题】:AWS Python Shell - How to use Glue Catalog Connections 【发布时间】:2019-08-10 03:09:08 【问题描述】:我在 Glue 中定义了一个 JDBC 连接,并且能够在 Glue Spark 作业中成功使用它。我将如何在 Glue Python Shell 作业中使用相同的连接?虽然我已经看到有可能的参考资料,但我找不到任何模板如何做到这一点。
另一种方法是如何在需要包含外部库的 Python Shell 中定义 JDBC 连接? pyodbc
由于依赖关系,我读过的内容不可用。
【问题讨论】:
JDBC 是用于 Java 的,你不能只在 Python 中使用它(不能没有库从 Python 调用 Java)。 你使用什么数据源? @MarkRotteveel 因为我已经完成了在 Glue 目录中定义连接的工作,并且 Glue Spark 作业(授予 spark 与 Java 的 Spark 关联),在 Python Shell 作业中也将能够利用预定义的连接。或者,shell 作业真的很简单,我将不得不找到一种方法来存储、管理和创建 SQL 连接。 @UjjwalBhardwaj 我正在使用 MS SQL Server。 【参考方案1】:这里是代码。确保在您的 python shell 作业 cloudformation 模板中添加了相同的连接。我们正在使用 pg8000 库。
def get_connection(self, conn_name):
client = boto3.client('glue', region_name=self.region_id)
response = client.get_connection(Name=conn_name)
print response
connection_properties = response['Connection']['ConnectionProperties']
URL = connection_properties['JDBC_CONNECTION_URL']
url_list = URL.split("/")
host = "".format(url_list[-2][:-5])
port = url_list[-2][-4:]
database = "".format(url_list[-1])
user = "".format(connection_properties['USERNAME'])
pwd = "".format(connection_properties['PASSWORD'])
# print "user:".format(user)
# print "pwd:".format(pwd)
# print "host:".format(host)
# print "port:".format(port)
# print "database:".format(database)
rs_conn = dbapi.connect(database=database, host=host, port=5439, \
user=user, password=pwd, ssl=True)
cur = rs_conn.cursor()
cur.execute("set statement_timeout = 1200000")
rs_conn.commit()
cur.close()
return rs_conn
【讨论】:
这是否意味着 Python shell 不能使用 Glue 的 JDBC 连接,而是需要使用从 get_connection 提取的信息通过 pg8000 定义一个新连接? 是的,因为连接设置是在为 python shell 分配 EC2 之前完成的。如果它是在没有粘合连接的情况下完成的,那么 VPC 处理应该通过新分配的 EC2 的代码来完成。我不确定这是否可能。【参考方案2】:当您将 JDBC 连接附加到 Glue Python Shell 作业时,Glue 只能使用它来启动具有安全组的指定子网中的 ENI。 jdbc url、用户名、密码对 Python Shell 作业没有任何价值。
因此,您必须提供一个外部包,例如 pymssql (http://www.pymssql.org/en/stable/),并从脚本本身初始化连接。
您可以参考提供您自己的 Python 库的文档:https://docs.aws.amazon.com/glue/latest/dg/add-job-python.html#create-python-egg-library
【讨论】:
以上是关于AWS Python Shell - 如何使用 Glue 目录连接的主要内容,如果未能解决你的问题,请参考以下文章
AWS Glue Python Shell 与 Oracle 的连接
如何在 spark-shell 中设置 aws 访问密钥和 aws 密钥
如何在 aws elastic beanstalk 环境实例启动上运行 shell 脚本