dolphinscheduler核心流程

本文介绍了一次针对DolphinScheduler的数据开发项目实践,包括其架构、代码结构及任务执行流程。该项目旨在实现数据加工功能,并通过二次开发加入业务定制化元素。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概况

​ 因为最近公司,要计划做数据中台,而我们要负责做一个 数据开发这一部分,主要功能是将数据加工,因为产品要加入一些业务上定制化的东西,所以目前是将dolphinscheduler进行一个二次开发。下面我会分享dolphinscheduler的整体架构,和一个核心流程。



下面主要会分为三部分:

1 主要架构

2 代码结构

3 任务执行过程的核心流程



版本:

Dolphinscheduler-1.3.8-release

主要架构

在这里插入图片描述


上图是从官网直接copy过来,是ds的架构图,ds的架构我觉得主要的几点是:

1 master,worker,api 主要运行时容器是 spring boot

2 服务间的主要通信是通过netty完成的

3 分布式调度,主要是用zk的选举策略



代码结构

在这里插入图片描述

1 Alert

提供告警支持,目前应该只实现了邮件和企业微信该服务是以 在线程内不断遍历数据库,获取待告警的信息驱动的


2 Api

给界面提供接口,是一个spring boot服务


3 Common

抽取出一些功能配置


4 Dao

数据库的操作


5 Dist

一些打包配置


6 Plugin-api

告警插件接口,实体等


7 Remote

Netty 的客户端,服务端,编解码器,handler等 , woker, master, api服务都会用到

8 Server

Master 和 worker 服务,是spring boot应用 和 内部启动了一个netty server


9 Service

抽象了一些公共服务,如日志,权限,zk操作等

10 UI

前端页面



任务执行过程的核心流程

我们来从 界面上 点击 执行按钮 开始分析, 其中会经过 api server — master server – workder server


主要调用链路是:

Api server —>

ExecutorController.startProcessInstance()

—execService.execProcessInstance

—this.createCommand()

— processService.createCommand(command);

— result = commandMapper.insert(command);

1 界面上点击执行按钮,会调用 exectorController 的 startProcessInstance 方法

2 该方法主要的功能是根据 project 配置,初始化出command 插入数据库



MasterServer—>

this.masterSchedulerService.start();—>

Command command = processService.findOneCommand();—>

ProcessInstance processInstance = processService.handleCommand---->

masterExecService.execute(new MasterExecThread());—>

executeProcess();-

1 masterServer初始化的时候,会初始化 masterSchedulerService

2 masterSchedulerService 会不断从数据库 遍历 api server 存进来的 command

3 然后给 masterExecService executeProcess() 进行调度

其中

executeProcess() 有三个子方法,prepareProcess,runProcess, endProcess

1 其中 prepareProcess构建DAG 流程图和初始化一系列队列

2 运行DAG流程图, 将DAG里的task 分发到 worker节点

3 EndProcess(); 更新流程完成状态,发送告警通知等



runProcess主要做了 将 DAG里面的队列 放到 readyToSubmitTaskQueue 队列,然后放到

TaskPriorityQueue,TaskPriorityQueue 队列 会由TaskPriorityQueueConsumer不断消费使用netty发送给 worker



wokerServer
1 初始化 nettyServer,接到 master发来的 command之后,主要处理命令的类 在 NettyServerHandler----

2 如果是流程图的任务就会是 由 TaskExecuteProcessor.process()

3 process 会调用 TaskExecuteThread -->task.handle()

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值