海豚DolphinScheduler系统调度操作分析

一个工作流实例可以包含很多任务实例,各个任务实例有的有依赖顺序关系。

BASEDIR=$(cd `dirname $0`; pwd)
cd $BASEDIR
nowtime=`date +"%F %T"`
echo $nowtime >> $BASEDIR/shell.log

Shell01.sh

Shell02.sh

Shell03.sh

Shell04.sh

Shella.sh

Shellb.sh

一、【工作流执行正常的情况】

运行结果:

二、【假设shella.sh脚本错误,执行失败】

运行:

运行结果:

修改脚本为正确,重跑:

从结果可以分析,重跑,就说明是工作流重跑:

三、【将其中一个节点执行时间延长1000秒,并且在期间重启服务】

将shell03.sh 时间执行延长,模拟该实例执行时间较长:

BASEDIR=$(cd `dirname $0`; pwd)
cd $BASEDIR
nowtime=`date +"%F %T"`
for i in `seq 1 1000`
do
	sleep 1
	echo "$nowtime shell03 .....$i....." >> $BASEDIR/shell.log
done
echo "$nowtime shell03" >> $BASEDIR/shell.log

运行结果:

假设这个时候服务停止会如何呢?

发现分配的实例还是在执行:

经分析确实是没有系统调度的java进程:

启动服务:

sh script/start-all.sh

运行结果:

出现这个结果的原因是:停止服务,但是根本没有停止当时分配给shell03.sh的执行任务。

最后执行完毕:

注意恢复容错跟重跑是不一样的。恢复容错是从任务实例错误的开始执行,工作流重跑是头开始跑。

四、【中途停止】

恢复运行:

将shell03.sh执行时间延长1000秒,假设在这期间中途停止呢?会不会跟重启服务一样呢?

执行到shell03.sh的时候,停止

停止:

发现该任务实例的脚本shell03.sh也是出于停止状态,没有继续执行:

恢复

这也就是说明停止,他会杀死shell03.sh的任务实例,恢复运行,会对任务实例shell03.sh重新初始化执行。这个在运行过程中,停止系统调度服务是一样的,停止系统调度的服务他不会杀死shell。启动服务后,系统会容错恢复,也就是对当时刚好运行到某个任务实例,从那个任务实例开始重新初始化继续执行。

总结:在需要停机对系统调度进行维护的时候,最好是选择工作流任务少的时候,并且对其停止“中止服务”,然后停止系统调度服务,然后关机。终止工作流任务跟直接停止海豚系统任务(sh stop-all.sh)的主要区别的停止服务他未必能杀死工作流中的任务实例任务,虽然服务停止了,任务实例还有可能在执行。终止工作流任务它就会杀死相应的任务实例,其实这也很容易理解,任务实例其实可理解为被封装的一个任务进程,终止它当然是杀敌该进程,恢复——当然就是对这个任务实例重新初始化执行。

相关文章

Java 中的8种基本数据类型

Java 中有 8 种基本数据类型,分别为:6 种数字类型:4 种整数型:byte、short、int、long2 种浮点型:float、double1 种字符类型:char1 种布尔型:boolea...

java基本数据类型

前言前两节对java做了一个简单的介绍以及java环境的安装,那么本节就算是基本进入到java编程的正式学习,在进行学习java编程之前我首先要认识一下java里面有哪几种数据类型。四类八种Java的...

java float精度引发的问题

最近做地图相关的项目,因为使用float导致精度损失的问题回顾:根据百度地图api标注的经纬度返回类型为float,所以字段类型也定义为float// 百度地图api返回值 {"status":0,"...

JAVA中的浮点数与二进制

先来看一段简单的代码public static void main(String[] args) { System.out.println(0.1+0.2); }打印结果如下:0.30...

Java程序员,一周Python入门:数据类型、变量、字符串和字符编码

Java程序员,一周Python入门:数据类型、变量、字符串和字符编码对比学习Java 和 Python 在数据类型、变量管理、字符串处理等方面有很大的区别,下面进行详细对比。1. 数据类型和变量1....

Java泛型全方位剖析:从入门到精通的完整指南(上篇)

Java泛型全方位剖析:从入门到精通的完整指南第一部分:引言与基础概念Java泛型是Java 5引入的重要特性,它允许类、接口和方法在定义时使用类型参数,提高了代码的类型安全性和可读性。本文将全面解析...