我可以在本地测试AWS Glue代码吗?

时间:2018-01-18 05:15:03

标签: python amazon-web-services aws-glue

在阅读完亚马逊文档后,我的理解是运行/测试Glue脚本的唯一方法是将其部署到开发端点并在必要时远程调试。同时,如果(Python)代码由多个文件和包组成,则除了主脚本之外的所有代码都需要压缩。所有这些让我觉得Glue不适合任何复杂的ETL任务,因为开发和测试很麻烦。我可以在本地测试我的Spark代码,而无需每次都将代码上传到S3,并在CI服务器上验证测试,而无需支付开发Glue端点。

9 个答案:

答案 0 :(得分:6)

最终,从2019年8月28日开始,Amazon允许您下载二进制文件和

  

开发,编译,调试和单步执行Glue ETL脚本,复杂   在本地使用Scala和Python生成Spark应用程序。

查看此链接:https://aws.amazon.com/about-aws/whats-new/2019/08/aws-glue-releases-binaries-of-glue-etl-libraries-for-glue-jobs/

答案 1 :(得分:5)

我与AWS销售工程师交谈,他们说不,您只能通过运行Glue转换(在云中)来测试Glue代码。他提到,已经测试了一个名为Outpost的东西以允许本地操作,但是该信息尚未公开。因此,这似乎是一个可靠的“否”,这很可惜,因为否则它看起来还不错。但是没有单元测试,对我来说就不行了。

答案 2 :(得分:2)

您可以将胶粘剂和pyspark代码保存在单独的文件中,并且可以在本地对pyspark代码进行单元测试。对于依赖文件的压缩,我们编写了shell脚本,该脚本将文件压缩并上传到s3位置,然后应用CF模板来部署胶水作业。 为了检测依赖性,我们创建了(粘合作业)_dependency.txt文件。

答案 3 :(得分:1)

不是我知道的,如果你有很多远程资产,那将是棘手的。使用Windows,我通常在创作工作时运行开发端点和本地zeppelin笔记本。我每天关闭它。

您可以使用作业编辑器>脚本编辑器,用于编辑,保存和运行作业。不确定成本差异。

答案 4 :(得分:1)

添加到CedricB,

出于开发/测试目的,无需将代码上传到S3,您可以在本地设置zeppelin笔记本,建立SSH连接,以便可以访问数据目录/爬虫等。以及您的数据所在的s3存储桶。

完成所有测试后,您可以捆绑代码,上传到S3存储桶。然后创建一个指向S3存储桶中的ETL脚本的作业,以便可以运行和调度作业。完成所有开发/测试后,请务必删除开发端点,因为即使在IDLE时间内我们也会收费。

此致

答案 5 :(得分:1)

我认为这里的关键是定义要在本地进行的测试类型。如果您要进行单元测试(即仅测试一个与支持该脚本的AWS服务无关的pyspark脚本),请确保可以在本地进行。在测试您在pyspark脚本中编写的逻辑时,请使用pytest-mockmonkeypatchunittest之类的模拟模块来模拟脚本外部的AWS和Spark服务。 对于模块测试,您可以像AWS EMR NotebooksZeppelinJupyter这样的工作簿环境。在这里,您可以针对测试数据源运行Spark代码,但可以模拟AWS服务。
对于集成测试(即,将代码与它所依赖的服务集成在一起,而不是与生产系统集成),可以从CI / CD管道启动系统的测试实例,然后拥有计算资源(例如pytest脚本)或AWS Lambda)自动执行脚本执行的工作流程。

答案 6 :(得分:0)

您可以执行以下操作:

  1. 使用

    安装PySpark
    >> pip install pyspark==2.4.3
    
  2. 使用Python依赖项预构建AWS Glue-1.0 Jar:Download_Prebuild_Glue_Jar

  3. 将awsglue文件夹和Jar文件从github

  4. 复制到您的pycharm项目中
  5. 从我的git repository

  6. 复制Python代码
  7. 在控制台上运行以下命令;确保输入您自己的路径:

    >> python com/mypackage/pack/glue-spark-pycharm-example.py
    

来自my own blog

答案 7 :(得分:0)

如果您想在docker中运行它,这是一个链接

Docker Hub: https://hub.docker.com/r/svajiraya/glue-dev-1.0

用于dockerfile的Git Repo
https://github.com/svajiraya/aws-glue-libs/blob/glue-1.0/Dockerfile

答案 8 :(得分:0)

现在有来自AWS的正式码头工人,您可以在本地执行Glue: https://aws.amazon.com/blogs/big-data/building-an-aws-glue-etl-pipeline-locally-without-an-aws-account/

该页面上也有一个不错的分步指南