创建和运行 Azure Databricks 作业

本文详细介绍如何使用作业 UI 创建和运行 Azure Databricks 作业。

若要了解作业的配置选项以及如何编辑现有作业,请参阅配置 Azure Databricks 作业的设置

若要了解如何管理和监视作业运行,请参阅查看和管理作业运行

若要使用 Azure Databricks 作业创建第一个工作流,请参阅快速入门

重要

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

使用 CLI、API 或笔记本创建和运行作业

创建作业

  1. 执行下列操作之一:

    • 单击边栏中的Jobs Icon“工作流”,然后点击Create Job Button
    • 在边栏中,单击 New Icon“新建”,然后选择“作业”。

    “任务”选项卡与“创建任务”对话框以及包含作业级别设置的“作业详细信息”侧面板一起显示。

    Create job screen

  2. 将“新作业…”替换为你的作业名称。

  3. 在“任务名称”字段中输入任务的名称。

  4. 在“类型”下拉菜单中,选择要运行的任务类型。 请参阅任务类型选项

  5. 配置运行任务的群集。 在“群集”下拉菜单中,选择“新建作业群集”或“现有通用群集”。

    • 新建作业群集:在“群集”下拉菜单中,点击“编辑”,并完成“群集配置”。
    • 现有通用群集:在“群集”下拉菜单中,选择现有群集。 若要在新页面中打开群集,请单击群集名称和说明右侧的 External Link 图标。

    若要详细了解如何选择和配置群集以运行任务,请参阅将 Azure Databricks 计算用于作业

  6. 若要添加依赖库,请单击“依赖库”旁边的“+ 添加”。 请参阅配置依赖库

  7. 可以传递任务的参数。 有关格式化和传递参数的要求的信息,请参阅将参数传递到 Azure Databricks 作业任务

  8. 若要有选择地接收任务开始通知、成功通知或失败通知,请单击“电子邮件”旁边的“+ 添加”。 在初始任务失败和任何后续重试时发送失败通知。 若要筛选通知并减少发送的电子邮件数量,请选中“忽略针对已跳过运行的通知”、“忽略针对已取消运行的通知”或“忽略最后一次重试之前的通知”。

  9. 若要有选择地为任务配置重试策略,请单击“重试”旁边的“+ 添加”。 请参阅配置任务的重试策略

  10. 若要选择配置任务的预期持续时间或超时,请单击“持续时间阈值”旁边的“+ 添加”。 请参阅配置任务的预期完成时间或超时

  11. 单击 “创建”

若要添加其他任务,请在 DAG 视图中单击 Add Task Button。 如果已为前一个任务配置了“新作业群集”,则会提供共享群集选项。 还可以在创建或编辑任务时为每个任务配置群集。 若要详细了解如何选择和配置群集以运行任务,请参阅将 Azure Databricks 计算用于作业

可根据需要配置作业级别的设置,例如通知、作业触发器和权限。 请参阅编辑作业。 还可以配置与作业任务共享的作业级参数。 请参阅为所有作业任务添加参数

任务类型选项

