Skip to content

3.3.2 离线开发 ​

离线开发以「工作流」为单位组织任务。一个工作流内可以放多个节点,节点之间通过连线形成上下游依赖,整体按调度周期或手动触发运行。日常操作沿着这条链路展开:

创建工作流 → 配置节点 → 建立依赖 → 配置调度 → 保存 → 上线 → 运行 → 查看实例与日志

表2 离线开发的六个环节
环节页面产物
创建工作流工作流定义 > 创建工作流一个处于「下线」状态的工作流
配置节点工作流画布 > 当前节点设置节点脚本、资源与参数
配置调度工作流定义 > 定时一条定时计划
发布工作流定义 > 上线状态变为「上线」,可运行、可被调度
运行工作流定义 > 运行工作流实例
观察工作流实例 / 任务实例整体结果、节点结果与日志

左右滑动查看完整表格

3.3.2.1 工作流定义列表 ​

进入「离线开发 → 工作流程 → 工作流定义」。页面顶部为操作按钮与筛选条件,中部为工作流列表,支持按工作流名称模糊查询。

表3 工作流定义列表的字段
列含义
#当前页内的行号
工作流名称工作流的唯一标识,创建时在「基本信息」中填写
状态「上线」可运行、可被调度;「下线」不能运行,但可以编辑
定时状态「-」表示未配置定时;配置后为「上线 / 下线」
创建时间 / 更新时间创建与最后修改时间
描述创建时填写的用途说明
创建用户 / 修改用户操作人账号

左右滑动查看完整表格

每行右侧的操作列提供 9 个图标按钮,鼠标悬停可看到名称。按下表顺序排列:

表4 工作流定义列表的操作按钮
序按钮作用
1编辑打开「工作流定义详情」画布;工作流处于「上线」状态时不响应,需先下线
2运行弹出「启动前请先设置参数」,确认后立即执行一次
3上线 / 下线切换工作流的上线状态,操作前有确认提示
4定时配置调度周期与执行资源
5(无名称提示)与工作流结构相关的操作入口
6复制工作流以当前工作流为模板复制一份新的工作流
7(无名称提示)与工作流维护相关的操作入口
8工作流树形图以树形结构查看工作流内的节点关系
9版本信息查看工作流的版本记录

左右滑动查看完整表格

看不清按钮作用时,先悬停

操作列的图标含义并不是每个都有文字提示。执行影响面较大的操作(如下线、复制、删除)前,先在测试项目上确认按钮行为,避免误操作影响正在运行的工作流。

3.3.2.2 创建工作流 ​

创建工作流分两步:先把节点拖进画布并完成配置,再填写工作流名称保存。只有保存成功,工作流才会出现在列表中。

  1. 在工作流定义列表点击右上角「创建工作流」。
  2. 系统在内容区打开「创建工作流定义」标签页,左侧为组件面板,右侧为空白画布。
  3. 从左侧「通用组件」中按住所需类型,拖到画布空白处后松开。可选类型为 SHELL、JAVA、PYTHON、SQL、FLINK_SQL、HTTP。
  4. 松开鼠标后弹出「当前节点设置」面板,填写节点名称并在「脚本」区域编写代码。
  5. 点击「确定」,节点回到画布,节点上显示序号与名称。
  6. 点击画布右上角「保存」,弹出「基本信息」窗口。
  7. 填写「工作流名称」(必填),按需填写描述、执行策略与全局参数,点击「确定」。
  8. 返回工作流定义列表,新建的工作流出现在列表中,状态为「下线」。

节点设置面板较长,向下滚动可见「脚本」区域。脚本为必填项,未填写时面板不会关闭,并在脚本下方提示「请输入脚本(必填)」。

表5 创建工作流的「基本信息」字段
字段是否必填填写说明
工作流名称是工作流的唯一标识,保存后以此名称显示在列表与实例中
描述否工作流的用途说明,便于他人识别
超时告警否开关。开启后按超时规则发送告警
执行策略否节点之间的执行方式,默认「并行」
全局参数否点击「添加」逐行填写键与值,供工作流内各节点引用(用法见 3.3.2.11)

左右滑动查看完整表格

创建成功的判断依据

保存后列表中出现该工作流,且「创建用户」为当前登录账号、「创建时间」为当前时间、「状态」为「下线」,即表示创建成功。此时工作流还不参与任何调度。

3.3.2.3 节点配置 ​

节点是工作流的最小执行单元。双击画布上的节点,可重新打开「当前节点设置」面板,面板字段分为执行控制、资源配置与脚本三类。

表6 节点设置的字段说明
字段说明
节点名称必填。节点在画布与任务实例中的显示名称
运行标志「正常」参与执行;「禁止执行」跳过该节点
描述节点用途说明,可选
任务优先级节点优先级,默认 MEDIUM
Worker分组节点在哪个 Worker 组执行,默认「继承启动或项目默认组」
环境名称节点运行环境,按项目实际配置选择
失败重试次数 / 重试间隔失败后自动重试的次数与间隔(分钟)
CPU配额 / 最大内存节点的资源限制,-1 表示不单独限制
延时执行时间节点启动前等待的分钟数
超时告警开关。开启后按超时时间告警
脚本必填。节点实际执行的代码内容
资源可关联 S3 数据源中的资源文件,点「重新加载」刷新可选列表
自定义参数节点级参数,供脚本内以 ${参数名} 方式引用(用法见 3.3.2.11)
前置任务指定本节点的上游节点,用于补充画布连线之外的依赖

