【问题标题】:Can I test AWS Glue code locally?我可以在本地测试 AWS Glue 代码吗?
【发布时间】:2018-06-27 02:39:35
【问题描述】:

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

【问题讨论】:

  • @Ifk - 你能解决这个问题吗?我正在研究 Glue 并在开发端点上测试代码。我正在寻找更好的选择?
  • 似乎没有更好的选择。最后我决定不使用胶水
  • Yuva 提到的 Zeppelin 工作流程似乎仍然是 2018 年 8 月要走的路,如果没有某种公开可用的运行时来构建/针对本地进行测试。如果胶水的主要用例是源和汇,并且您的实际 ETL 可以用 spark 编写,则可能值得考虑在本地构建 spark ETL,部署为 jar 并将 Glue 脚本保留为“哑”包装器从 ETL 作业中提供/收集数据。

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


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    添加到 CedricB,

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

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

    问候

    【讨论】:

    • 值得注意的是,当 Glue 编译您的 Scala 作业时,它可能与 dev 端点中的 spark shell 有点不同(即,至少警告被视为致命的,而在火花壳)。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 它似乎不适合生产、业务关键型任务。我认为它主要针对数据科学家来运行临时工作和分析。尽管如此,我们的 AWS 顾问还是非常努力地说服我们在 EMR 上使用 Glue 而不是 Spark。
      • 过时的答案
      【解决方案5】:

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

      开发、编译、调试和单步 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/

      【讨论】:

      • 你有没有使用它?
      • 是的,但仅在禁用 Hive 支持之后(此处不接受的答案为:stackoverflow.com/a/45545595/3080611)。然后我再次从 aws 胶水仓库重新运行 bin/setup.py 以使用 Maven 构建 jar。
      【解决方案6】:

      你可以这样做:

      1. 使用安装 PySpark

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

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

      4. 从我的git repository复制Python代码

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

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

      来自my own blog

      【讨论】:

      • 下次链接到你自己的博客时,要非常非常清楚地表明它是你的博客。否则,您将面临被作为垃圾邮件删除的风险。
      【解决方案7】:

      如果你想在 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

      【讨论】:

      • 您能解释一下如何使用 Docker 来启动本地粘合脚本吗?或者也许给我们一些关于它的文档?谢谢!
      • 那些是非官方的码头工人。还有一个官方的:aws.amazon.com/blogs/big-data/…
      【解决方案8】:

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

      【讨论】:

        【解决方案9】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2018-06-21
          • 2018-04-30
          • 1970-01-01
          • 1970-01-01
          • 2021-11-15
          • 2019-03-06
          • 2020-08-10
          相关资源
          最近更新 更多