下面是可以添加到 Azure Databricks 作业的任务类型,以及各种任务类型的可用选项:

  • 笔记本:在“源”下拉菜单中,选择选择“工作区”以使用位于 Azure Databricks 工作区文件夹中的笔记本,或选择“Git 提供程序”以使用位于远程 Git 存储库中的笔记本

    工作区:使用文件资源管理器找到笔记本,单击笔记本名称,然后单击“确认”。

    Git 提供程序:单击“编辑”或“添加 git 引用”,然后输入 Git 存储库信息。 请参阅使用远程 Git 存储库中的笔记本

    注意

    笔记本单元格输出总计(所有笔记本单元格的合并输出)存在 20MB 的大小限制。 此外,单个单元格输出存在 8MB 的大小限制。 如果单元格输出大小总计超出 20MB,或者单个单元格的输出大于 8MB,则会取消该运行并将其标记为失败。

    如果不知道如何查找接近或超出限制的单元格,请针对通用群集运行该笔记本,并使用该笔记本自动保存方法

  • JAR:指定“Main 类” 。 使用包含 main 方法的类的完全限定名称,例如 org.apache.spark.examples.SparkPi。 然后单击“依赖库”下的“添加”以添加运行任务所需的库 。 其中一个库必须包含 main 类。

    若要详细了解 JAR 任务,请参阅在 Azure Databricks 作业中使用 JAR

  • Spark Submit:在“参数”文本框中,以 JSON 字符串数组格式指定 main 类、库 JAR 的路径以及所有参数 。 以下示例将某个 spark-submit 任务配置为运行 Apache Spark 示例中的 DFSReadWriteTest

    ["--class","org.apache.spark.examples.DFSReadWriteTest","dbfs:/FileStore/libraries/spark_examples_2_12_3_1_1.jar","/discover/databricks-datasets/README.md","/FileStore/examples/output/"]
    

    重要

    spark-submit 任务有几个限制:

    • 只能在新群集上运行 spark-submit 任务。
    • Spark-submit 不支持群集自动缩放。 若要详细了解自动缩放,请参阅群集自动缩放
    • Spark-submit 不支持 Databricks 实用程序 (dbutils) 引用。 若要使用 Databricks 实用程序,请改用 JAR 任务。
    • 如果使用的是启用了 Unity Catalog 的群集,则仅当群集使用分配的访问模式时才支持 spark-submit。 不支持共享访问模式。
    • Spark 流式处理作业的最大并发运行数不得设置为大于 1。 流式处理作业应设置为(每分钟)使用 cron 表达式 "* * * * * ?" 运行。 由于流式处理任务持续运行,因此它应始终是作业中的最终任务。
  • Python 脚本:在“”下拉菜单中,选择 Python 脚本的位置:为本地工作区中的脚本选择“工作区”,为位于 DBFS 上的脚本选择“DBFS”,或者为位于 Git 存储库中的脚本选择“Git 提供程序”。 在“路径”文本框中,输入 Python 脚本的路径:

    工作区:在“选择 Python 文件”对话框中浏览至 Python 脚本并单击“确认”。

    DBFS:输入 DBFS 或云存储上的 Python 脚本的 URI;例如 dbfs:/FileStore/myscript.py

    Git 提供程序:单击“编辑”并输入 Git 存储库信息。 请参阅使用远程 Git 存储库中的 Python 代码

  • 增量实时表管道:在“管道”下拉菜单中,选择现有的“增量实时表”管道。

    重要

    只能将触发的管道与“管道”任务结合使用。 不支持将连续管道作为作业任务。 若要详细了解触发管道和连续管道,请参阅连续管道与触发管道执行

  • Python 轮:在“包名称”文本框中,输入要导入的包,例如 myWheel-1.0-py2.py3-none-any.whl。 在“入口点”文本框中,输入启动 Python Wheel 时要调用的函数。 单击“依赖库”下的“添加”以添加运行任务所需的库。

  • SQL:在“SQL 任务”下拉菜单中,选择“查询”、“仪表板”、“警报”或“文件”。

    注意

    查询:在“SQL 查询”下拉菜单中,选择要在任务运行时运行的查询。

    仪表板:在“SQL 仪表板”下拉菜单中,选择要在任务运行时更新的仪表板。

    警报:在“SQL 警报”下拉菜单中,选择要触发以供评估的警报。

    文件:若要使用位于 Azure Databricks 工作区文件夹中的 SQL 文件,请在“源”下拉菜单中选择“工作区”,使用文件浏览器找到相应的 SQL 文件,单击其文件名,然后单击“确认”。 若要使用位于远程 Git 存储库中的 SQL 文件,请选择“Git 提供程序”,单击“编辑”或“添加 git 引用”,然后输入 Git 存储库的详细信息。 请参阅使用来自远程 Git 存储库的 SQL 查询

    在“SQL 仓库”下拉菜单中,选择要运行任务的无服务器或专业 SQL 仓库。

  • dbt:有关如何配置 dbt 任务的详细示例,请参阅在 Azure Databricks 作业中使用 dbt 转换

  • 运行作业:在“作业”下拉菜单中,选择要由该任务运行的作业。 若要搜索要运行的作业,请开始在“作业”菜单中键入作业名称。

    重要

    使用 Run Job 任务或嵌套三个以上 Run Job 任务的作业时,不应创建具有循环依赖项的作业。 循环依赖是直接或间接相互触发的 Run Job 任务。 例如,作业 A 触发作业 B,作业 B 触发作业 A。Databricks 不支持具有循环依赖项或嵌套超过三个 Run Job 任务的作业,并且可能不允许在将来的版本中运行这些作业。

  • If/else:要了解如何使用If/else condition任务,请参阅使用 If/else 条件任务向作业添加分支逻辑