左右滑动查看完整表格

配置节点时需要注意三点:

  • 脚本是保存的前提:脚本为空时面板不会关闭,工作流也无法保存成功。
  • 依赖有两种建立方式:在画布上从一个节点向另一个节点拉线,或在「前置任务」中直接指定上游;两条路径的效果都是让节点按顺序执行。
  • 执行顺序由依赖决定,不由位置决定:画布上的左右上下排布不产生依赖,只有连线和「前置任务」才产生依赖。

3.3.2.4 编辑工作流 ​

点击列表的「编辑」图标进入编辑页,页面标题为「工作流定义详情」,布局与创建时一致,可在画布上增删节点、调整连线、修改节点配置,改完点击「保存」。

上线状态不能直接编辑

工作流处于「上线」状态时,点击「编辑」图标不会打开编辑页。正确顺序是:先点操作列第 3 个图标「下线」,确认后再点「编辑」。修改保存后必须重新「上线」,新的配置才会在后续运行与调度中生效。

修改已上线的工作流时,建议先在页面上确认以下三点,避免影响正在运行或待触发的任务:

  • 确认本次改动范围:只改脚本、还是同时增删了节点与依赖。增删节点会影响下游依赖关系。
  • 确认定时是否在运行:定时状态为「上线」时,到点会自动触发;改动期间建议先暂停调度。
  • 确认是否需要重跑历史数据:节点逻辑变更后,已产出的历史数据不会自动重算,需要时通过补数处理(见 3.3.2.12)。

3.3.2.5 上线与下线 ​

上线是工作流可运行、可被调度的前提。点击操作列第 3 个图标,系统弹出确认框,确认后列表状态随之变化。

表7 上线与下线的差异
操作确认提示执行后状态影响
上线是否确定上线该工作流?上线可手动运行;已配置的定时可按计划触发
下线是否确定下线该工作流?下线不能运行;编辑入口恢复可用;定时不会触发

左右滑动查看完整表格

下线前先核对下游依赖

工作流之间存在上下游依赖时,下线本工作流可能导致下游任务一直等待。确认前请先在工作流树形图中核对是否存在下游,并通知相关任务的负责人。

3.3.2.6 运行工作流 ​

点击操作列的「运行」图标,弹出「启动前请先设置参数」窗口。该窗口用于指定本次运行的策略与参数,确认后立即生成一次工作流实例。

表8 运行窗口的字段说明
字段说明
工作流名称只读,显示当前运行的工作流
失败策略「继续」:某节点失败后其余节点继续执行;「结束」:某节点失败即终止整条工作流
流程优先级本次运行的优先级,默认 MEDIUM
Worker分组 / 租户本次运行使用的 Worker 组与租户,默认取项目配置
环境名称本次运行的环境,按项目实际配置选择
补数勾选「是否是补数」后按指定日期范围执行,详见 3.3.2.12
启动参数点击「添加」逐行填写本次运行使用的参数,详见 3.3.2.11
是否空跑开启后不真正执行脚本,详见 3.3.2.13

左右滑动查看完整表格

点击「确定」后,当前页面不会停留显示结果,需要到「工作流实例」查看本次运行。实例列表中新增一条记录,运行类型为「启动工作流」,状态显示成功或失败,并记录运行时长、执行用户与主机。

3.3.2.7 工作流定时 ​

点击操作列的「定时」图标,弹出定时配置窗口。窗口标题为「定时前请先设置参数」,表示定时运行同样需要先确定运行参数。

表9 定时配置的字段说明
字段说明
起止时间必填。调度的生效区间,默认从当天到一百年后
定时Cron 表达式,例如 0 0 * * * ? * 表示每小时整点触发
执行时间点击后按当前 Cron 计算并展示接下来 5 次执行时间
时区默认 Asia/Shanghai
定时错过策略调度延迟时的补偿方式,默认「补触发所有错过的执行,之后按正常节奏继续调度」
失败策略 / 通知策略运行失败后的处理方式与通知范围
流程优先级 / Worker分组 / 租户 / 环境名称本次调度的执行资源与账号

左右滑动查看完整表格

填写 Cron 后,点击「执行时间」是最快的校验方式,系统会直接列出后续 5 次触发时间。如果时间不符合预期,说明表达式写错了,需要先修正再提交。

提交后,工作流列表的「定时状态」由「-」变为「下线」,表示调度计划已创建但尚未启用。进入「工作流程 → 工作流定时」可以查看该计划的完整信息,包括 Crontab、起止时间、状态与 Worker 分组。

定时状态为「下线」时不会自动触发

