使用 Databricks 作业进行编排

Azure Databricks 具有用于协调数据处理工作负载的内置功能,以便可以在更大的工作流中协调和运行多个任务。 可以优化和计划频繁、可重复的任务的执行,以及管理复杂的工作流。

本文介绍与使用 Databricks 作业管理生产工作负荷相关的概念和选择。

什么是工作?

在 Databricks 中,作业用于通过工作流计划和编排 Databricks 上的任务。 常见的数据处理工作流包括 ETL 工作流、运行笔记本和机器学习(ML)工作流,以及与 dbt 和 Azure 数据工厂(ADF)等外部系统集成。

作业包含一个或多个任务,并支持自定义控制流逻辑,例如分支(if/else 语句)或循环(for each 语句),使用视觉创作 UI。 任务可以在 ETL 工作流中加载或转换数据,或者在机器学习管道中以受控且可重复的方式生成、训练和部署 ML 模型。

示例:每日数据处理和验证作业

以下示例显示了 Azure Databricks 中的作业。

一个示例,其中显示了 Azure Databricks 接口中的作业,其中包含 4 个任务和每天运行的触发器。

此示例作业具有以下特征:

  1. 第一个任务引入收入数据。
  2. 第二个任务是 if/else 语句检查空值。
  3. 如果没有,则会运行转换任务。
  4. 否则,它会运行具有数据质量验证的笔记本任务。
  5. 计划每天上午 11:29 运行。

若要快速了解如何创建自己的作业,请参阅 使用 Azure Databricks 作业创建第一个工作流

常见用例

从基础数据工程原则到高级机器学习和无缝工具集成,这些常见用例展示了推动新式分析、工作流自动化和基础结构可伸缩性的功能广度。

业务流程概念

在 Azure Databricks 中使用业务流程时,有三个主要概念:作业、任务和触发器。

作业 - 作业是用于协调、计划和运行操作的主要资源。 作业的复杂性可能有所不同,从运行 Azure Databricks 笔记本的单个任务到具有条件逻辑和依赖项的数百个任务。 作业中的任务通过有向无环图 (DAG) 直观表示。 可以指定作业的属性,包括:

  • 触发器 - 此触发器定义何时运行作业。
  • 参数 - 自动推送到作业中的任务的运行时参数。
  • 通知 - 当作业失败或花费太长的时间时,要发送的电子邮件或 Webhook。
  • Git - 作业任务的源代码管理设置。

任务 - 任务是作业内的特定工作单元。 每个任务都可以执行各种操作,包括:

  • 笔记本任务运行 Databricks 笔记本。 您指定笔记本的路径及其所需的任何参数。
  • 管道任务运行管道。 可以指定现有的 DLT 管道,例如物化视图或流式表。
  • Python 脚本任务运行 Python 文件。 提供文件的路径和任何必要的参数。

有许多类型的任务。 有关完整列表,请参阅 的任务类型。 任务可以依赖于其他任务,并有条件地运行其他任务,使你能够创建具有条件逻辑和依赖项的复杂工作流。

触发器 - 触发器是一种基于特定条件或事件启动运行作业的机制。 触发器可以是基于时间的,例如在计划的时间(例如,上午 2 点运行作业),也可以基于事件,例如,在新数据到达云存储时运行作业。

监视和可观测性

作业为监视和可观测性提供内置支持。 以下主题概述了此支持。 有关监视作业和编排的更多详细信息,请参阅 Databricks 作业的监视和可观测性

UI 中的作业监视和可观测性 - 在 Azure Databricks UI 中,可以查看作业,包括作业所有者和上次运行的结果等详细信息,以及按作业属性进行筛选。 可以查看作业运行的历史记录,并获取有关作业中每个任务的详细信息。

作业运行状态和指标 - Databricks 报告作业运行成功,以及作业运行中每个任务的日志和指标,以诊断问题并了解性能。

通知和警报 - 可以通过电子邮件、Slack、自定义 Webhook 和其他选项设置作业事件的通知。

通过系统表进行自定义查询 - Azure Databricks 提供系统表,用于记录帐户中的作业运行和任务。 可以使用这些表来查询和分析作业性能和成本。 可以创建仪表板来可视化作业指标和趋势,以帮助监视工作流的运行状况和性能。

限制

存在以下限制:

  • 工作区仅限 2000 个并发任务运行。 在请求不能立即启动的运行时,将返回 429 Too Many Requests 响应。
  • 工作区在一小时内可以创建的作业数限制为 10000(包括“运行提交”)。 此限制还会影响 REST API 和笔记本工作流创建的作业。
  • 一个工作区最多可包含 12000 个已保存的作业。
  • 一个作业最多可以包含 1000 个任务。

是否可以以编程方式管理工作流?

Databricks 拥有相关的工具和 API,让你能够以编程方式计划和编排工作流,这包括下列项:

有关使用工具和 API 创建和管理作业的示例,请参阅 自动化作业创建和管理。 有关所有可用开发人员工具的文档,请参阅 本地开发工具

外部工具使用 Databricks 工具和 API 以编程方式计划工作流。 可以使用 Azure 数据工厂或 Apache AirFlow 等工具计划作业。

使用 Apache AirFlow 协调工作流

可以使用 Apache Airflow 来管理和计划你的数据工作流。 使用 Airflow 可以在 Python 文件中定义工作流,Airflow 将管理工作流的计划和运行。 请参阅使用 Apache Airflow 协调 Azure Databricks 作业

使用 Azure 数据工厂协调工作流

Azure 数据工厂 (ADF) 是一项云数据集成服务,可用于将数据存储、移动和处理服务组合到自动化数据管道中。 可以使用 ADF 将 Azure Databricks 作业协调为 ADF 管道的一部分。

ADF 还内置支持运行 ADF 管道中以 JAR 打包的 Databricks 笔记本、Python 脚本或代码。

若要了解如何在 ADF 管道中运行 Databricks 笔记本,请参阅在 Azure 数据工厂中使用 Databricks 笔记本活动运行 Databricks 笔记本,然后参阅通过运行 Databricks 笔记本来转换数据

若要了解如何在 ADF 管道中运行 Python 脚本,请参阅通过在 Azure Databricks 中运行 Python 活动来转换数据

若要了解如何在 ADF 管道中运行打包在 JAR 中的代码,请参阅通过在 Azure Databricks 中运行 JAR 活动来转换数据