将参数传递给 Azure Databricks 作业任务

可以将参数传递给许多作业任务类型。 每种任务类型在参数格式设置和传递参数方面具有不同的要求。

若要访问当前任务的相关信息(例如任务名称),或者在作业任务之间传递当前运行的相关上下文(例如作业的开始时间或当前作业运行的标识符),请使用动态值引用。 若要查看可用动态值引用的列表,请单击“浏览动态值”。

如果在任务所属的作业上配置了作业参数,添加任务参数时会显示这些参数。 如果作业和任务参数共享键,则作业参数优先。 如果尝试添加的任务参数具有与作业参数相同的键,UI 中会显示警告。 若要将作业参数传递给未使用键值参数配置的任务(例如 JARSpark Submit 任务),请将自变量格式设置为 {{job.parameters.[name]}},并将 [name] 替换为标识参数的 key

  • 笔记本:单击“添加”,然后指定要传递给任务的每个参数的键和值 。 手动运行任务时,可以参考使用不同的参数运行作业选项,替代参数或添加其他参数。 参数设置由参数的键指定的笔记本小组件的值。

  • JAR:使用 JSON 格式的字符串数组指定参数。 这些字符串作为参数传递给 main 类的 main 方法。 请参阅配置 JAR 作业参数

  • Spark Submit:以 JSON 格式的字符串数组形式指定参数。 依据 Apache Spark spark-submit 约定,将 JAR 路径后的参数传递给 main 类的 main 方法。

  • Python Wheel:在“参数”下拉菜单中,选择“位置参数”将参数输入为 JSON 格式的字符串数组,或者选择“关键字参数>”“添加”以输入每个参数的键和值。 位置参数和关键字参数都将作为命令行参数传递给 Python wheel 任务。 若要查看在 Python Wheel 中打包的 Python 脚本中读取参数的示例,请参阅在 Azure Databricks 作业中使用 Python Wheel

  • 运行作业:输入要传递给作业的每个作业参数的键和值。

  • Python 脚本:使用 JSON 格式的字符串数组指定参数。 这些字符串作为参数传递,并且可以作为位置参数读取或使用 Python 中的 argparse 模块进行解析。 若要查看在 Python 脚本中读取位置参数的示例,请参阅步骤 2:创建脚本以获取 GitHub 数据

  • SQL:如果任务运行参数化查询参数化仪表板,请在提供的文本框中输入参数的值。

复制任务路径

某些任务类型(例如笔记本任务)允许复制任务源代码的路径:

  1. 单击“任务”选项卡。
  2. 选择包含要复制的路径的任务。
  3. 单击任务路径旁的Jobs Copy Icon,将路径复制到剪贴板。

基于现有作业创建作业

可以通过克隆现有作业来快速创建新作业。 克隆某个作业会创建与该作业相同的副本,只有作业 ID 不同。 在作业页上,单击该作业名称旁边的“更多…”,并从下拉菜单中选择“克隆”。

基于现有任务创建任务

可以通过克隆现有任务来快速创建新任务:

  1. 在作业的页面上,单击“任务”选项卡。
  2. 选择要克隆的任务。
  3. 单击Jobs Vertical Ellipsis,然后选择“克隆任务”。

删除作业

若要删除作业,请在作业页上,单击该作业名称旁边的“更多…”,并从下拉菜单中选择“删除”

删除任务

若要删除任务,请执行以下操作:

  1. 单击“任务”选项卡。
  2. 选择要删除的任务。
  3. 单击Jobs Vertical Ellipsis,然后选择“删除任务”。