定时计划创建后默认是「下线」状态,需要在定时列表中把它上线,调度才会按 Cron 触发。「工作流上线」与「定时上线」是两件事,两者都满足才会按时运行。

3.3.2.8 工作流实例 ​

「工作流程 → 工作流实例」列出每次运行产生的实例。顶部可按工作流名称、执行用户、主机筛选,点「展开」显示更多条件。

表10 工作流实例列表的字段与操作
列 / 操作含义
工作流实例名称由「工作流名称-时间戳」组成,是本次运行的唯一标识
状态本次运行的整体结果,成功时显示绿色对勾
运行类型「启动工作流」为手动运行;按调度触发时显示对应类型;补数运行为「补数」
调度时间本次运行对应的调度日期;手动运行显示「-」
开始时间 / 结束时间 / 运行时长本次运行的时间信息
运行次数 / 容错标识 / 空跑标识重跑次数、是否容错运行、是否为空跑
执行用户 / 主机发起人与实际执行节点
操作:编辑打开「工作流实例详情」,以画布形式查看各节点状态
操作:重跑按原参数整体重跑本次实例
操作:重跑失败任务只重跑上次失败的节点
操作:停止 / 暂停终止或暂停正在运行的实例

左右滑动查看完整表格

点击「编辑」打开实例详情,画布上每个节点带状态标记,可以直观看出哪个节点成功、哪个失败。该页面为只读视图,右上角提供「保存」「关闭」,节点上不提供日志入口。

实例详情只看整体,日志要到任务实例

工作流实例详情展示的是节点状态分布;要看清某个节点执行了什么、报了什么错,需要到「任务实例」中查看该节点的运行日志(见 3.3.2.9)。

3.3.2.9 任务实例与运行日志 ​

工作流实例是「整条流程」的结果,任务实例是「单个节点」的结果。定位失败原因要看任务实例。进入「离线开发 → 任务 → 任务实例」,可按任务编码、任务名称、工作流实例筛选。

表11 任务实例的字段与操作
列 / 操作含义
任务名称节点名称,与工作流画布上的节点一致
工作流实例所属的工作流实例名称,是两张表的关联字段
执行用户 / 节点类型执行账号与节点类型(如 SHELL)
状态节点执行结果
提交时间 / 开始时间 / 结束时间 / 运行时间节点的执行时间信息
重试次数 / 空跑标识 / 主机自动重试次数、是否空跑、执行节点
操作:强制成功把失败节点标记为成功,用于人工放行
操作:查看日志打开日志窗口,查看节点实际输出
操作:下载日志把日志文件下载到本地

左右滑动查看完整表格

点击「查看日志」弹出日志窗口,窗口顶部有「刷新」「全屏」,底部为「确定」。日志开头固定包含日志路径与主机信息,随后是执行过程。

日志内容按固定顺序输出,可用来快速定位问题:

表12 日志内容的结构
日志片段含义
[LOG-PATH] / [HOST]日志文件在服务器上的路径、执行该节点的主机
Initialize Task Context / TenantCode初始化任务上下文,校验租户账号是否可用
working directory ... create successfully任务工作目录创建成功
Load Task Instance Plugin / physicalTask: SHELL加载节点类型插件
Initialize shell task params { ... }节点参数与脚本原文,含 localParams、rawScript,可与页面配置对照
Final Script Content平台替换参数后最终执行的完整脚本
Execute Task Instance 及后续输出实际执行过程与脚本输出

左右滑动查看完整表格

日志时间与页面时间相差 8 小时

日志中的时间戳为 UTC,页面显示为本地时间(UTC+8)。例如页面开始时间为 16:01,日志首行显示 08:01,两者是同一次执行,不是两次运行。

定位失败原因时,建议按以下顺序查看日志:

  1. 先看日志末尾的退出码与最后几行输出,确认是脚本报错还是资源、权限问题。
  2. 再看「Initialize shell task params」,核对脚本原文与页面配置是否一致。
  3. 再看「Final Script Content」,确认参数是否按预期替换。
  4. 若脚本依赖外部服务,检查连接串、账号与网络连通性。
  5. 修复后,在任务实例或工作流实例上执行重跑。

3.3.2.10 项目偏好 ​

「离线开发 → 项目 → 项目偏好」用于设置项目级的默认值,分为项目运行配置与项目偏好管理两块。这里设置的内容会成为该项目下新建工作流与任务的默认选项。

表13 项目偏好的设置内容
区域内容作用
项目运行配置运行账号、队列、默认工作组执行任务前必须配置运行账号与队列,并由运维确认 Worker 主机上存在该账号
项目偏好管理任务优先级、租户、Worker分组、环境名称、失败重试次数与间隔、通知策略、告警组、CPU配额、最大内存新建节点时的默认值,分「启用 / 未启用」两栏

左右滑动查看完整表格

实际执行时的工作组按「节点显式选择 → 启动或定时时选择 → 项目默认组」的顺序确定。因此节点上留空并不代表使用项目默认值以外的配置,而是逐级向上取默认。

本章小节 ​

大数据平台用户操作手册