AWS Glue 作业生命周期 - 笔记本到作业

Posted

技术标签:

【中文标题】AWS Glue 作业生命周期 - 笔记本到作业【英文标题】:AWS Glue Job Lifecycle - Notebook to Job 【发布时间】:2019-08-25 13:57:28 【问题描述】:

粘合作业开发的理想开发生命周期是什么?我已经能够创建一个运行胶水作业。作业脚本窗口作为一个 IDE 很糟糕,这让我了解了笔记本。我已经启动并运行了笔记本服务器,我可以使用我的胶水作业使用的同一个 S3 存储桶。

如果笔记本是编写和开发粘合/火花作业的理想 IDE。一旦你按照你想要的方式编写了脚本,是否有一个简单的“部署路径”可以让 notebook 成为一项工作?我可以看到两个不同的工作流程

    复制和粘贴 - 不优雅但简单,从笔记本复制代码并将其粘贴到新的粘合作业定义中。您祈祷笔记本中的代码不会与胶水作业不同步。

    S3 作为笔记本存储 - 我什至不知道这是否可行,但我在配置中看到 Zeppelin 可以将笔记本保存到 S3,这就是你所做的,是将 Zeppelin 和 Glue Job 指向相同的 S3 位置

还有其他方法可以完成所有这些吗?我还想利用 Git 对作业文件进行版本控制,所以如果有某种方法可以构建该工作流,那也很好。

【问题讨论】:

【参考方案1】:

您可以将笔记本解析为 python 脚本。这是我一直使用的script。

这是我目前使用的工作流程: 当您将一个分支合并到主分支时,它会触发一个 Jenkins 管道,该管道将克隆您的 git 存储库中的代码,将笔记本解析为正确的 python 代码,构建环境,运行一些测试,然后如果全部成功,则将脚本上传到AWS Glue 的脚本存储桶,并可选择创建作业。创建作业后,您只需覆盖存储桶中的脚本即可更新代码。

【讨论】:

【参考方案2】:

您可以设置一个 AWS Code Pipeline,将代码放到 S3 中的指定位置:

使用 CodeCommit 将您的本地代码提交到代码存储库 使用 CodeBuild 从存储库中获取一个或多个文件并生成工件。一个示例buildspec.yml 如下:
artifacts:
    files:
        - "glue_scripts/**/*"
使用 CodeDeploy,选择构建工件作为源并选择 S3 存储桶作为目标 然后在 Glue 中将脚本的位置分配给“脚本路径”下的 Glue 作业

【讨论】:

【参考方案3】:

我创建了一个库,用于打包您的代码、将其发送到胶合并通过逐步函数对其进行编排。它的目标是简化从本地开发到在 AWS 上运行的过程。

通过pip install datajob 安装它。您需要安装 aws cdk。

您可以在 github 存储库中找到快速入门和示例:https://github.com/vincentclaes/datajob

如果遇到问题,请在 github 上提出问题。

【讨论】:

以上是关于AWS Glue 作业生命周期 - 笔记本到作业的主要内容,如果未能解决你的问题,请参考以下文章

如何在 AWS 中使用 Glue 作业覆盖 s3 数据

从 AWS Redshift 到 S3 的 AWS Glue ETL 作业失败

将 AWS Glue 作业迁移到 EC2

AWS Glue ETL 作业的 Scala 和 Java 版本是啥?

AWS Glue CDK - 创建作业类型 Spark (Glue 2.0)

SMTP:邮件未通过 AWS Glue Python 作业发送