Flow 使用手册#

本章介绍如何用 Flow 开发调度作业、任务。

前提#

Flow 集群已经部署,详见 Flow 安装

控制面板#

点击 Flow 产品左侧”控制面板”菜单,进入控制面板页面。

控制面板展示所选作业空间的详情,由四部分组成:历史总览、定时日历、作业执行结果、各类任务占比。

  • 历史总览:所有作业和任务的执行统计信息。

  • 定时日历:在日历上展示定时任务的执行情况,如果某一天有调度任务将被触发,那么在日历上那一天下面有一个黑点,在日历上点击这一天,下方区域展示这一天有哪些任务将被触发以及何时触发。

  • 作业执行结果:展示所有的作业执行历史,通过字段配置可以自定义该表格展示的字段,这个配置是用户级别的,即允许每个用户有不同的配置。

  • 各类任务占比:展示不同类型任务的总数以及占比。

dashboard

作业空间#

点击 Flow 产品左侧”作业空间”菜单,进入作业空间页面。 在此页面,您可以开发调度作业与调度任务。

进入作业空间子菜单,进入作业调度主要操作区主面板。该页面主要包括左边的立体资源树,以及右侧的操作台。点击左侧树上不同的资源,可以打开右侧相对应的操作台。

workshpace

作业空间管理#

鼠标放到(或者点击)作业空间下拉菜单右侧的 collapsed-menu,打开隐藏功能菜单,选择相应的菜单,可以做相应的操作。 包括:刷新、设置、新建空间、新建作业、新建文件夹、新建文件、导入作业、导出作业、权限、删除空间等功能。

本章介绍一下与作业空间相关的刷新、设置、新建空间、权限、删除空间等功能,剩余功能参见后面具体章节,所有的创建操作,都将在本作业空间的根目录创建相应资源。

menue

  1. 刷新

有些情况下(比如多人同时操作本作业空间),作业空间的资源列表并没有及时更新,您可以点击”刷新”来刷新列表。作业空间下目录任意层级的非叶子节点, 都可以”刷新”,效果相同。

  1. 设置

点击功能菜单的”设置”打开作业空间的设置页面,作业空间设置分为配置参数和基础信息两类。 在配置参数栏目下,您可以根据需求配置不同功能参数。此处的配置将于此空间下所有作业及任务生效。

image

配置说明如下:


  • 数据源:所有 SQL 任务默认连接执行 SQL 脚本的 Oushu Database 数据源。

  • SQL 任务错误立即退出:所有 SQL 任务默认处理错误行为,默认打开,即 SQL 脚本运行错误语句 后立马停止并报错。关闭后无论中间错误都执行完所有 SQL 内容,不会报错。

  • 输入配置: 输入配置是为了支持在不同脚本类任务( SQL、Python、Shell )对输入变量的需求。不同输入 配置在不同任务中都可以通过配置的参数名拿取。

    • 对于 Shell 脚本任务,输入变量都在环境变量中,以 $param 可以拿到。

    • 对于 Python 脚本任务,输入也在环境变量里,一般通过如下代码拿取。

            import os
            os.getenv('key_name')
    
    • 对于 SQL 任务,遵循psql行为使用即可。以 :param 拿取,若需要在变量前后添加引号,以:'param' 读取。

    不同输入配置类型功能详情:

    • 常量:输入的参数值即为各任务根据参数名拿去的变量。

    • 时间宏:输入时间宏会被翻译成时间字符串赋值给变量。

    • SQL返回值:输入的sql语句会在选定的数据源执行,返回值的第一行第一列赋值给改参数。

  • 失败重试:根据错误流中的关键字匹配,决定以输入的重试时间为时间间隔,周期的执行重试次数所配置次数。当重试中不再出现关键字,重试将停止。


在基础信息栏目下,您可以设置作业空间的名字、备注、优先级、本作业空间下的全局并发作业数、全局任务并发数。 优先级数字越低,优先级越高。 setting

  1. 新建作业空间

在功能菜单选择”新建空间”,打开”新建作业空间”窗口。输入作业空间的名称、备注、优先级、作业并发数、任务并发数等,点击”确定”即可。注意这里的并发数配置保存都是即时生效直接影响运行中作业的。

