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 配置 DPU

AWS Glue Python Shell 与 Oracle 的连接

如何在 spark-shell 中设置 aws 访问密钥和 aws 密钥

如何在 aws elastic beanstalk 环境实例启动上运行 shell 脚本

AWS EMR 4.0 - 如何添加自定义 JAR 步骤来运行 shell 命令

如何在没有 Spark-Shell 的情况下从 AWS 控制台运行 Spark jar 文件