【问题标题】:using AWS Glue Job triggers to start jobs with different parameters使用 AWS Glue 作业触发器启动具有不同参数的作业
【发布时间】:2018-03-12 17:32:27
【问题描述】:

我正在使用 AWS Glue ETL 脚本和触发器对 s3 中的数据运行大量作业。我总共编写了四个作业,它们将根据我们要运行作业的数据采用特定参数。我们希望能够为每个作业共享脚本,并为我们要运行的特定作业传递不同的参数(即,作业 A 将有两组不同的参数用于不同的作业——data1 和 data2。我们设置一个触发器以在具有 data1 的作业 A 成功后使用 data1 启动作业 B,并在具有 data2 的作业 A 成功后设置一个单独的触发器以使用 data2 启动作业 B。

但是,查看作业触发器,我们可以创建触发器,在前一个作业成功时启动作业(即,当传入参数 data1 的作业-A 成功时,使用参数 data1 触发作业-B;当作业-A 带有参数时data2传入成功,触发job-B带参数data2),但是因为我们是共享代码,不管传入的参数(data1 v.data2),如果带参数为data1的jobA成功,因为job-B配置为作业 A 成功后运行,作业 B 的两个实例将被启动——一个带有参数 data1,一个带有参数 data2。

理想情况下,我们希望触发器仅使用匹配的参数集启动作业,以便我们可以共享胶水 ETL 作业脚本并仅将参数传递给触发器。

有没有一种方法可以在不创建不同版本的脚本的情况下实现这样的事情?

【问题讨论】:

  • 嗨,CharStar。你有没有找到解决这个问题的方法?任何帮助将非常感激。谢谢

标签: amazon-web-services amazon-s3 aws-sdk etl aws-glue


【解决方案1】:

我遇到了类似的问题,恐怕目前唯一的解决方案是在其他作业结束时手动触发作业(例如使用 boto3)

import boto3 

[...]

client = boto3.client('glue', 'us-east-1')
if data1:
    client.start_job_run(
            JobName='job-A',
            Arguments={
                '--data': data1)
elif data2:
    client.start_job_run(
            JobName='job-B',
            Arguments={
                '--data': data2)

【讨论】:

  • 你会在哪里执行这个 boto3?在 Lamba 上或在 Glue 中用作包装脚本作业?
猜你喜欢
  • 2019-02-18
  • 1970-01-01
  • 2021-07-29
  • 1970-01-01
  • 2022-08-02
  • 2021-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多