如何从AWS Glue Python Shell连接到RDS实例?

如何从AWS Glue Python Shell连接到RDS实例?,python,amazon-web-services,amazon-rds,aws-glue,Python,Amazon Web Services,Amazon Rds,Aws Glue,我正在尝试从AWS Glue访问RDS实例,我有一些python脚本在EC2实例中运行,我目前使用PYODBC进行连接,但在尝试为Glue安排作业时,我无法导入PYODBC,因为AWS Glue本机不支持它,不确定驱动程序在glue shell中如何工作。发件人:在AWS glue中引入Python shell作业: AWS Glue中的Python外壳作业支持与Python 2.7兼容的脚本,并预装有Boto3、NumPy、SciPy、pandas等库 不包括pyodbc模块,并且不能作为自定

我正在尝试从AWS Glue访问RDS实例,我有一些python脚本在EC2实例中运行,我目前使用PYODBC进行连接,但在尝试为Glue安排作业时,我无法导入PYODBC,因为AWS Glue本机不支持它,不确定驱动程序在glue shell中如何工作。

发件人:在AWS glue中引入Python shell作业:

AWS Glue中的Python外壳作业支持与Python 2.7兼容的脚本,并预装有Boto3、NumPy、SciPy、pandas等库

不包括
pyodbc
模块,并且不能作为自定义.egg文件提供,因为它依赖于
libodbc.so.2
pyodbc.so

