dolphinscheduler v2.0.1 master和worker执行流程分析(四)
目录
Worker接受执行
Worker注册的Processor
思考1
Worker接受执行
如红箭头所示,worker大致从接受到task,提交线程执行,最后响应结果结束。
TaskExecuteProcessor:
worker入口,接受master提交的TaskExecutionContext。
1. 缓存TaskExecutionContext。特别注意,这里TaskExecutionContext第一次复制为TaskRequest对象(简称TR1),缓存到TaskExecutionContextCacheManager
2. 缓存NettyRemoteChannel到TaskCallbackService中,后面于master通信都要用到
3. 响应ACK command,command里记录了task得worker host,state,log path,start time。并且worker服务会缓存ack command到RetryReportTaskStatusThread。RetryReportTaskStatusThread是个轮询线程,不断的重新发送command
4. 创建TaskExecuteThread线程(传入TaskExecutionContext对象),并添加到WorkerManagerThread里的队列中,等待真正提交执行。
WorkerManagerThread:
主要有两个组成:
1. workerExecuteQueue队列,用于接受缓存TaskExecuteProcessor提交的线程
2. ExecutorService线程池,用于提交workerExecuteQueue队列里的线程,该线程池可执行线程数可配置,也是设置worker的并发度
工作原理:本质是个轮询线程,不断从workerExecuteQueue队列获取TaskExecuteThread线程, 利用ExecutorService进行提交执行。
TaskExecuteThread:
真正的执行线程。
1. 传入TaskExecutionContext对象第二次复制为TaskRequest对象(简称TR2)
2. 根据task类型,利用TaskChannel实例化一个真正的task(传入TR2对象),比如shell,java等(继承AbstractTask),方法有init(),handle(),cancelApplication()等
1) handle()是核心执行方法,执行中会生成processId(任务进程ID) ,yarn applicationId,执行状态结果等
3. 响应responseCommand(result command),并缓存result command到RetryReportTaskStatusThread
4. 释放task缓存
RetryReportTaskStatusThread:缓存ack result command,如果正常响应command失败,该轮询线程会持续发送,一直到收到master响应的DBcommand。
Worker注册的Processor
TaskExecuteProcessor: 不在赘述
DBTaskAckProcessor和DBTaskResponseProcessor:
1. 接受master发出的DBcommand。
2. 清除RetryReportTaskStatusThread里缓存的ack result command
思考1
TaskExecutionContext 和 TaskRequest?
以kill为例,目前海豚kill是从TaskExecutionContextCacheManager里获取TaskRequest(TR1),进而获取processId等信息进行kill操作。从上图看,task需要将这些重要信息同步到TR1,源码实现
taskRequest.setProcessId(processId);
boolean updateTaskExecutionContextStatus =
TaskExecutionContextCacheManager.updateTaskExecutionContext(taskRequest);
在task内,使用TR2设置processId,然后更新TaskExecutionContextCacheManager为TR2。
dolphinscheduler v2.0.1 master和worker执行流程分析(四)相关推荐
- Apache DolphinScheduler v2.0.1 Master 和 Worker 执行流程分析系列(三)
点亮 ⭐️ Star · 照亮开源之路 https://github.com/apache/dolphinscheduler 这是一系列关于 DolphinScheduler v2.0.1的源码分析文 ...
- dolphinscheduler v2.0.1 master和worker执行流程分析(一)
前言 以下是基于海豚v2.0.1源码分析得出的图解:master和worker执行流程. 后面所有的讲解都是围绕这一张图,所以在看讲解时,请参考整个图去理解.讲解思路是化整为零,积点成线,集线成面. ...
- mysql 8.0 一条insert语句的具体执行流程分析(三)
代码版本:mysql 8.0.22 编程语言:c++ && c++11 && c++14 && c++17 上一篇文章:mysql 8.0 一条inse ...
- mysql 8.0 一条insert语句的具体执行流程分析(二)
继续上一篇文章:mysql 8.0 一条insert语句的具体执行流程分析(一)_一缕阳光的博客-CSDN博客 由于最近换工作一直在试用期内,在拼命的学习.总结中,因此没有时间写文章,今天转正了腾出来 ...
- Java多线程- 线程池的基本使用和执行流程分析 - ThreadPoolExecutor
线程池的实现原理 池化技术 一说到线程池自然就会想到池化技术. 其实所谓池化技术,就是把一些能够复用的东西放到池中,避免重复创建.销毁的开销,从而极大提高性能. 常见池化技术的例如: 线程池 内存池 ...
- 动态执行流程分析和性能瓶颈分析的利器——gperftools的Cpu Profiler
在<动态执行流程分析和性能瓶颈分析的利器--valgrind的callgrind>中,我们领略了valgrind对流程和性能瓶颈分析的强大能力.本文将介绍拥有相似能力的gperftools ...
- 动态执行流程分析和性能瓶颈分析的利器——valgrind的callgrind
在<内存.性能问题分析的利器--valgrind>一文中我们简单介绍了下valgrind工具集,本文将使用callgrind工具进行动态执行流程分析和性能瓶颈分析.(转载请指明出于brea ...
- 【网络安全】Metasploit生成的Shellcode的导入函数解析以及执行流程分析(2)
密码破解的利器--彩虹表(rainbow table) 确定 shellcode 依赖于哪些导入将使研究人员进一步了解其其余逻辑.不用动态分析shellcode,并且考虑到研究人员已经弄清楚了上面的哈 ...
- Mybatis执行流程分析_自定义简易Mybatis框架
自定义简易Mybatis框架 Mybatis执行流程分析 Mybatis代码编写流程: Mybatis配置文件加载过程: 需求分析及技术概述 根据上述的功能结构图, 得出如下需求: 1. 需要具有配置 ...
最新文章
- iOS UICollectionView实现瀑布流(3)
- 豆瓣FLASHMP3播放器
- weblogic oracle连接池配置文件,weblogic连接池的配置
- hdu 2196 叶子节点最长距离(树DP)
- c# Linq Where 抛出异常 导致 程序崩溃
- java学习之类型转换与越界
- 编译并运行Java文件
- 查看mysql下的内容
- 土木工程模板计算机专业,土木工程毕业论文答辩自述模板
- java中除数时刻0的异常_java中除数为0时出现的异常情况
- EF中一种简单的多条件动态查询方法
- 易趋携手电气风电,推进产品研发项目管理能力进阶
- 核心网在无线通信中的王者地位
- Python编程--个人信息修改小程序
- 信息项目管理师 高级软考 案例分析
- 生鲜电商现在难做最大的问题是什么
- 杭电2017单人排位赛2-B魔法宝石
- IDEA创建maven项目没有srcmainjava目录问题解决
- 如何对待新事物_面对新事物,我们该如何做选择?
- 去除文本中重复的数据行