一、 作业调度
1.1 测试准备
首先,在clickhouse数据库中进行测试。现有表,如下所示:
我们将使用表中stu_id
字段中值为4、5、6、8这四条记录进行验证。
其次,在DataX Web中进行构建四个任务,接下来以“依赖任务5”为例,进行说明,构建过程见下图:
在sql语句框中,键入如下语句:
SELECT * FROM TEST WHERE stu_id = '5';
意为select出stu_id
为5的记录,作为源数据库中的记录。
接着,再次选择同一数据源,即源数据库和目的数据库为同一数据库。此时,对字段全选。
最后,构建josn
文件,点击“选择模板”后,即可完成一个任务的构建。
依此法,便可得到四个任务,分别为任务依赖4、任务依赖5、任务依赖6、任务依赖8。见下图:
1.2 进行测试
1.2.1 测试一
在测试一中,将以任务4为父任务,任务5为其子任务,后再以任务5为父任务,任务6为其子任务。示意图如下:
首先,在任务4的任务配置页面选择任务5为其子任务:
接着,在任务5的任务配置页面选择任务6为其子任务:
然后,执行任务4,观察“日志管理界面”:
由上图,可以发现,任务4执行结束的时间是任务5的开始调度的时间,任务5执行结束的时间是任务6的开始调度的时间。至此,测试一的作业调度可行。
1.2.2 测试二
在测试二中,将以任务4为父任务,任务5、任务6为其子任务。示意图如下:
首先,在任务4的任务配置页面选择任务5、任务6为其子任务:
然后,执行任务4,观察“日志管理界面”:
由上图,可以发现,任务4执行结束的时间是任务5、任务6的开始调度的时间。于是,我们可以知道,任务5、任务6的先后顺序不重要。因为任务5和任务6是并行的,任务4一结束就调动任务5、任务6的执行。
1.2.3 测试三
在测试二中,将以任务4为父任务,任务5、任务8为其子任务,后再以任务5为父任务,任务6为其子任务。示意图如下:
首先,在任务4的任务配置页面选择任务5、任务8为其子任务:
接着,在任务5的任务配置页面选择任务6为其子任务:
然后,执行任务4,观察“日志管理界面”:
由上图可以发现,任务4执行结束的时间是任务5、任务8的开始调度的时间。在任务5和任务8是并行的情况下,若任务5失败就不能再调动任务6的执行了(其中,任务5调度失败是刻意设置,为探究父任务失败后,子任务是否可以执行)。
1.2.4 小结
综上,我们可以知道在datax web中,我们可以使用任务依赖来完成任务的作业调度,即一任务的开始是以另一任务的结束为起始“信号”。但是,从中我们也可以发现,若某以任务有多个子任务,那么它们将并行执行,且父任务失败后,子任务将不会执行。此外,这样也存在一个问题:即任务可以分岔,但是不能汇合。简单来说,以测试三举例进行说明,假设任务4为父任务,任务5、任务8为其子任务,后再以任务8为父任务,任务6为其子任务。当任务4执行结束时,将执行任务5、任务8,但是任务6的开始时间取决于任务8结束的时间,而不是取决于任务5、任务8中最晚一个任务结束的时间。这个额外测试的日志概要信息截图如下:
由上图可以发现,任务4执行结束的时间是任务5、任务8的开始调度的时间。在任务5和任务8是并行的情况下,任务8执行结束的时间是任务6的开始调度的时间(其中,任务5调度失败是刻意设置,因为任务5、任务8的内容相近,所花费时间也相差不大。这样就难以说明任务6的开始执行时间是取决于任务8结束的时间,还是取决于任务5、任务8都结束的时间点)。