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元数据库表的介绍希望能够帮到大家 嘿嘿。

你以为这就没有了?大招!!!非必要不要使用

我们知道t_ds_process_instance是流程实例表其实与我们服务没有啥大用,记录的只是任务调度一些历史信息,如果大家实在找不到造成错误的数据,而t_ds_process_instance表中的数据有不重要可以考虑直接delete全表,不要truncate,因为truncate不掉。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

扫地增

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值