new

  1. 权限

管理作业空间的权限。

new

  1. 删除空间

删除作业空间后,会删除作业空间内所有内容,请谨慎操作。

文件夹管理#

在作业空间的任意一个文件夹,鼠标放到(或者点击)右侧的 collapsed-menu 即可打开相应的功能菜单。此功能菜单包括:刷新、新建作业、新建文件夹、新建文件、移动文件夹、导入作业、导出所有任务、权限、删除文件夹等功能。

此处只介绍与文件夹本身相关的功能。

new

  1. 新建文件夹

通过作业空间或者文件夹的功能菜单触发创建文件夹的操作,只需要输入文件夹的名字,点击”创建”即可。

  1. 删除文件夹

会同时删除文件夹下的所有资源,谨慎操作。

  1. 移动文件夹

有两种操作方式,一种是点击文件夹右侧的三个点,在弹出的菜单中点击移动文件夹,在弹窗中输入新文件夹名并选择目标文件夹,点击保存。

moveFolder

另一种操作方式是用鼠标拖动要移动的文件夹到目标文件夹上,松开鼠标,即可移动到对应的文件夹下。

moveFolderDrag

作业管理#

本章节介绍作业的管理,包括新建、导入、导出、编辑、移动、复制、删除、执行、历史查看等等。

新建作业#

在功能菜单选择”新建作业”,打开”新建作业”窗口。如果在作业空间功能菜单触发的新建作业,那么作业将被创建在作业空间的根目录,如果是在文件夹的功能菜单触发的新建作业, 该作业将被创建在该文件夹中。

newjob

有两种新建作业的方式:自定义作业、导入Excel,默认是自定义作业。 导入Excel见下一节,本章节介绍如何创建自定义作业。 选择”自定义作业”,输入作业名称,点击”创建”即可创建作业。

创建完作业之后,会默认以新tab的方式打开作业的编辑窗口,至于如何编辑一个作业,详见”编辑作业”章节。

导入作业#

支持 Excel 文件批量导入作业,入口参见新建作业以及资源树上各级导入操作。

job-upload-button-jobgroup.png

选择导入作业后上传本地 Excel 文件。

job-uplaod-execel-choose.png

Excel 文件下一共有六个表单,分别表示作业、作业配置、任务组、任务、任务依赖、任务配置。各表单有不同列根据需求填写,详细列信息如下。


  • 作业

    1. 调度类型:scheduled、ad-hoc,分别表示调度任务、非调度任务

    2. 开始时间:调度任务开始时间,不是调度任务留空即可

    3. 结束时间:调度任务结束时间,不是调度任务留空即可

    4. 调度间隔:调度任务间隔,不是调度任务留空即可

    5. 间隔单位:Hours、Minutes、Seconds,调度任务的时间间隔单位,不是调度任务留空即可

    6. 状态:published、unpublished 是否已发布,只有发布的才可以执行

    7. 并行度:任务的并行度

    8. 优先级:任务的优先级

    9. cron表达式:调度的cron表达式,不是调度任务留空即可 是否隐藏:全部写TRUE即可

  • 作业配置

    1. 作业名称:配置项所属的作业,按照作业在sheet中出现的顺序(sheet中的行号),依次写入作业的配置

    2. 类型:-1、1,分别表示处理和输入

  • 任务组

    1. 作业名称:配置项所属的作业,按照作业在sheet中出现的顺序(sheet中的行号),依次写入作业下的任务组

    2. 类型:默认写basic即可

  • 任务

    1. 作业名称:任务所属的作业,按照作业在sheet中出现的顺序(sheet中的行号),依次写入作业下的任务

    2. 任务类型:command、python、etl、sql、job、merge、trigger分别表示shell任务、python任务、数据同步任务、sql任务、作业引用任务、合并任务以及触发任务。

    3. 命令:如果是文件类型的任务,需要写入文件在hdfs上的路径

    4. 工作空间:本地缓存hdfs文件地址,可不填写,即为默认配置。

    5. HDFS工作空间:任务在hdfs上的工作空间,不填写即为默认配置。

    6. 是否在hdfs:默认写true即可

    7. token:留空即可

    8. 请求方式:留空即可

    9. 位置:作业在画布上的位置,例如298.0,45.0,180.0,40.0,分别表示

    10. 任务组:任务所属的任务组

  • 任务依赖

    1. 作业名称:任务所属的作业

    2. 任务名称:依赖所属的任务,按照任务在sheet中出现的顺序(sheet中的行号),依次写入任务的依赖

    3. 依赖任务:此任务所依赖的任务,写上游任务的名字

    4. 依赖类型:weak、strong分表表示弱依赖,强依赖

  • 任务配置

    1. 作业名称:任务所属的作业

    2. 任务名称:配置所属的任务,按照任务在sheet中出现的顺序(sheet中的行号),依次写入任务的配置

    3. 配置类型:0 out, 1 input, -1 error handling; time Preconditions: 10; Strategy when Check fail: 20;

    4. 来源:

    5. 是否需要:


