Apache Dolphinscheduler - 执行工作流却没有创建任务实例分析

问题描述

最近碰到一个奇怪的问题,DS 创建工作流成功,但是一旦执行,始终在转,而且没有任何执行的痕迹,后来到数据库一查发现压根没创建任务实例。

我们都知道一个工作流里面可以挂多个任务节点,执行工作流的时候,会创建工作量实例和对应的任务流实例。

但此时只创建了工作流实例,并没有创建任务流实例......继续分析

javascript 复制代码
[ERROR] 2024-03-22 19:09:00.653 +0800 org.apache.dolphinscheduler.server.master.runner.WorkflowExecuteRunnable:[1020] - [WorkflowInstance-39509][TaskInstance-0] - Submit standby task null error, taskCode: 13014149591840
java.lang.NullPointerException: null
[ERROR] 2024-03-22 19:09:00.654 +0800 org.apache.dolphinscheduler.server.master.runner.WorkflowExecuteRunnable:[709] - [WorkflowInstance-0][TaskInstance-0] - Start workflow error
java.lang.NullPointerException: null
        at java.util.concurrent.ConcurrentHashMap.putVal(ConcurrentHashMap.java:1011)
        at java.util.concurrent.ConcurrentHashMap.put(ConcurrentHashMap.java:1006)
        at org.apache.dolphinscheduler.server.master.runner.WorkflowExecuteRunnable.submitStandByTask(WorkflowExecuteRunnable.java:1855)
        at org.apache.dolphinscheduler.server.master.runner.WorkflowExecuteRunnable.submitPostNode(WorkflowExecuteRunnable.java:1367)
        at org.apache.dolphinscheduler.server.master.runner.WorkflowExecuteRunnable.call(WorkflowExecuteRunnable.java:703)
        at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1604)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:750)

还有一个特别坑的地方是,发现第一个 null 是没有堆栈信息。这就加大了排查难度,后来发现原来这里已经是失败重试环节,但是最开始是有堆栈信息的。

原因分析

根据前几次的自定义组件开发经验,一开始就怀疑是否参数传落了,特别是一些默认参数。

经过一系列摸索排查,发现在 taskParam 对象里 resourceList 为 null 导致 ds 报错 NPE

javascript 复制代码
{
    "taskParams": {
        "localParams": [
            {
                "prop": "name",
                "direct": "OUT",
                "type": "VARCHAR",
                "value": "Bob",
                "boolGlobal": false
            }
        ],
        "resourceList": null
    }
}

解决方案

只要在传参到 ds 前给予 resourceList 为空时默认赋值 \[\] 即可

相关推荐
前端 贾公子1 天前
小程序蓝牙打印探索与实践(下)
小程序·apache
DolphinScheduler社区1 天前
Apache DolphinScheduler 3.4.2 正式发布!新增 Amazon EMR Serverless 插件,增强监控与补数据能力
大数据·云原生·serverless·apache·海豚调度·版本发版
前端 贾公子1 天前
小程序蓝牙打印探索与实践(中)
apache
SeaTunnel1 天前
87 个 PR 迭代复盘|Apache SeaTunnel 5 月版本重点更新解读
大数据·数据库·开源·apache·seatunnel
DolphinScheduler社区1 天前
实战演示 | 基于 Apache DolphinScheduler 与 Apache SeaTunnel 实现 MySQL 到 Doris 离线定时增量同步
数据库·mysql·开源·apache·海豚调度·大数据工作流调度
chéng ௹1 天前
uniapp封装火山引擎 DataRangers 埋点 SDK
uni-app·apache·火山引擎
阿坤带你走近大数据1 天前
Apache Hop的详细介绍
apache
imkaifan2 天前
工作流(Worker/Graph)配置对象如何解读、子图
javascript·工作流·(worker/graph)·配置对象如何解读·子图
就叫_这个吧3 天前
servlet整合tomcat项目启动报错解决,org.apache.tomcat.util.descriptor.web.WebXml.setVersion
java·servlet·tomcat·apache
云器科技3 天前
Apache Iceberg-cpp:原生性能架构与演进路线
架构·apache