【问题标题】:Stop running Azure Data Factory Pipeline when it is still running在 Azure 数据工厂管道仍在运行时停止运行
【发布时间】:2020-05-02 19:11:56
【问题描述】:

我有一个Azure Data Factory Pipeline。我的触发器已设置为每 5 分钟一次。 有时我的管道需要超过 5 分钟才能完成它的工作。在这种情况下,触发器再次运行并创建我的管道的另一个实例,并且同一管道的两个实例在我的 ETL 中出现问题。 我怎么能确定我的管道的一个实例一次运行?

如您所见,我的管道有几个实例正在运行

【问题讨论】:

    标签: triggers azure-pipelines azure-data-factory


    【解决方案1】:

    我能想到的选项很少:

    选择 1

    为您的管道活动指定 5 分钟超时:

    https://docs.microsoft.com/en-us/azure/data-factory/concepts-pipelines-activities https://docs.microsoft.com/en-us/azure/data-factory/concepts-pipelines-activities#activity-policy

    选择 2

    1) 创建一个 1 行 1 列的 sql RunStatus 表:1 将是我们的“已完成”,0 - “正在运行”状态

    2) 在管道的末尾添加一个存储过程活动,该活动会将位设置为 1。

    3) 在管道的开头添加一个查找活动来读取该位。

    4) 此查找的输出随后将用于 if 条件活动:

    • 如果为 1 - 启动管道的工作,但在此之前添加另一个存储过程活动以将我们的状态位设置为 0。
    • 如果为 0 - 取决于项目的详细信息:什么都不做、添加等待活动、发送电子邮件等。

    为了充分利用这个选项,你可以把表格变成一个日志,每次成功运行后都会在其中添加新的开始和结束时间行(在开始新的运行之前,你可以检查前一个是否运行有结束时间)。拥有此日志可能会帮助您收集有关运行管道需要多少时间的数据,并且可能会添加更多资源或增加运行之间的间隔。

    选择 3

    监控使用 SDK 运行的管道(尚未尝试过,所以这可能只是为了指导您): https://docs.microsoft.com/en-us/azure/data-factory/monitor-programmatically

    希望你至少可以使用其中一个

    【讨论】:

      【解决方案2】:

      听起来您正试图或多或少地不断地运行一个进程,这非常适合tumbling window triggers。您可以创建一个依赖项,使触发器依赖于自身 - 因此在上一次运行完成之前它不会运行。

      creating a trigger that runs a pipeline on a tumbling window 开始,然后是create a tumbling window trigger dependency。该文章底部的部分讨论了"tumbling window self-dependency properties",它向您展示了成功设置后代码的外观。

      【讨论】:

      • 这个建议解决了我的特殊情况。非常感谢。
      【解决方案3】:

      我的第一个想法是在这种情况下复发太频繁了。如果您共享的图表都是针对同一管道的,那么其中大多数需要接近 5 分钟,但您也有一些需要 30、40 甚至 60 分钟。像这样的情况是简单的重复触发可能不够用。运行 60 分钟时应该发生什么?将有 10-12 次运行无法启动:所以它们仍然需要运行还是可以忽略?

      为确保所有管道都运行并管理并发,您将需要构建某种队列管理器。 ADF 本身无法处理这个问题,所以我在内部构建了这样一个系统并广泛依赖它。我结合使用逻辑应用、存储过程 (Azure SQL) 和 Azure Functions 来对管道执行进行排队、执行和监控。以下是您可能需要的高级细分:

      1. 逻辑应用 1:每 5 分钟运行一次,并将 ADF 作业排入 SQL 数据库中。

      2. 逻辑应用程序 2:每 2-3 分钟运行一次并检查队列是否 a) 当前没有正在运行的作业 (status = 'InProgress') 和 2) 队列中有作业等待运行 (我使用存储过程执行此操作)。如果满足此状态:执行下一个 ADF 并将其状态更新为“InProgress”。

        • 我使用 Azure 函数而不是内置的逻辑应用活动来提交作业,因为我可以更好地控制可变参数。此外,他们可以返回我在 #3 中依赖的新创建的 ADF RunId。
      3. Logic App 3:每分钟运行一次并更新任何“InProgress”作业的状态。

        • 我使用 Azure 函数根据 RunId 检查 ADF 管道的状态。

      【讨论】:

        【解决方案4】:

        【讨论】:

          猜你喜欢
          • 2019-02-12
          • 2023-01-17
          • 2022-08-02
          • 1970-01-01
          • 1970-01-01
          • 2017-05-17
          • 1970-01-01
          • 2021-12-04
          • 1970-01-01
          相关资源
          最近更新 更多