创建、运行和管理Databricks作业

本文详细介绍了如何使用Jobs UI创建、编辑、运行和监视Databricks job。要了解如何使用Databricks CLI创建和运行作业,请参见乔布斯CLI.要了解如何使用Jobs API,请参见职位API 2.1

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

重要的

  • 只能在数据科学与工程工作空间或机器学习工作空间中创建作业。

  • 一个工作空间被限制为1000个并发任务运行。一个429许多请求当您请求不能立即开始的运行时,返回响应。

  • 一个工作空间在一小时内可以创建的作业数量限制为10000个(包括“运行提交”)。此限制还会影响REST API和笔记本工作流创建的作业。

创造一个工作

  1. 做以下其中一件事:

    • 点击工作图标工作流在侧栏中,单击创建作业按钮

    • 在侧栏中,单击新图标并选择工作

    任务选项卡将显示创建任务对话框。

    创建任务界面
  2. 取代为你的工作添加一个名字…你的工作名称。

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

  4. 类型下拉菜单,选择要运行的任务类型。看到任务类型选项

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

    • 新作业集群:点击编辑集群下拉菜单并完成集群配置

    • 现有通用集群:选择已存在的集群集群下拉菜单。若要在新页面中打开集群,请单击外部链接集群名称和描述右侧的图标。

    有关选BOB低频彩择和配置集群以运行任务的详细信息,请参见集群配置技巧

  6. 如需添加依赖库,单击+添加旁边依赖库.看到依赖库

  7. 您可以为任务传递参数。每种任务类型对格式化和传递参数都有不同的要求。

    • 笔记本:点击添加并指定要传递给任务的每个参数的键和值。属性手动运行任务时,可以覆盖或添加其他参数运行带有不同参数的作业选择。参数设置笔记本电脑部件由参数的键指定。使用任务参数变量作为参数值的一部分传递一组有限的动态值。

    • JAR:使用json格式的字符串数组来指定参数。这些字符串作为参数传递给主类的主方法。看到配置JAR作业参数

    • 火花提交task:参数被指定为json格式的字符串数组。符合Apache Spark Spark -submit按照惯例,JAR路径后的参数被传递给主类的主方法。

    • Python脚本:使用json格式的字符串数组来指定参数。这些字符串作为参数传递,可以使用argparse模块。

    • Python轮:在参数下拉菜单,选择位置参数以json格式的字符串数组形式输入参数,或选择关键字参数>添加输入每个参数的键和值。位置参数和关键字参数都作为命令行参数传递给Python轮任务。

  8. 要选择接收任务启动、成功或失败的通知,请单击+添加旁边电子邮件.在初始任务失败和任何后续重试时发送失败通知。

  9. 单击,可选配置任务的重试策略+添加旁边重试.看到重试

  10. 若要为任务配置超时时间,请单击+添加旁边超时时间(秒).看到超时

  11. 点击创建

创建第一个任务后,您可以配置作业级别设置,例如通知、作业触发器和权限。看到编辑作业

如需添加其他任务,单击添加任务按钮在DAG视图。属性,则提供共享集群选项新作业集群对于前一个任务。还可以在创建或编辑任务时为每个任务配置集群。有关选BOB低频彩择和配置集群以运行任务的详细信息,请参见集群配置技巧

任务类型选项

