Databricks 上的编排概述

Azure Databricks 为 协调 数据处理工作负载提供内置体验,以便可以在更大的工作流中协调和运行多个任务。 可以简化、优化和计划频繁的可重复任务的执行,从而轻松管理复杂的工作流。

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

什么是工作?

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

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

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

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

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

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

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

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

常见用例

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

| 数据工程 | ETL(提取、转换、加载)管道:自动从各种源提取数据,将数据转换为合适的格式,然后将其加载到数据仓库或数据湖中。 请参阅在 Azure Databricks 上运行第一个 ETL 工作负载

数据迁移:将数据从一个系统移到另一个系统。

连续数据处理:使用作业执行连续数据处理任务,例如从 Kafka 等源流式处理数据并将其写入 Delta 表。 | |数据科学和机器学习 | 模型训练:计划和运行机器学习模型训练作业,以确保对最新数据训练模型。

批量推理:自动化执行批量推理作业的过程,以从训练好的模型中生成预测。

超参数优化:协调超参数优化作业以优化机器学习模型。 | |分析和报告 | 计划查询:按计划在 作业中运行 SQL 查询,以生成报表或更新仪表板。

数据聚合:执行常规数据聚合任务以准备数据进行分析。 | |自动化任务 | 多任务工作流:创建涉及多个任务的复杂工作流,例如运行一系列笔记本、JAR 文件、SQL 查询或 Delta Live Tables 管道。

条件逻辑:使用条件逻辑 根据上一任务的成功或失败控制任务的流。 | |与其他工具集成 | Airflow 和 Azure 数据工厂(ADF):使用外部业务流程工具(如 Apache AirflowAzure 数据工厂)触发 Azure Databricks 作业,从而实现更复杂的集成工作流。

通知和监视:使用 Azure Databricks UI、CLI 或 API 设置通知和 监视作业运行结果,或使用与 Slack 和 Webhook 等工具的集成来监视作业运行 结果。 | |基础结构即代码(IaC) | Databricks 资产捆绑包:以代码的形式管理作业和其他资源,以促进版本控制、代码评审和 CI/CD(持续集成/持续部署)做法。 |

编排概念

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

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

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

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

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

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

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

监视和可观测性

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

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

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

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

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

限制

存在以下限制:

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

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

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 活动来转换数据