导出作业#

支持导出单个作业或批量作业到excel文件中。在作业空间操作、文件夹以及作业的延伸操作中选择导出即可。 导出作业空间全部作业:

job-export-button1.png 导出文件夹下全部作业:

job-export-button2.png

编辑作业#

进入编辑作业的页面有两种方式:新建作业、在左侧作业空间资源树上双击一个作业。 作业的编辑有两种方式,”画布”与”任务表格”,默认是以表格的形式展现。

画布模式#

在任务列表模式下,点击右上角switch切换到画布模式。

  1. 画布布局: 画布左侧彩色的图标为各种类型的任务,包括SQL、Shell、Python、引用作业、合并、触发、引用数据同步以及引用Littleboy等任务类型。 鼠标点击图标拖拽到画布上,即可创建一个相应类型的任务。 画布左上角有一排功能按键从左到右依次是:执行、移动模式(手状图标)、框选模式、格式化、复制、删除(任务)、打组(任务)、搜索。 画布右上方从左到右依次是:设置、执行历史、权限(功能暂缺)、定时、切换为任务模式。 画布右侧为配置区域,当焦点在画布上的时候,右侧展示作业级别的信息。当焦点在任务上的时候,该区域展示任务的信息。

editjob

  1. 添加、删除任务 :画布模式下,鼠标点击左侧任务图标拖拽到画布上,即可创建一个相应类型的任务。 鼠标放到画布某个任务上,或者点击某个任务,任务右侧会出现一个垃圾桶图标,点击垃圾桶图标即可删除任务,删除任务时会把相关的依赖关系也一起删掉。

  2. 依赖关系: 在画布模式下,任务与任务之间的依赖关系用连线的方式展现。 任务1的下方连接任务2的上方,那么任务2上游依赖任务1。 依赖关系有两种:强依赖、弱依赖。 在强依赖的情况下,上游所有依赖的任务执行成功之后, 下游任务才能够被触发执行;在弱依赖的情况下,上游任务所有执行完成之后,下游 任务即可执行,无论上游任务执行成功与否。

  3. 任务类型介绍: 目前支持的任务类型包含如下几种。

  • SQL任务: 主要用来执行SQL脚本,可以直接在任务中定义SQL脚本。当前只支持OushuDB的SQL脚本,其他数据库类型比如Mysql等,暂不支持。

  • Shell任务: 用来执行Shell脚本任务,任务中需要编写Shell脚本内容。

  • Python任务: 用来执行Python代码。

  • 引用作业: 引用已经存在的作业,作为一个任务在本作业中调度执行。

  • 合并任务: 页面上的”或”逻辑,合并任务会在任意依赖上游成功执行后出发下游。如果依赖都是强依赖,默认的任务的触发条件是所有所依赖的上游任务都执行成功。 但是有的场景只需要上游所依赖的任务之一执行成功, 即可执行本任务,在类似这种场景下,需要合并任务来实现多个上游任务执行结果的判定。

  • 触发任务: 无视任务其他上游的触发器,只要触发任务正常执行,立即触发所连所有下游任务,无论下游任务其他依赖执行情况。在某些特定条件下,才能触发执行的任务,比如在特定的时间才能触发。

  • 引用数据同步: 用来调度Wasp任务。

  • 引用LittleBoy: 用来调度LittleBoy任务。

  1. 任务配置: 画布中(或者任务列表中)点击某一个任务的时候,在右侧会展示任务的基本信息与配置参数。基本信息与配置参数是两个tab,默认展示基本信息。