以下是可以添加到Databricks作业中的任务类型,以及不同任务类型的可用选项:

  • 笔记本:在下拉菜单,为笔记本选择一个位置;要么工作空间用于位于Databricks工作区文件夹中的笔记本或Git提供者用于位于远程Git存储库中的笔记本。

    工作空间:使用文件浏览器找到该笔记本,单击该笔记本名称,单击确认

    Git提供者:点击编辑并输入Git存储库信息。看到在Databricks作业中使用版本控制的笔记本

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

    要了解BOB低频彩更多关于JAR任务的信息,请参见JAR的工作

  • 火花提交:在参数文本框,指定主类、库JAR的路径和所有参数,格式化为JSON字符串数组。下面的示例配置spark-submit任务来运行DFSReadWriteTest来自Apache Spark的例子:

    ”——阶级”“org.apache.spark.examples.DFSReadWriteTest”“dbfs: / FileStore /图书馆/ spark_examples_2_12_3_1_1.jar”“/ dbfs / databricks-datasets / README.md”“/ FileStore / /输出例子/”

    重要的

    有几个限制spark-submit任务:

    • 只能在新的集群上运行spark-submit任务。

    • Spark-submit不支持集群自动伸缩。要了解BOB低频彩有关自动缩放的更多信息,请参见集群自动定量

    • Spark-submit不支持砖公用事业.要使用Databricks实用程序,请改用JAR任务。

  • Python脚本:在下拉菜单,也可以为Python脚本选择一个位置工作空间对于本地工作区中的脚本,或DBFS用于位于DBFS或云存储上的脚本。在路径文本框,输入Python脚本的路径:

    工作空间:在选择Python文件对话框,浏览到Python脚本,单击确认.你的脚本必须是砖回购

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

  • Delta Live Tables管道:在管道下拉菜单,选择一个现有的Delta活动表管道。

    重要的

    方法只能使用触发的管道管道的任务。不支持将连续管道作为作业任务。要了解BOB低频彩有关触发管道和连续管道的更多信息,请参见连续和触发管道执行

  • Python轮:在包名文本框中,输入要导入的包。mywheel - 1.0 - py2.py3 any.whl——没有.在入口点文本框中,输入启动车轮时要调用的函数。点击添加依赖库添加运行任务所需的库。

  • 印度生物技术部:看在Databricks作业中使用dbt转换有关如何配置DBT任务的详细示例。

运行作业

  1. 点击工作图标工作流在侧栏中。

  2. 选择作业并单击运行选项卡。您可以立即运行作业,也可以将作业安排在稍后运行。

如果具有多个任务的作业中的一个或多个任务不成功,则可以重新运行不成功任务的子集。看到重新运行失败和跳过的任务

立即运行作业

如需立即运行作业,请单击立即运行按钮

提示

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

运行带有不同参数的作业

你可以使用现在使用不同的参数运行使用不同的参数或现有参数的不同值重新运行作业。

  1. 点击蓝色向下插入旁边现在运行并选择现在使用不同的参数运行或者,在活跃的运行表,点击现在使用不同的参数运行.根据任务类型输入新参数。

    • 笔记本:可以以键值对或JSON对象的形式输入参数。提供的参数与触发运行的默认参数合并。的值可以使用此对话框设置小部件

    • JAR而且spark-submit:可以输入参数列表,也可以输入JSON文档。如果删除键,则使用默认参数。您还可以添加任务参数变量为了跑步。

  2. 点击运行

查看任务运行历史记录

查询任务的运行历史记录,包括成功运行和失败运行。

  1. 上单击任务作业运行详细信息页面。的任务运行细节页面出现。

  2. 在运行历史下拉菜单中选择任务运行。

安排一份工作

为作业定义时间表:

  1. 点击添加触发器工作细节面板并选择计划触发类型

  2. 指定时间段、开始时间和时区。可选择显示Cron语法复选框中显示和编辑日程安排Quartz Cron语法

    请注意

    • Databricks强制作业调度触发的后续运行之间的最小间隔为10秒,而不管cron表达式中的秒配置如何。

    • 您可以选择遵守夏令时或UTC的时区。如果您选择了一个遵守夏令时的地区,计时工作将被跳过,或者可能会在一两个小时内出现不开火的情况夏令时开始或结束的时间.要按每小时(绝对时间)运行,请选择UTC。

    • 作业调度器不适用于低延迟作业。由于网络或云问题,作业运行有时可能会延迟几分钟。在这些情况下,计划作业将在服务可用时立即运行。

  3. 点击保存

工具中也可以直接安排笔记本作业笔记本用户界面

暂停并恢复作业计划

要暂停作业,您可以:

  • 点击暂停工作细节面板。

单击,恢复暂停的作业计划重新开始

运行连续作业

属性可以确保作业始终处于活动运行状态连续触发类型。当您使用连续触发器运行作业时,Databricks Jobs确保始终有一个活动作业运行。作业的新运行将在前一次运行成功完成或处于失败状态之后启动,或者如果当前没有作业的实例正在运行。

请注意

  • 为了避免不必要的资源占用和降低成本,如果在24小时内连续出现5次以上的故障,Databricks会自动暂停一个连续的作业。

  • 连续作业只能有一个正在运行的实例。

  • 在一次运行结束和一次新的运行开始之间有一个小的延迟。这个延迟应该小于60秒。

  • 你不能使用重试策略任务依赖关系有一个连续的工作。

  • 选择现在运行对于暂停的连续作业,将触发一个新的作业运行。如果作业未暂停,则抛出异常。

  • 若要使连续作业获得新的作业配置,请取消现有的运行。新的运行将自动开始。您也可以点击重新启动运行使用更新后的配置重新启动作业运行。

单击,可连续运行任务添加触发器工作细节面板中,选择连续触发类型,并单击保存

单击,停止连续作业蓝色向下插入旁边现在运行并点击停止

视图的工作

点击工作图标工作流在侧栏中。出现Jobs列表。Jobs页面列出了所有已定义的作业、集群定义、计划(如果有的话)以及最后一次运行的结果。

请注意

如果你有增加工作岗位限制启用此工作空间后,在jobs列表中只显示25个作业,以提高页面加载时间。使用左右箭头浏览完整的工作列表。

您可以在“工作列表”中过滤工作:

  • 使用关键字。如果您为这个工作空间启用了增加的作业限制特性,则只支持对名称、作业ID和作业标记字段进行关键字搜索。

  • 只选择你拥有的工作。

  • 选择您有权限访问的所有作业。访问此过滤器需要这样做作业访问控制启用。

  • 使用标签.若要搜索仅使用密钥创建的标记,请在搜索框中键入密钥。要搜索用键和值创建的标记,可以根据键、值或键和值同时搜索。例如,对于带有键的标记部门还有价值金融,你可以搜索部门金融寻找匹配的工作。要通过键和值进行搜索,输入键和值,用冒号分隔;例如,部门:财务

还可以单击任何列标题,按该列对作业列表进行排序(降序或升序)。启用了增加的作业限制特性后,只能按顺序排序名字工作ID,或创建通过.默认的排序方式是按名字按升序排列。

视图为作业运行

您可以查看您有权访问的所有作业的当前运行和最近完成的运行列表,包括由外部编排工具(如Apache workflow或Azure Data Factory)启动的运行。查看最近作业运行的列表。

  1. 点击工作图标工作流在侧栏中。

  2. 名字列中,单击作业名称。的运行选项卡显示活动运行和已完成运行的矩阵和列表视图。

矩阵视图显示作业的运行历史记录,包括每个作业任务。

运行总时长矩阵的行显示运行的总持续时间和运行的状态。控件中的工具条上方悬停,可以查看运行的详细信息,包括开始时间、持续时间和状态运行总时长行。

中的每个单元格任务行表示任务和任务对应的状态。若要查看每个任务的详细信息,包括开始时间、持续时间、集群和状态,请将鼠标悬停在该任务的单元格上。

作业运行和任务运行栏用颜色编码,以指示运行状态。成功运行为绿色,不成功运行为红色,跳过运行为粉红色。各个作业运行和任务运行栏的高度提供了运行持续时间的可视化指示。

运行列表视图显示:

  • 运行的开始时间。

  • 运行标识符。

  • 运行是由作业计划或API请求触发,还是手动启动。

  • 当前正在运行的作业所消耗的时间,或已完成运行的总运行时间。

  • Spark日志的链接。

  • 运行的状态等待运行跳过成功失败的终止终止内部错误定时取消了取消,或等待重试

若要更改运行列表视图中显示的列,请单击并选择或取消选择列。

查看作业运行的详细信息,单击该链接以在开始时间运行列表视图中的列。要查看此作业最近一次成功运行的详细信息,请单击转到最新的成功运行

Databricks最多可维护60天的作业运行历史记录。如果需要保存作业运行,Databricks建议在结果过期之前导出结果。有关更多信息,请参见导出作业运行结果

查看作业运行详情

作业运行详细信息页面包含作业输出和到日志的链接,其中包括关于作业运行中每个任务的成功或失败的信息。方法访问作业运行详细信息运行为工作付费。控件中查看作业运行的详细信息运行选项卡中,单击运行的链接开始时间运行列表视图中的列。回到运行选项卡,单击工作ID价值。

如果任务包含多个任务,单击任务,可查看任务运行详情,包括:

  • 运行任务的集群

    • 任务的Spark UI

    • 任务日志

    • 任务的度量

单击工作ID值返回运行为工作付费。

查看最近的作业运行情况

您可以查看您有权访问的工作空间中所有作业的当前运行和最近完成的运行列表,包括由外部编排工具(如Apache workflow或Azure Data Factory)启动的运行。查看最近作业运行的列表。

  1. 点击工作图标工作流在侧栏中。出现Jobs列表。

  2. 单击工作运行选项卡显示作业运行列表。

工作运行列表显示:

  • 运行的开始时间。

    • 与运行关联的作业的名称。

    • 作业作为用户名运行。

    • 运行是由作业计划或API请求触发,还是手动启动。

    • 当前正在运行的作业所消耗的时间,或已完成运行的总运行时间。

    • 运行的状态等待运行跳过成功失败的终止终止内部错误定时取消了取消,或等待重试

    • 运行的任何参数。

查看作业运行详细信息,单击开始时间列为运行。控件中的作业名称,查看作业详细信息工作列。

导出作业运行结果

您可以导出所有作业类型的笔记本运行结果和作业运行日志。

导出笔记本运行结果

可以通过导出作业运行结果来持久化作业运行。对于笔记本作业运行,可以这样做出口一个渲染的笔记本,以后可以进口到你的Databricks工作区。

导出带有单个任务的作业的notebook运行结果。

  1. 在作业详细信息页面上,单击查看详细信息中运行的链接运行的列已完成运行(过去60天)表格

  2. 点击导出到HTML

导出包含多个任务的作业的notebook运行结果。

  1. 在作业详细信息页面上,单击查看详细信息中运行的链接运行的列已完成运行(过去60天)表格

  2. 单击要导出的笔记本任务。

  3. 点击导出到HTML

导出作业运行日志

您还可以导出作业运行的日志。您可以设置作业,通过作业API自动将日志传递到DBFS。看到new_cluster.cluster_log_conf对象的请求体中的创建一份新工作操作(帖子/ /创建工作)。

编辑作业

一些配置选项可用于作业,其他选项可用于个人任务.例如,只能在作业上设置最大并发运行,而必须为每个任务定义参数。

更改作业的配置。

  1. 点击工作图标工作流在侧栏中。

  2. 名字列中,单击作业名称。

侧面面板显示工作细节.您可以更改作业的触发器、集群配置、通知最大并发运行数,以及添加或更改标记。如果作业访问控制启用后,还可以编辑作业权限。

标签

要向作业添加标签或键:值属性,可以添加标签当你编辑工作的时候。中的作业可以使用标记筛选工作列表;例如,你可以使用a部门标签,过滤属于特定部门的所有作业。

请注意

因为作业标记不是为存储个人身份信息或密码等敏感信息而设计的,Databricks建议仅对非敏感值使用标记。

标记还会传播到作业运行时创建的作业集群,允许您将标记与现有的作业集群一起使用集群监控

单击,添加或编辑标签+标签工作细节侧板。您可以将标记作为键和值或标签添加。如果需要添加标签,请在关键字段,并将价值字段是空的。

集群

要查看与集群关联的任务,请将鼠标悬停在侧面板中的集群上。单击,可更改所有关联任务的集群配置配置在集群下面。若要为所有关联任务配置新的集群,请单击交换在集群下面。

控制对作业的访问

作业访问控制使作业所有者和管理员能够对其作业授予细粒度权限。作业所有者可以选择哪些其他用户或组可以查看作业的结果。所有者还可以选择谁可以管理作业运行(立即运行和取消运行权限)。

看到作业访问控制获取详细信息。

最大并发运行数

此作业的最大并行运行次数。如果作业在尝试开始新的运行时已经达到活动运行的最大次数,Databricks将跳过运行。将此值设置为高于默认值1,以同时执行同一作业的多次运行。例如,如果您频繁地触发作业,并且希望允许连续的运行彼此重叠,或者希望触发因输入参数不同而不同的多次运行,那么这就很有用。

编辑任务

设置任务配置项。

  1. 点击工作图标工作流在侧栏中。

  2. 名字列中,单击作业名称。

  3. 单击任务选项卡。

任务依赖关系

方法定义作业中任务的执行顺序取决于下拉菜单。您可以将此字段设置为作业中的一个或多个任务。

编辑任务依赖项

请注意

取决于如果作业仅由单个任务组成,则不可见。

配置任务依赖关系将创建任务执行的有向无环图(DAG),这是在作业调度器中表示执行顺序的常用方法。例如,考虑以下由四个任务组成的作业:

任务依赖关系示例图
  • 任务1是根任务,不依赖于任何其他任务。

  • 任务2和任务3依赖于任务1先完成。

  • 最后,Task 4取决于Task 2和Task 3是否成功完成。

Databricks在运行下游任务之前运行上游任务,尽可能多地并行运行它们。下图说明了这些任务的处理顺序:

任务依赖项示例流

单个任务配置选项

单个任务有以下配置选项:

集群

若要配置任务运行的集群,请单击集群下拉菜单。共享作业集群可以编辑,但如果该共享作业集群仍被其他任务使用,则不能删除。

有关选BOB低频彩择和配置集群以运行任务的详细信息,请参见集群配置技巧

依赖库

在任务运行之前,将在集群上安装依赖库。必须设置所有任务依赖项,以确保在运行开始之前安装它们。遵循以下建议库的依赖关系用于指定依赖项。

任务参数变量

可以将模板化变量作为任务参数的一部分传递到作业任务中。当作业任务运行时,这些变量将被适当的值替换。您可以使用任务参数值来传递作业运行的上下文,例如运行ID或作业的开始时间。

当作业运行时,被双花括号括起来的任务参数变量将被替换并追加到作为值的一部分包含的可选字符串值。例如,传递一个名为MyJobId值为my-job-6对于任何作业ID为6的运行,添加以下任务参数:

“MyJobID”“我的工作- {{job_id}}”

双花括号的内容不会作为表达式计算,因此不能在双花括号内执行操作或函数。花括号内的空格没有被去掉,所以{{job_id}}不会被评估。

支持如下任务参数变量:

变量

描述

示例值

{{job_id}}

分配给作业的唯一标识符

1276862

{{run_id}}

分配给任务运行的唯一标识符

3447843

{{start_date}}

任务运行开始的日期。格式为UTC时区下的yyyy-MM-dd。

2021-02-15

{{start_time}}

创建并准备好集群后运行开始执行的时间戳。格式为从UTC时区的UNIX纪元开始的毫秒数,由返回System.currentTimeMillis ()

1551622063030

{{task_retry_count}}

第一次尝试失败后试图运行任务的重试次数。第一次尝试时该值为0,每次重试时该值递增。

0

{{parent_run_id}}

分配给具有多个任务的作业运行的唯一标识符。

3447835

{{task_key}}

分配给具有多个任务的作业的一部分的任务的唯一名称。

“clean_raw_data”

您可以在任何任务中设置这些变量创造一个工作编辑作业,或运行带有不同参数的作业

还可以在作业中的任务之间传递参数任务值.看到在Databricks作业中的任务之间共享信息

超时

一项工作或任务的最长完成时间。如果作业或任务在此时间内未完成,则Databricks将其状态设置为“超时”。

重试

一种策略,用于确定重试失败运行的时间和次数。单击,设置该任务的重试次数高级选项并选择编辑重试策略.重试间隔是以失败运行开始和后续重试运行之间的毫秒为单位计算的。

请注意

如果两者都配置超时而且重试,该超时时间适用于每次重试。

克隆一份工作

通过克隆现有作业,可以快速创建新作业。克隆作业将创建与作业相同的副本(除了作业ID不同)。在作业页面上,单击更多…旁边的作业名称并选择克隆从下拉菜单。

克隆任务

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

  1. 在作业页面上,单击任务选项卡。

  2. 选择要克隆的任务。

  3. 点击职位垂直省略并选择克隆的任务

删除作业

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

删除任务

删除任务。

  1. 单击任务选项卡。

  2. 选择需要删除的任务。

  3. 点击职位垂直省略并选择删除任务

复制任务路径

将路径复制到一个任务,例如,一个笔记本路径:

  1. 单击任务选项卡。

  2. 选择包含复制路径的任务。

  3. 点击工作复制图标旁边的任务路径,将该路径复制到剪贴板。

最佳实践

集群配置技巧

在操作作业时,集群配置非常重要。下面提供了关于选择和配置作业集群的一般指导,然后是针对特定作业类型的建议。

使用共享作业集群

若要优化编排多个任务的作业的资源使用,请使用共享作业集群。共享作业集群允许同一作业运行中的多个任务重用该集群。您可以使用单个作业集群运行作为作业一部分的所有任务,也可以使用针对特定工作负载优化的多个作业集群。使用实例使用共享作业集群。

  1. 选择新工作组别创建任务并完成集群配置

  2. 向作业添加任务时选择新集群,或创建新作业集群。选择时配置的任何集群新工作组别可用于作业中的任何任务。

共享作业集群的范围仅限于单个作业运行,不能被其他作业或同一作业的运行使用。

不能在共享作业集群配置中声明库。必须在任务设置中添加依赖库。

为您的作业选择正确的集群类型

  • 新工作组别是作业或任务运行的专用集群。共享作业集群在第一个使用该集群的任务启动时创建并启动,在最后一个使用该集群的任务完成后终止。集群空闲时不会终止,只有在所有使用它的任务完成后才会终止。如果共享作业集群失败或在所有任务完成之前终止,则创建一个新集群。在任务启动时创建并启动作用域为单个任务的集群,在任务完成时终止集群。在生产环境中,Databricks建议使用新的共享或任务范围的集群,以便每个作业或任务在完全隔离的环境中运行。

  • 在新集群上运行任务时,该任务被视为数据工程(任务)工作负载,取决于任务工作负载定价。在现有的通用集群上运行任务时,该任务被视为数据分析(通用)工作负载,受通用工作负载定价的约束。

  • 如果选择已终止的现有集群,而作业所有者已终止可以重新启动许可, Databricks在作业计划运行时启动集群。

  • 现有的通用集群最适合执行更新等任务指示板每隔一定的时间。

使用池可以减少集群启动时间

为了缩短新作业集群的开始时间,可以创建并配置作业的集群以使用该池。

笔记本工作小贴士

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

流媒体的任务

Spark Streaming作业的最大并发运行不应该设置为大于1。流作业应该设置为使用cron表达式运行“*?"(每分钟)。

由于流任务是连续运行的,因此它应该始终是作业中的最后一个任务。

JAR的工作

要了解BOB低频彩有关将代码打包到JAR中并创建使用JAR的作业的详细信息,请参见在Databricks作业中使用JAR

运行JAR作业时,请记住以下几点:

输出大小限制

作业输出(例如发送到stdout的日志输出)的大小限制为20MB。如果总输出的大小更大,则取消运行并标记为失败。

为了避免遇到这个限制,您可以通过设置spark.databricks.driver.disableScalaOutputSpark配置到真正的.缺省情况下,标志值为.该标志控制Scala JAR作业和Scala笔记本的单元输出。如果使能该标志,Spark将不向客户端返回作业执行结果。该标志不会影响写入集群日志文件中的数据。建议仅对JAR作业的作业集群设置此标志,因为它将禁用笔记本结果。

使用共享的SparkContext

因为Databricks是托管服务,所以可能需要修改一些代码以确保Apache Spark作业正确运行。JAR作业程序必须使用共享的SparkContextAPI来获取SparkContext.因为Databricks初始化SparkContext,调用SparkContext ()将会失败。为了得到SparkContext,只使用共享SparkContext由Databricks创建:

瓦尔goodSparkContextSparkContextgetOrCreate()瓦尔goodSparkSessionSparkSession构建器()。getOrCreate()

在使用shared时,还有几种方法应该避免SparkContext

  • 不要打电话SparkContext.stop ()

  • 不要打电话system . exit (0)sc.stop ()在你的结尾主要程序。这可能会导致未定义的行为。

使用终于尝试用于清理作业的块

考虑一个由两部分组成的JAR:

  • jobBody ()其中包含了工作的主要部分。

  • jobCleanup ()哪些必须在之后执行jobBody ()该函数是否成功或返回异常。

举个例子,jobBody ()可以创建表,你可以使用吗jobCleanup ()放下这些桌子。

确保clean up方法被调用的安全方法是放一个终于尝试代码中的块:

试一试jobBody()最后jobCleanup()

不应该试着清理使用sys.addShutdownHook (jobCleanup)或以下代码:

瓦尔cleanupThread线程覆盖def运行jobCleanup()运行时getRuntimeaddShutdownHookcleanupThread

由于Databricks中Spark容器生命周期的管理方式,shutdown钩子不能可靠地运行。

配置JAR作业参数

使用JSON字符串数组将参数传递给JAR作业。看到spark_jar_task对象的请求体中的创建一份新工作操作(帖子/ /创建工作)。要访问这些参数,请检查字符串数组传递给主要函数。

库的依赖关系

Spark驱动程序有一些不能被覆盖的库依赖项。这些库的优先级高于与它们冲突的任何库。

要获得驱动程序库依赖项的完整列表,请在连接到相同Spark版本的集群(或具有您想要检查的驱动程序的集群)的笔记本中运行以下命令。

%sh ls /databricks/jars .

管理库依赖项

在为作业创建jar时处理库依赖关系时,一个很好的经验法则是将Spark和Hadoop列为提供依赖关系。在Maven上,添加Spark和Hadoop作为提供的依赖项,示例如下:

< >的依赖< groupId >org.apache.spark< / groupId >< artifactId >spark-core_2.11< / artifactId ><版本>tripwire> < /版本< >范围提供< / >范围< / >的依赖< >的依赖< groupId >org.apache.hadoop< / groupId >< artifactId >hadoop核心< / artifactId ><版本>1.2.1 "> < /版本< >范围提供< / >范围< / >的依赖

sbt,将Spark和Hadoop作为提供的依赖项添加,示例如下:

libraryDependencies+ =“org.apache.spark”%%“spark-core”“tripwire”“提供”libraryDependencies+ =“org.apache.hadoop”%%“hadoop核心”“1.2.1”“提供”

提示

根据所运行的版本为依赖项指定正确的Scala版本。