Repairing and Resuming a Workflow Run - AWS Glue
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

如果我们为英文版本指南提供翻译,那么如果存在任何冲突,将以英文版本指南为准。在提供翻译时使用机器翻译。

Repairing and Resuming a Workflow Run

如果工作流中的一个或多个节点(作业或爬行器)未成功完成,则表示工作流仅部分运行。找到根本原因并进行校正后,您可以选择一个或多个节点来恢复工作流程运行,然后继续工作流程运行。然后将运行所选节点和这些节点下游的所有节点。

Resuming a Workflow Run: How It Works

考虑下图中的工作流程W1。


                矩形中显示触发器,圆中显示作业。左侧的触发T1运行作业J1的工作流程。后续触发器和工作存在,但作业J2和J3失败,因此下游触发器和作业显示为未运行。

工作流程运行如下所示:

  1. 触发T1启动作业J1。

  2. 成功完成J1火灾会触发T2和T3,分别运行作业J2和J3。

  3. 作业J2和J3失败。

  4. 触发T4和T5取决于成功完成J2和J3,因此它们不会发生火灾,而且工作J4和J5不运行。工作流W1只能部分运行。

现在假设导致J2和J3失败的问题得到纠正。选择J2和J3作为恢复从的工作流程的起点。


                作业J2和J3被标记为要恢复的节点。下游触发器和作业显示为成功运行。

工作流程运行恢复如下:

  1. 工作J2和J3运行成功。

  2. 触发T4和T5火灾。

  3. 工作J4和J5运行成功。

恢复的工作流程运行将作为一个单独的工作流程运行来跟踪,这是一个新的运行ID。查看工作流历史记录时,可以查看任何工作流程运行的上一次运行ID。在以下屏幕截图中的示例中,工作流程运行与运行ID wr_c7a22... (第二行)有一个未完成的节点。用户修复问题并恢复工作流程运行,导致运行ID wr_a07e55... (第一行)。


                工作流程的History(历史记录)选项卡下的表格包含两行,每个工作流程运行一个。第一行包含运行ID和之前运行ID。第二行只有运行ID。第一行中的前一行ID与第2行中的运行ID相同。
注意

在本次讨论的其余部分中,“恢复工作流程运行”一词是指恢复之前工作流程运行时创建的工作流程运行。“原始工作流程运行”是指仅部分运行且需要恢复的工作流程运行。

恢复工作流程运行图表

在恢复工作流程运行中,虽然只运行节点子集,但运行图表是一个完整的图表。也就是说,恢复工作流程中未运行的节点将从原始工作流程运行的运行图表复制。在原始工作流程运行中运行的复制作业和爬行器节点包括运行详细信息。

再次考虑上一图中的工作流程W1。在J2和J3启动工作流程运行时,恢复工作流程运行的运行图表显示所有作业,J1到J5以及所有触发器,T1到T5。J1的运行详细信息从原始工作流程运行中复制。

工作流程运行快照

启动工作流程运行时, AWS Glue 在该时间点拍摄工作流设计图的快照。该快照用于工作流程运行的持续时间。如果在运行启动后对任何触发器进行更改,那些更改将不会影响当前工作流程运行。快照确保工作流程运行以一致的方式进行。

快照只会导致触发器不可用。在工作流程运行期间对下游作业和爬行器进行的更改对当前运行生效。

Resuming a Workflow Run

按照以下步骤恢复工作流程运行。您可以使用 AWS Glue 控制台、API或 AWS Command Line Interface (AWS CLI)。

要恢复工作流运行(控制台)

  1. 通过以下网址打开 AWS Glue 控制台:https://console.amazonaws.cn/glue/

    以有权查看工作流程和恢复工作流程的用户登录。

    注意

    要恢复工作流程运行,您需要 glue:ResumeWorkflowRun AWS Identity and Access Management (IAM)权限。

  2. 在导航窗格中,选择 工作流.

  3. 选择工作流程,然后选择 历史记 选项卡。

  4. 选择仅部分运行的工作流运行,然后选择 查看运行详情.

  5. 在运行图表中,选择要重新启动的第一个节点,并且要恢复从的工作流程运行。

  6. 在图表右侧的详细信息窗格中,选择 简历 复选框。

    
                        运行图表显示三个节点,包括失败的作业节点。右侧的“JobDetails”窗格包含一个简历复选框。

    节点更改颜色,在右上角显示一个小简历图标。

    
                        运行图表的更改在文本中描述。“Resume”复选框已选中。
  7. 完成以前的两个步骤,以便重新启动任何其他节点。

  8. 选择 恢复运行.