config

  • 基础信息: 包含基本信息、上游任务、下游任务与任务相关的配置信息。 所有任务都有基本信息、上游任务、下游任务的配置。 任务相关的配置,根据任务的不同会有不同的配置,比如Shell脚本任务、Python任务、SQL任务等,都需要配置执行文件;引用作业任务需要指定引用的作业。 基本信息包含任务名称、创建人、任务类型、创建时间、所属任务组、备注等信息。 上游任务与下游任务展现上游的任务与下游的任务的依赖,可以在此添加、删除依赖,修改依赖的强、弱属性。

    config

    对于SQL、Python、Shell脚本任务,可以在此修改执行文件内容,可以直接在文本框中编辑,也可以点击文本框右上角的 new-file-eidt-tab打开 新的tab来编辑文件内容,以得到更好的体验。文件的编辑相关详见后面”文件管理”章节。

  • 配置参数: 点击”配置参数”tab可以打开配置参数的输入窗口,在此可以对任务的参数进行配置。当前主要包含输入配置、失败重试、输出配置三部分配置。 输入配置:定义任务所需要的输入参数,如执行SQL脚本所需要的IP、Port等参数。输入配置详情可以参考作业空间配置。

    config

  • 任务不满足条件:可以设置本任务执行的前置条件。设置不满足条件处理,可以选择”跳过并执行下游”,意味着如果不满足条件,直接跳过本次任务不执行;也可以选择”失败并忽略下游”意味着如果不满足条件, 标记本次执行为”条件不符”并且不执行下游任务。同时需要设置检查条件,包含时间条件与上游输入条件两种。”时间条件”同时间单位的限制间取或,不同时间单位间取且。”上游输入条件”要求上游任务已有输出配置,可对其值做基本判断。

    config

  • 失败重试:可以根据错误的关键字定义失败重试的次数。比如”TimeOut”这种错误重试3次。

    output

  • 输出配置: 输出有三种类型,执行结果与执行时间及自定义。选择输出类型,输入输出参数即可。这些参数将作为所有下游的一部分输入配置。 输出类型说明如下:

        自定义:目前只支持 Shell、Python 脚本任务。程序会根据配置的参数名去执行session的环境变量中拿取。
        执行时间:该节点执行时间。
        执行结果:该节点执行结果,以 true 和 false 标志任务是否执行成功。
    
  • 输入配置: 每个输入配置包含”参数名”和”参数值”,不同脚本类任务( SQL、Python、Shell )都可以通过配置的参数名从环境变量中拿去拿取。另外如果本 任务的上游任务有输出配置,本任务同名的输入参数的参数值将被覆盖,这也是获取上游输入作为本任务参数的方法。

配置完所有的任务相关配置,点击”保存”即可生效。

任务列表模式#

如果不习惯画布模式,也可以切换为任务列表模式来编辑作业。此模式适合单作业中量比较大,画布渲染速度慢的场景。 在此页面,除了没有可视化的画布式拖拽式的操作之外,可以做画布上能够做的所有的事情, 包括创建、删除任务,配置任务的依赖关系,配置任务的各项参数等等。操作方式略有不同:

  • 展示方式:所有的任务以列表的形式展现,任务的名称、类型、上/下游任务等。

  • 新建任务:点击表格上方的任务图标,即可在表格中新建一个任务,新建任务在表格第一行,并且是编辑状态,可以直接在右侧修改其配置。

  • 选中任务(聚焦):点击列表中某一任务的名称,即可选中该任务。对应画布上左肩点击某任务。

  • 编辑任务:选中任务之后,右侧与画布一样,会展现该任务的所有配置参数,包括上下游的依赖。依赖的编辑这一点与画布不同,画布可以拖拽连线来创建、修改依赖,此处只能手动指定依赖。

  • 批量选中:点击任务列表左侧的复选框。对应画布中框选多个任务的功能。

