如何在Glue 中使用不同的参数多次运行同一个Glue Python作业。

0

【以下的问题经过翻译处理】 我有这样的需求:假设我有10个不同的Glue PySpark作业(job1、job2、.......job10),当job1执行并成功后,它就会启动下一个Glue Python shell脚本(假设脚本的名称是:glue_common_python_shell.py)。 每次Glue Python shell都会有不同的参数。

换句话说,当Glue PySpark作业1完成时,就会触发glue_common_python_shell.py(带参数-table_name1); 当Glue PySpark作业2完成时,就会触发glue_common_python_shell.py(带参数-table_name2)......直到Glue PySpark作业10完成时,就会触发glue_common_python_shell.py(带参数-table_name10)。

请问如何在AWS上实现这种编排?请帮忙。

谢谢!

profile picture
专家
已提问 6 个月前16 查看次数
1 回答
0

【以下的回答经过翻译处理】 有多种方法可以编排Glue作业。如下是一个在此场景下可行的架构示例:

使用StepFunctions执行一系列Glue作业。在下面的示例中,Lambda函数返回所有表名和其他Glue作业所需的输入,这些可以按照下面的说明传递给Glue作业。startJobRun.sync确保下一个步骤只在作业成功完成后开始执行。

{
  "Comment": "Run Glue job workflow",
  "StartAt": "Lambda Invoke",
  "States": {
    "Lambda Invoke": {
      "Type": "Task",
      "Resource": "arn:aws:states:::lambda:invoke",
      "OutputPath": "$.Payload",
      "Parameters": {
        "Payload.$": "$"
      },
      "Retry": [
        {
          "ErrorEquals": [
            "Lambda.ServiceException",
            "Lambda.AWSLambdaException",
            "Lambda.SdkClientException"
          ],
          "IntervalSeconds": 2,
          "MaxAttempts": 6,
          "BackoffRate": 2
        }
      ],
      "Next": "run_glue_job_1"
    },
    "run_glue_job_1": {
      "Type": "Task",
      "Resource": "arn:aws:states:::glue:startJobRun.sync",
      "Parameters": {
        "JobName": "glue_job_1"
      },
      "Next": "run_glue_job_2",
      "InputPath": "$.table_name_1"
    },
    "run_glue_job_2": {
      "Type": "Task",
      "Resource": "arn:aws:states:::glue:startJobRun.sync",
      "Parameters": {
        "JobName": "glue_job_2"
      },
      "Next": "run_glue_job_3",
      "InputPath": "$.table_name_2"
    },
    "run_glue_job_3": {
      "Type": "Task",
      "Resource": "arn:aws:states:::glue:startJobRun.sync",
      "Parameters": {
        "JobName": "glue_job_3"
      },
      "End": true,
      "InputPath": "$.table_name_3"
    }
  }
}

Glue workflow尚未具有使用不同参数多次运行相同作业的功能。因此,您可以创建多个工作流Workflow,每个工作流将使用不同参数调用相同作业,并基于先前工作流程的完成触发。

您也可以使用Lambda来使用输入参数触发作业,等待几分钟并检查作业是否完成,然后触发下一个作业。这种方法的问题是,Lambda在等待glue作业完成时会消耗计算资源。

另外还可以考虑使用Airflow(MWAA)进行编排。

profile picture
专家
已回答 6 个月前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则