恢复工作流程运行(AWS CLI)

  1. 确保您拥有 glue:ResumeWorkflowRun IAM 权限。

  2. 检索要重新启动的节点的节点ID。

    1. 运行 get-workflow-run 原始工作流程运行命令。提供工作流名称和运行ID,并添加 --include-graph 选项,如以下示例所示。从 历史记 控制台上的选项卡,或通过运行 get-workflow 命令。

      aws glue get-workflow-run --name cloudtrailtest1 --run-id wr_a07e55f2087afdd415a404403f644a4265278f68b13ba3da08c71924ebe3c3a8 --include-graph

      命令将图表的节点和边缘返回为大型JSON对象。

    2. 通过 TypeName 节点对象的属性。

      以下是输出的示例节点对象。

      {
          "Type": "JOB",
          "Name": "test1_post_failure_4592978",
          "UniqueId": "wnode_d1b2563c503078b153142ee76ce545fe5ceef66e053628a786ddd74a05da86fd",
          "JobDetails": {
              "JobRuns": [
                  {
                      "Id": "jr_690b9f7fc5cb399204bc542c6c956f39934496a5d665a42de891e5b01f59e613",
                      "Attempt": 0,
                      "TriggerName": "test1_aggregate_failure_649b2432",
                      "JobName": "test1_post_failure_4592978",
                      "StartedOn": 1595358275.375,
                      "LastModifiedOn": 1595358298.785,
                      "CompletedOn": 1595358298.785,
                      "JobRunState": "FAILED",
                      "PredecessorRuns": [],
                      "AllocatedCapacity": 0,
                      "ExecutionTime": 16,
                      "Timeout": 2880,
                      "MaxCapacity": 0.0625,
                      "LogGroupName": "/aws-glue/python-jobs"
                  }
              ]
          }
      }
    3. UniqueId 节点对象的属性。

  3. 运行 resume-workflow-run 命令。提供工作流名称、运行ID以及按空格分隔的节点ID列表,如以下示例所示。

    aws glue resume-workflow-run --name cloudtrailtest1 --run-id wr_a07e55f2087afdd415a404403f644a4265278f68b13ba3da08c71924ebe3c3a8 --node-ids wnode_ca1f63e918fb855e063aed2f42ec5762ccf71b80082ae2eb5daeb8052442f2f3 wnode_d1b2563c503078b153142ee76ce545fe5ceef66e053628a786ddd74a05da86fd

    命令输出恢复(新)工作流程运行的运行ID以及将启动的节点列表。

    {
        "RunId": "wr_2ada0d3209a262fc1156e4291134b3bd643491bcfb0ceead30bd3e4efac24de9",
        "NodeIds": [
            "wnode_ca1f63e918fb855e063aed2f42ec5762ccf71b80082ae2eb5daeb8052442f2f3"
        ]
    }
    

    请注意,尽管示例 resume-workflow-run 命令列出了两个要重新启动的节点,示例输出指示只重新启动一个节点。这是因为一个节点在其他节点的下游,而且下游节点将通过工作流程的正常流程重新启动。

Notes and Limitations for Resuming Workflow Runs

恢复工作流程时,请记住以下备注和限制。

  • You can resume a workflow run only if it's in the COMPLETED state.

    注意

    Even if one ore more nodes in a workflow run don't complete, the workflow run state is shown as COMPLETED. Be sure to check the run graph to discover any nodes that didn't successfully complete.

  • You can resume a workflow run from any job or crawler node that the original workflow run attempted to run. You can't resume a workflow run from a trigger node.

  • Restarting a node does not reset its state. Any data that was partially processed is not rolled back.

  • You can resume the same workflow run multiple times. If a resumed workflow run only partially runs, you can address the issue and resume the resumed run.

  • If you select two nodes to restart and they're dependent upon each other, the upstream node is run before the downstream node. In fact, selecting the downstream node is redundant, because it will be run according to the normal flow of the workflow.