我认为你有两个选择:

  • 从Glue的控制台创建一个数据库,并使用Glue的内部方法进行查询。当然,这需要更改代码
  • 改用Lambda函数。您需要将pyodbc和所需的libs以及代码保存在zip文件中。有人已经为AWS Lambda编译了这些LIB,请参阅
    希望对AWS Glue有所帮助,使用Dataframe/DynamicFrame并指定SQL Server JDBC驱动程序。AWS Glue在其环境中已经包含用于SQL Server的JDBC驱动程序,所以您不需要在Glue作业中添加任何额外的驱动程序jar

    df1=spark.read.format(“jdbc”).option(“driver”,“com.microsoft.sqlserver.jdbc.SQLServerDriver”).option(“url”,url\u src).option(“dbtable”,dbtable\u src).option(“user”,userID\u src).option(“password”,password\u src).load()

    如果使用的是SQL而不是表:

    df1=spark.read.format(“jdbc”).option(“driver”、“com.microsoft.sqlserver.jdbc.SQLServerDriver”).option(“url”、“url\u src”).option(“dbtable”(“您在此处选择的语句”).option(“user”,userID\u src).option(“password”,password\u src).load()


    作为替代解决方案,您还可以在AWS Glue中运行的python脚本中使用用于SQL server的jtds驱动程序

    我能够使用python库psycopg2,即使它不是用纯python编写的,也没有预装AWS Glue python shell环境。这与aws glue文档相反。因此,您可能能够以类似的方式使用odbc相关的python库。我为psycopg2库创建了.egg文件,并在glue python shell环境中成功地使用了它。如果脚本中有
    import psycopg2
    ,并且glue作业引用了相关的psycopg2.egg文件,那么下面是glue python shell的日志

    Creating /glue/lib/installation/site.py
    Processing psycopg2-2.8.3-py2.7.egg
    Copying psycopg2-2.8.3-py2.7.egg to /glue/lib/installation
    Adding psycopg2 2.8.3 to easy-install.pth file
    Installed /glue/lib/installation/psycopg2-2.8.3-py2.7.egg
    Processing dependencies for psycopg2==2.8.3
    Searching for psycopg2==2.8.3
    Reading https://pypi.org/simple/psycopg2/
    Downloading https://files.pythonhosted.org/packages/5c/1c/6997288da181277a0c29bc39a5f9143ff20b8c99f2a7d059cfb55163e165/psycopg2-2.8.3.tar.gz#sha256=897a6e838319b4bf648a574afb6cabcb17d0488f8c7195100d48d872419f4457
    Best match: psycopg2 2.8.3
    Processing psycopg2-2.8.3.tar.gz
    Writing /tmp/easy_install-dml23ld7/psycopg2-2.8.3/setup.cfg
    Running psycopg2-2.8.3/setup.py -q bdist_egg --dist-dir /tmp/easy_install-dml23ld7/psycopg2-2.8.3/egg-dist-tmp-9qwen3l_
    creating /glue/lib/installation/psycopg2-2.8.3-py3.6-linux-x86_64.egg
    Extracting psycopg2-2.8.3-py3.6-linux-x86_64.egg to /glue/lib/installation
    Removing psycopg2 2.8.3 from easy-install.pth file
    Adding psycopg2 2.8.3 to easy-install.pth file
    Installed /glue/lib/installation/psycopg2-2.8.3-py3.6-linux-x86_64.egg
    Finished processing dependencies for psycopg2==2.8.3
    

    以下是我用来连接RDS from glue python外壳作业的步骤:

  • 将依赖项包打包成一个egg文件(如果我没记错的话,这些包必须是纯python的)。把它放在S3中
  • 在job configuration>Python库路径下,将作业设置为引用该egg文件
  • 验证作业是否可以导入包/模块
  • 创建到您的RDS的粘合连接(在数据库>表,连接中),测试连接,确保它可以命中您的RDS
  • 现在在作业中,必须将其设置为引用/使用此连接。当您配置作业或编辑作业时,它位于require连接中


  • 完成这些步骤并进行验证后,您应该能够连接。在我的示例中,我使用了pymysql

    如果任何人需要使用pythonshell与sqlalchemy建立postgres连接,可以通过引用
    sqlalchemy、scramp、pg8000
    wheel文件,通过消除对
    setup.py

    的scramp依赖性,从pg8000重建轮子是很重要的,我需要做一些类似的事情,并最终在Scala中创建了另一个粘合作业,同时将Python用于其他一切。我知道它可能不适用于所有人,但我想提及的是

    尝试使用boto3 python库与aws服务交互。我可以在RDS中的boto3中运行大型查询吗?如果是,怎么做?检查这个答案:谢谢你的回答,不幸的是,我本应该澄清一下,我使用的是一个RDS实例与SQL Server,不幸的是,它不支持这种方法的问题是关于Python外壳,而不是Spark。是吗?@ya2410据我所知,AWS胶水没有外壳或cli接口。我指的是他正在从事的工作类型。在Glue中创建新作业时,可以在Spark和Pythonshell之间进行选择。你的语法是针对Spark的,我可以更正。。我明白你在说什么了。我相信语法应该可以工作,因为粘合作业在EMR上的Spark上运行。但我必须承认我自己还没有在python shell上使用过它。@RakeshGuha更新了“select”语句的答案。数据帧的SPARK文档中也解释了另一种语法。能否将psycopg2之类的库作为自定义.egg文件包括在内?我希望使用psycopg2+pandas来和数据交互,而不是Glue的内部方法。但是您可以使用JDBCConnection+pandasSo,只有将库预加载到python shell中才能使用吗?你不能通过自定义的.egg文件来引入任何未预加载的库吗?不能使用Glue的python shell。但Glue的Spark jobs(Python/Scala)在
    安全配置、脚本库和作业参数下也有可能实现这一点。Python库路径
    &
    依赖jars路径
    我发布了一个答案,其中包含一些您可能感兴趣的最新发现。您在哪里看到这些日志?我在cloudwatch中查看了错误日志和常规日志,没有看到任何类似的内容。我用的是你建议的鸡蛋包装。“连续日志记录”已启用,“日志过滤”没有“过滤器”。您好,您是如何创建egg文件的?您使用了原始psycopg2 github repo中的哪些文件?我尝试过做同样的事情,但始终没有得到名为“psycopg2.\u psycopg”的模块,我在github中没有看到它。