除此之外,任务的配置、删除,作业的启动、配置、历史查看、定时等都与画布模式一样,在此就不一一赘述。

editjob

删除作业#

删除作业操作可以在如下入口操作:

job-delete.png

会同时删除文件夹下的所有资源,谨慎操作。

执行作业#

编辑完成的作业点击执行按钮,即可立即执行。定时执行与批次相对比较复杂,将在下一章节将详细说明。

job-run.png

执行任务会跳转至任务历史模式,展示本次执行生成的历史。左侧是实时流图的监控信息,右侧是历次执行历史的列表。左上角”终止作业”按钮,会停止当前作业,结束任何执行中任务,停止整个工作流。执行错误的作业可以悬停标签头上或者右侧历史列表中的状态图标来查看错误信息,作业流图中双击节点可以打开实时任务日志。节点上会显示当前任务的执行状态。 任务列表栏目下,是所有任务的列表,包含任务的部分信息和执行状态,以及执行时间甘特图,列表可以根据名称过滤以及根据状态筛选。点击定位按钮可以跳转到作业流图并定位具体任务。

job-history-dag.png

点击列表视图,也可以以列表形式监控执行中作业情况。

job-history-list.png

定时与批次#

编辑完成的作业点击定时图标,可配置定时执行策略,可根据需求配置作业定时执行或者进行历史追批。

定时首先需要配置定时策略,支持“cron表达式”类型配置或者“时间间隔”执行两种策略。选中一种配置完成后,可以选择是否打开定时开关,只有定时开关打开了,作业才会按照定时策略执行。

定时配置同时支持追批配置,追批主要执行历史跑批时间段内所有符合定时配置的批次。执行模式支持并行和有序执行,并行会一次性触发所有历史批次执行,有序串行会按时间进行方向,从老到新依次执行批次。同时有序串行可以配置是否自依赖,若配置自依赖,则只有上个批次成功执行后才会继续触发下个批次。 系统会默认提供“批次标签”的功能(环境变量),脚本类执行时可从环境变量(${flow_batch_date})中获取“批次标签”的值,该值默认是预期执行的时间(如果是追批,则为历史批次的时间点),非实际执行时间。您也可自定义批次标签的值。

另外,每次重新配置并保存会覆盖上次配置,若此时有正在执行的追批,会提示是否停止。

job-timer.png

执行周期:对于“时间间隔”执行策略,指每次定时执行作业的时间间隔。

跑批时间段:该作业定时执行的生效时间范围,包含开始日期与结束日期。如果“跑批时间段”的开始日期早于指定的“下次执行时间”,则早于“下次执行时间”的时间段将会触发追批,追批的时间由“追批开始时间”决定。 晚于“下次执行时间”的时间段内,将触发日常定时执行,如果“下次执行时间”晚于结束日期,日常定时将不会被触发(追批不受影响)。

下次执行时间:作业日常定执行的下次执行时间(预期执行时间,可能与实际执行时间有偏差),以后每一个周期的预期执行时间都将在此基础上依次增加“执行周期”时间。

追批开始时间:如果需要追批,该配置决定追批的触发时间,有“即时开始”与“定时执行”两种策略。如果选择“即时开始”,则在保存该定时配置的同时立刻触发追批的操作。 如果选择了“定时执行”,则追批操作会在指定的追批定时执行的日期(一个晚于当前时间的时间点)触发。

追批执行模式:追批执行的方式,有“有序串行”与“并行”两种模式。“有序串行”指从按照早到晚的时间顺序执行追批操作,每次执行一各跑批作业,上个批次跑完之后才有可能触发下一个批次,是否触发下一个批次的执行还需要看上次的执行结果与“追批批次是否有依赖”参数的配置。

追批批次是否有依赖:在“有序串行”追批的时候,该参数起作用。如果选择“是”,则上个追批批次执行失败会阻止下一个批次的执行;如果选择“否”,则上个追批批次执行失败不会阻止下一个批次的执行。