运行作业

  1. 单击边栏中的 Jobs Icon“工作流”。
  2. 选择一个作业,然后单击“运行”选项卡。可以立即运行作业,也可以计划稍后运行作业。

如果具有多个任务的作业中的一个或多个任务未成功,则可以重新运行由未成功的任务组成的子集。 请参阅重新运行失败的和跳过的任务

立即运行作业

若要立即运行作业,请单击“Run Now Button

提示

可以通过单击“立即运行”来使用笔记本任务执行作业的测试运行。 如果需要对笔记本进行更改,在编辑笔记本后再次单击“立即运行”将自动运行新版本的笔记本。

使用不同参数运行作业

可以使用“立即使用不同参数运行”选项,以便使用不同参数或现有参数的不同值重新运行作业。

注意

如果在引入作业参数之前运行的作业使用同一个键覆盖任务参数,那么你不能替代作业参数。

  1. 单击“立即运行”旁边的Blue Down Caret并选择“使用不同的参数立即运行”,或者在“活动运行”表中单击“使用不同的参数立即运行”。 根据任务的类型输入新参数。 请参阅将参数传递给 Azure Databricks 作业任务
  2. 单击 “运行”

以服务主体身份运行作业

注意

如果作业使用 SQL 任务运行 SQL 查询,则用于运行查询的标识由每个查询的共享设置确定,即使作业作为服务主体运行也是如此。 如果查询配置为 Run as owner,则始终使用所有者的标识而不是服务主体的标识运行查询。 如果查询配置为 Run as viewer,则使用服务主体的标识运行查询。 若要详细了解查询共享设置,请参阅查询权限和共享设置

默认情况下,作业将以作业所有者的身份运行。 这意味着作业将假定具有作业所有者的权限。 作业只能访问作业所有者有权访问的数据和 Azure Databricks 对象。 可以将作业的运行身份更改为服务主体。 然后,作业将假定具有该服务主体的权限,而不是所有者的权限。

若要更改“运行身份”设置,必须对作业具有“可管理”或“为所有者”权限。 可以将“运行身份”设置设为自己,也可以设置为自己具有“服务主体用户”角色的工作区中的任何服务主体。 有关详细信息,请参阅用于管理服务主体的角色作业访问控制

注意

当工作区上的 RestrictWorkspaceAdmins 设置设为 ALLOW ALL 时,工作区管理员还可将“运行身份”设置更改为工作区中的任何用户。 若要将工作区管理员限制为只能将“运行身份”设置更改为其自己或其具有“服务主体用户”角色的服务主体,请参阅限制工作区管理员

若要更改“运行身份”字段,请执行以下操作:

  1. 在边栏中,单击Jobs Icon工作流”。
  2. 在“名称”列中单击作业名称。
  3. 在“作业详细信息”侧面板中,单击“运行身份”字段旁边的铅笔图标。
  4. 搜索并选择服务主体。
  5. 单击“保存” 。

还可以使用工作区服务主体 API 列出你具有用户角色的服务主体。 有关详细信息,请参阅列出可以使用的服务主体

按计划运行作业

可以使用计划,以便在指定的时间和时段自动运行 Azure Databricks 作业。 请参阅添加作业计划

运行连续作业

可以确保作业始终有一个处于活动状态的运行。 请参阅运行持续的作业

在新文件到达时运行作业

若要在新文件到达 Unity Catalog 外部位置或卷时触发作业运行,请使用文件到达触发器

如果我的作业因并发限制而无法运行,该怎么办?

为了防止因并发限制而跳过作业的运行,可以对作业启用排队。 启用排队后,如果资源无法用于某个作业运行,该运行将最长排队 48 小时。 当容量可用时,作业运行将取消排队并运行。 排队的运行显示在作业的运行列表最近的作业运行列表中。

达到以下限制之一时,运行将排队:

  • 工作区中的最大并发活动运行数。
  • 工作区中的最大并发 Run Job 任务运行数。
  • 作业的最大并发运行数。

排队是队列仅针对该作业运行的一个作业级属性。

若要启用排队,请单击“作业详细信息”侧面板中的“队列”切换开关