DolpinScheduler流程流转逻辑
2021-05-28 11:21:49 11 举报
ds-task
作者其他创作
大纲/内容
ZKMasterClient监听到Zookeeper中/dolpinscheduler/nodes/master下节点发生变化
尝试获取Worker故障转移分布式锁
任务已结束
false
监听流程状态
结束
得到锁?
权限优先队列消费线程(单线程)
根据权限字符串信息还原出Task实例,流程实例等上下文信息
(Master-MasterSchedulerThread 单个线程)扫描Command表中的数据master扫描之前需要先获取分布式锁每次只取一条数据
MasterTaskExecThread中的某个线程
Task实例的权限信息放入权限优先队列(阻塞链队)(基于字符串排序确定优先级)
流程定义到任务执行
获取分布式锁
true
通过页面定义流程
结束Worker故障转移
基于Task实例构建权限信息processInstancePriority_processInstanceId_taskInstancePriority_taskInstanceId_workerGroup;
下发成功
Master故障转移
准备资源hdfs上的程序包之类的资源下载到本地
将任务实例交给MasterTaskExecThread线程池处理
kill Yarn任务
否
执行任务
Worker故障转移
ZKMasterClient监听到Zookeeper中/dolpinscheduler/nodes/worker下节点发生变化
在command表中插入启动流程的Command
检测队列数据量
扫描command表
构建任务实体
创建Task实例
取到数据?
持久化节点状态信息到数据库
根据Command类型查询或新建流程实列
将数据库众中对应记录的状态更新为NEED_FAULT_TOLERANCE
将Task实例提交到数据库
是
通过Netty向Worker下发任务
MasterExecThread中的一个线程
从队列中取数据
Master故障转移流程
将Task放入workerExecService任务池
在页面上通过点击启动流程或者设置定时任务
向master发送ACK消息
有可用worker
分析流程中节点以及连接情况,构建DAG
创建新的Command,类型为RECOVER_TOLERANCE_FAULT_PROCESS
基于Command构建上下文
小于零
构建执行上下文(处理参数等)
Task重新入队
标记当前worker不可用
监听任务状态(扫描t_ds_task_instance表)
获取可执行的Task节点
将流程实例交给MasterExecThread
根据上下文信息选择合适的Worker
结束Master故障转移
检查是否还有可用worker
通过Netty回调Master上报执行情况
流程从定义到具体任务执行简要流程
流程是否结束
再次检测主机状态
workerExecService线程池中的某个线程TaskExecuteThread
主机是否存活
是否超过重试次数
更新流程实例的host字段为null
Worker故障转移流程
0 条评论
下一页