繁体   English   中英

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

[英]Can I test AWS Glue code locally?

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

最终,截至 2019 年 8 月 28 日,亚马逊允许您下载二进制文件和

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

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

我与 AWS 销售工程师交谈过,他们说不可以,您只能通过运行 Glue 转换(在云中)来测试 Glue 代码。 他提到有一种叫做 Outpost 的东西正在测试以允许本地操作,但它尚未公开可用。 所以这似乎是一个坚实的“不”,这是一种耻辱,因为它看起来很不错。 但是没有单元测试,它对我来说是行不通的。

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

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

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

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

添加到 CedricB,

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

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

问候

您可以按如下方式执行此操作:

  1. 安装 PySpark 使用

     >> pip install pyspark==2.4.3
  2. 使用 Python 依赖项预构建 AWS Glue-1.0 Jar: 下载_Prebuild_Glue_Jar

  3. 将 awsglue 文件夹和 Jar 文件从github复制到您的 pycharm 项目中

  4. 从我的git 存储库中复制 Python 代码

  5. 在您的控制台上运行以下命令; 确保输入您自己的路径:

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

来自我自己的博客

现在有来自 AWS 的官方 docker,以便您可以在本地执行 Glue: https : //aws.amazon.com/blogs/big-data/building-an-aws-glue-etl-pipeline-locally-without-an- aws-账户/

该页面上还有一个很好的分步指南

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

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

dockerfile 的 Git 存储库
https://github.com/svajiraya/aws-glue-libs/blob/glue-1.0/Dockerfile

我在媒体上写了一篇关于“测试胶水 Pyspark 工作”的博客文章:

https://towardsdatascience.com/testing-glue-pyspark-jobs-4b544d62106e

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM