背景介绍
作业、脚本版本管理是DGC数据开发新上线的特性,背景是根据大量客户在实际使用中的反馈,我们了解到客户需要一种手段来管理作业版本,保证版本可回溯,历史作业版本可管理、可查看。作业需要区分开发态和生产态,在作业开发界面编辑作业、测试运行作业均属于开发态,而正式调度的作业可以理解为生产态,作业不能随意保存之后就正式发布进行调度,开发态和生产态应该完全隔离。所以我们将作业保存和作业提交拆分成两个动作,保存只用于保存开发态正在调试中的作业,确认调试完成的作业,再点击提交,正式发布到生产环境进行调度。
版本管理功能介绍
版本管理功能涉及脚本开发和作业开发,下面的章节将会分别介绍脚本版本管理和作业版本管理的相关特性。
脚本版本管理
-
开发态脚本调试与版本提交
没有提交过版本的脚本均处于开发态,用于调测。在脚本开发界面点击运行,运行的是开发态的脚本内容,即脚本编辑框里面的内容。新建的脚本必须先保存之后才可以提交版本。点击保存,仅仅是保存开发态的脚本内容,若要使脚本正式被作业调度起来,必须提交版本。如果脚本已经提交过版本,修改了脚本内容之后,必须重新提交新版本,修改才会生效。
作业调度默认关联脚本最新提交的版本内容,举例说明:
我们有两个版本的脚本,v1版本的脚本内容为 SELECT * FROM demo_infos; v2版本的脚本内容为SELECT * FROM partition_test_1;
下面我们在作业开发中拖出一个DLI SQL节点,关联我们上面的脚本点击执行调度。
前往实例监控,点击查看日志,可以从日志中看到,作业调度中执行的是V2版本,即最新提交版本的脚本内容。
此时如果我们修改了脚本内容,将语句修改为SELECT * FROM qiujiaxin;但并没有提交版本,那么作业调度将依然是使用V2版本的脚本内容进行调度。
此时我们将修改后的内容提交为 V3版本,那么下一个调度周期将自动使用最新的版本,即V3版本进行调度。
-
脚本版本回滚
点击右侧版本页签,可以将脚本回滚到任意一个已提交的旧版本上,请注意,回滚仅仅是将老版本回滚到开发态,回滚之后需要重新提交才会生效。比如回滚到v1版本,需要重新提交,生成一个v4版本,因为调度默认使用最新的版本,如果不重新提交,那么最新的版本依然是v3。v4版本和v1版本内容其实是完全一样的,重新提交版本只是为了让回滚的内容生效。
脚本的回滚范围包括以下内容:
DLI SQL:数据连接、数据库、资源队列、DLI环境变量、脚本内容;
DWS SQL:数据连接、数据库、脚本内容;
HIVE SQL:数据连接、数据库、资源队列、脚本内容;
SPARK SQL:数据连接、数据库、脚本内容;
SHELL:主机连接、参数、交互式参数、脚本内容;
RDS SQL:数据连接、数据库、脚本内容;
PRESTO SQL:数据连接、模式、脚本内容;
PYTHON:主机连接、参数、交互式参数、脚本内容;
FLINK:脚本内容;
-
脚本版本对比
点击展开右侧版本列表,勾选任意两个版本的脚本,可以对比查看两个版本的脚本内容差异。
若勾选两个不同的版本,则对比所选的两个版本的脚本内容。若只勾选一个版本,则对比所选版本和开发态脚本的内容差异。
左上角的“上一个不同”和“下一个不同”按钮,可以直接跳到上一个或者下一个不相同的地方,便于用户查看脚本内容差别。
-
脚本导入导出
脚本导出的是开发态的已保存内容。
脚本导入会覆盖开发态的脚本内容,并自动提交一个新版本。
作业版本管理
-
开发态作业调试和版本提交
作业画布界面展示的是开发态的作业内容,点击保存也是保存开发态的内容,保存不会影响正式的作业调度,只有提交版本之后,调度才会使用最新提交的作业内容进行调度。
点击测试运行,执行的是开发态的作业内容,用于调测;如果是SQL类型的节点,且节点关联了脚本,测试运行将会执行开发态的脚本内容。
Tips:这里其实只要形成开发态和生产态的概念,就不会混乱。即开发态的作业对应开发态的脚本,生产态的作业对应生产态的脚本。测试运行是执行开发态的作业,所以关联的脚本内容也是开发态的,目的是让用户进行调测。正式调度的作业是生产态的,所以关联的脚本也是生产态的,即最新提交的版本内容。所以如果修改了脚本内容,想让对应的作业调度感知到最新修改的内容,请记得提交脚本版本哟!
点击提交版本,会用当前画布中的作业内容去提交,生成一个版本。提交版本之后再点击执行调度,就会使用最新的版本进行周期调度。
-
作业版本回滚
与脚本类似,作业同样也支持回滚到任意历史版本,点击回滚之后,会将历史版本的内容回滚到开发态界面,同样需要重新提交之后才会被调度。
作业回滚包括以下内容:
1、画布界面的内容,包括所有节点属性,节点之间的连线关系等。
2、作业基本信息面板中的属性,除了作业标签,作业标签没有版本的概念。
3、作业调度配置中的所有信息。
4、作业参数配置。
5、节点血缘关系配置。
-
作业版本查看
点击查看某个作业版本,将会打开新窗口展示该版本的作业配置详情。查看作业窗口仅用于展示某个版本的内容,便于用户对比两个不同版本的作业内容差异。查看窗口不能修改任何作业属性。
-
作业版本对比
与脚本版本对比类似,如果勾选两个版本,则会比较两个不同版本的作业属性JSON体。若只勾选一个版本,则会比较选中的版本和开发态的作业属性JSON体之间的差异。
此处对比的是作业定义的JSON体,对普通用户来说要看懂JSON体信息可能有一些难度。下面给出一些基本JSON字段的介绍,方便用户看懂JSON体的内容。
以下面这个JSON体为例:
- name:表示作业名称
- objects:是一个数组,包含画布中的所有节点属性信息和连线关系
- params:是一个数组,包含作业参数信息(变量、常量)
- pipelineId: 表示作业ID
- schedule:是一个对象,包含作业调度配置信息
- taskProperties:是一个对象,包含作业基本信息面板中的配置
-
作业导入导出
作业导出的是开发态的最新的已保存内容。如果作业包含SQL类型的节点,那么导出的脚本内容也是开发态已保存的脚本。
导入会覆盖开发态的内容,并自动提交一个新版本。
-
作业依赖关系图
作业依赖关系图有以下4个入口:
1、从作业目录上查看依赖关系图,此时展示的是开发态之间的作业依赖关系。
2、从作业监控页面查看作业依赖关系图,此时展示的是生产态之间的作业依赖关系。
3、在作业监控页面点击补数据,选择需要补数据的上下游作业,展示的是生产态之间的作业依赖关系。
4、实例监控界面,选择重跑,选择重跑上下游作业实例 ,此时展示的是生产态的作业依赖关系图。
-
作业监控详情页面
作业监控界面展示最新已提交的作业版本内容。若作业没有提交过任何版本,则该界面空白,不会有任何内容。
-
批量作业配置
批量修改作业配置,会修改开发态的作业配置,并以修改后的配置自动提交一个新版本。
-
实例监控列表
实例列表中可以看到每个实例跑的是哪一个版本内容。
常见问题
Q1:版本号是如何生成的,是递增的还是循环的,总共可以提交多少个版本?
A1:版本号是后台自动生成的,从数字1开始递增,每提交一个版本,版本号自增1。目前最多允许提交10个版本,超过10个版本,旧的版本会自动被老化,不再展示在页面上。
Q2:我修改了脚本内容,并且已经提交过脚本版本了,对应的作业还需要重新提交版本吗?
A2:不需要,作业的下一个调度周期会自动引用最新的已提交脚本。
Q3:我批量导入的作业还需要手动一个个提交版本吗?
A3:不需要,导入的作业会统一自动提交一个版本。
Q4:重跑、补数据等操作使用的是什么版本的作业?
A4:重跑、补数据、继续运行等操作,均使用最新的已提交作业版本去执行。比如一个实例第一次运行的时候使用的是V2版本,之后又提交了一个新版本V3,此时重跑这个实例,那么会使用V3版本的作业内容去重跑这个实例。