Dolphinscheduler Master突报 [244] - handler error: java.lang.NullPointerException: null解决历程

Posted 扫地增

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Dolphinscheduler Master突报 [244] - handler error: java.lang.NullPointerException: null解决历程相关的知识,希望对你有一定的参考价值。

背景

今天笔者在使用dolphinscheduler进行任务调度时,发现运行工作流实例后没有生成任务实例,于是查看master日志,预料本应该是如下报错,却发现在处理完该报错后,还有一个报错并且该错误自一周前就开始出现整的笔者起初也是一脸懵逼。这里分享一个排错的经验,仅供大家参考。

[ERROR] 2022-08-01 09:59:57.988 org.apache.dolphinscheduler.server.master.runner.WorkflowExecuteThread:[244] - handler error:
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.exceptions.TooManyResultsException: Expected one result (or null) to be returned by selectOne(), but found: 2

报错如下:

[ERROR] 2022-09-22 17:37:08.201 org.apache.dolphinscheduler.server.master.runner.WorkflowExecuteThread:[244] - handler error:
java.lang.NullPointerException: null
	at java.util.stream.Collectors.lambda$toMap$58(Collectors.java:1320)
	at java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)
	at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1382)
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
	at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
	at org.apache.dolphinscheduler.service.process.ProcessService.transformTask(ProcessService.java:2517)
	at org.apache.dolphinscheduler.service.process.ProcessService$$FastClassBySpringCGLIB$$ed138739.invoke(<generated>)
	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:689)
	at org.apache.dolphinscheduler.service.process.ProcessService$$EnhancerBySpringCGLIB$$bf03c416.transformTask(<generated>)
	at org.apache.dolphinscheduler.server.master.runner.WorkflowExecuteThread.buildFlowDag(WorkflowExecuteThread.java:579)
	at org.apache.dolphinscheduler.server.master.runner.WorkflowExecuteThread.startProcess(WorkflowExecuteThread.java:542)
	at org.apache.dolphinscheduler.server.master.runner.WorkflowExecuteThread.run(WorkflowExecuteThread.java:239)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at com.google.common.util.concurrent.TrustedListenableFutureTask$TrustedFutureInterruptibleTask.runInterruptibly(TrustedListenableFutureTask.java:125)
	at com.google.common.util.concurrent.InterruptibleTask.run(InterruptibleTask.java:57)
	at com.google.common.util.concurrent.TrustedListenableFutureTask.run(TrustedListenableFutureTask.java:78)
	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:748)

报错分析:

看到这个报错笔者起初也是一脸懵,没有什么思路但是看到调用的主方法是org.apache.dolphinscheduler.server.master.runner.WorkflowExecuteThread,推断错误应该是发生在master分配任务阶段,翻看日志发现该报错从2022-09-17凌晨就已经开始,dolphinscheduler并没有进行报警,决心此后一定要进行服务日志监控。回归正题,我们阅读日志只能发现该报错为空指针异常,但是到底是什么引起日志里并没有说明。这个时候已经没有招数了,这怎么办呢?
于是我换了一条思路,没有明确报错,又是一直在报,说明被调度任务一直在运行,于是我查看了web ui 首页监控发现果然有任务一直在跑。

既然如此那我们就去看到底是哪个任务一直在运行,我查看了项目管理界面果然找到一个天级ods的导数据任务一直在运行,而这个时间是不可能有天级ods层任务在执行的。那么关键点就被我们找到了
我们发现有好几个任务一直卡在工作流界面

而任务实例一直没有,原来一直是这个任务在作怪。

解决方案:

1、暂停运行的工作流,重新修改调度发现任务运行正常。
2、查看日志,发现master依旧报错。这可能是状态未更新。可以删掉工作流程实例表
t_ds_process_instance中先关流程,工作实例页面编号就是这个表的id。不要问为什么我知道,你也可以知道。

DELETE from t_ds_process_instance where id in (8434,8252,8068);

3、如果还是报错任务,可以重启下调度集群

超级挠头的一次解决问题的心路历程,希望对大家有帮助。后续笔者会出一篇对dolphinscheduler元数据库表的介绍希望能够帮到大家 嘿嘿。

以上是关于Dolphinscheduler Master突报 [244] - handler error: java.lang.NullPointerException: null解决历程的主要内容,如果未能解决你的问题,请参考以下文章

Dolphinscheduler Master突报 [244] - handler error: java.lang.NullPointerException: null解决历程

DolphinScheduler服务启停

Apache DolphinScheduler 3.0.6 发布,或将是最后一个 3.0.X 版本

Dolphinscheduler调度生成工作流实例未生成任务实例解决历程 one result (or null) to be returned by selectOne(),but found: 2

Dolphinscheduler调度生成工作流实例未生成任务实例解决历程 one result (or null) to be returned by selectOne(),but found: 2

Dolphinscheduler调度生成工作流实例未生成任务实例解决历程 one result (or null) to be returned by selectOne(),but found: 2