批次标签设置: 此处您可以使用Shell脚本重新定义批次标签的值(默认值为预期执行时间),例如默认的处理脚本(date -d "${flow_batch_date}" '+%Y-%m-%d %H:%M:%S')会对批次标签的默认进行时间格式的转换,转换为“YYYY-mm-dd HH:MM:SS”格式。

批次标签预览:以上都定义好之后,此处会在展示前10次的历史批次标签与前10次定时执行批次标签的值,方便对以上配置的辅助印证。

作业历史查看#

点击历史按钮,右侧弹出执行历史列表。

job-history-button.png

该列表列出了所有执行历史(包括正在执行的)实例。点击名称可以查看详情。对于任务非完成的作业,在没有改变流图结构的基础上,左上角可以”续跑”该历史实例。续跑会更新此次历史,执行策略是跳过所有成功完成的作业,重试失败或者被取消的任务,一直到结束。 历史列表中不同的触发方式会有不同的图标:手动执行、定时触发、批次执行。

移动作业#

有两种操作方式,一种是点击作业右侧的三个点,在弹出的菜单中点击移动作业,在弹窗中输入新作业名并选择目标文件夹,点击保存。

moveJob

另一种操作方式是用鼠标拖动要移动的作业到目标文件夹上,松开鼠标,即可移动到对应的文件夹下。

moveJobDrag

复制作业#

作业复制可以生成一个当前作业的副本,允许为它起新的名字和指定所在的文件夹。

复制的作业拥有和原作业一样的任务、配置,不会复制原作业的调度配置和执行历史。

点击菜单中的复制作业,在弹窗中输入新的作业名称和作业要存储的位置,点击保存。

copyJob

文件管理#

作业调度所有的文本都会存储在所依赖的HDFS下,执行的时候cache相应的文本到本地(Flow的节点)。 文件主要分为共享文件和绑定任务文件。上传或创建在任意作业空间、文件夹下的文件默认是该作业空间下的共享文件,其可以被同空间下的全部任务调用。这些文件可以在资源树上对应作业空间以及各级文件夹节点下展开可见。 新创建的文本类任务,会默认生成绑定任务本身的脚本文件,这是绑定任务文件。该文件在资源树上对应任务节点展开可见。 对于这些文件,可以点击以新的tab展开。

file-open.png

不同文本会以多个tab展示,点击对应tab进入相应的文档。文档编辑窗口的右上方悬浮窗可以支持有限的文本排版功能以及提交历史的功能。文档本身会自动保存,自动保存不会生成历史,只有点击”提交”按钮才能声场历史记录(版本)。 右上角可以唤出文件历史菜单查看每一次文件提交记录,系统支持最近版本的历史记录,用户可以查询比较及回退。

作业历史#

点击左侧菜单的作业空间菜单,在打开的页面中点击作业历史标签页,即可打开作业历史。这里展示当前作业空间下所有的作业执行历史。

file-open.png

搜索与排序#

在作业历史表格的表头上,点击放大镜可以输入文本进行搜索,点击三角箭头可以排序,点击过滤标志可以按照条件过滤结果。点击高级搜索可以在弹窗中输入更多搜索条件。多种搜索条件可以同时生效。

搜索条件是浏览器会话级别的,页面跳转与刷新不会清空搜索条件,只有关闭本标签页才会清空。

字段配置#

作业历史记录了很多字段,表格上默认只展示一部分,想要查看其他的部分可以点击字段配置,在弹窗中配置想要查看的字段。

默认视图和状态汇总视图是内置的两种视图,点击这两个按钮可以快速应用对应的视图。

在字段前面的复选框上直接勾选或者取消勾选,可以控制该字段在表格上是否显示。

在弹窗最右侧区域可以通过拖动调整字段展示的顺序,这里从上到下的字段,对应在表格上的顺序是从左到右。

字段配置是用户级别的,不同用户可以有不同的配置,互不影响。

字段配置会被持久化保存,除非再次更改,此配置会一直生效。

file-open.png

任务历史#

点击左侧菜单的作业空间菜单,在打开的页面中点击任务历史标签页,即可打开任务历史。这里展示当前作业空间下所有的任务执行历史。

file-open.png

搜索与排序#

同作业历史的搜索与排序

字段配置#

同作业历史的字段配置