运行与调试¶
工作流发布后,每次运行都会产生作业记录。本页说明如何从作业记录定位失败,并列出常见的失败成因与处理方式。排查建立在工作流页的前提之上:调度引擎按定义执行、不校验任务语义,因此失败既可能来自定义,也可能来自某个节点的执行。
从作业记录入手¶
一次运行按输入文件扇出为多条作业记录,每个文件一条。每条记录包含各节点的执行状态、输入、输出与日志。
排查从第一个失败节点的作业记录开始:
定位状态为失败的节点。
查看该节点的输入:是否取到了预期的值,字段是否符合该节点的约定。
查看该节点的日志:执行问题的原因通常记录在此。
若该节点的输入已经不对,问题多在其上游或定义,而非该节点本身。
先分两类问题¶
定位失败前,先判断问题属于哪一类——两类的修复位置不同。
类别 |
表现 |
修复位置 |
|---|---|---|
定义问题 |
节点选择、执行顺序或参数绑定错误;引擎照定义原样执行 |
修改工作流定义 |
执行问题 |
定义正确,某节点对合法输入处理失败 |
查看该节点作业记录中的日志 |
一份能保存、能启动的工作流,不代表定义正确。定义问题不会在保存或启动时报错,只在运行中显现。
常见失败与成因¶
现象 |
成因 |
处理 |
|---|---|---|
节点持续等待,不报错也不结束 |
节点引用的算子未在工作区注册(名称拼写、版本不符,或该算子当前无可用实例) |
以 |
节点报输入缺失或取值为空 |
下游模板引用的键,上游未用 |
核对上游 |
画布显示与实际执行不一致 |
局部编辑改动了其他节点的绑定 |
发布前用“预览 DSL”核对整份定义 |
子工作流合并失败 |
不支持跨工作流引用或合并,工作流之间不共享状态、无数据通道 |
在同一份工作流定义内声明子网 |
需要文件内容的节点取不到正文 |
工作流数据只传文件引用,不传文件正文;读取正文的节点已禁用 |
由节点凭文件引用自行读取正文 |
SQL 节点执行失败 |
SQL 节点的输入仅为 SQL 语句本身,不接受自然语言 |
检查 SQL 语句本身;详见 SQL 编辑器 |
备注
节点引用未注册的算子时,运行不会报错,该节点持续等待。这类失败在作业记录中表现为节点长期停留在等待状态,而非报错退出——排查时优先核对算子名称是否与工作区实时清单一致。
小技巧
在画布上完成局部编辑后,发布前用“预览 DSL”通读整份定义。画布是定义的一种编辑入口,局部操作可能改动其他节点的绑定;以 DSL 为准核对,可在运行前发现定义问题。