目录

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执行流程分析(四)相关推荐

  1. Apache DolphinScheduler v2.0.1 Master 和 Worker 执行流程分析系列(三)

    点亮 ⭐️ Star · 照亮开源之路 https://github.com/apache/dolphinscheduler 这是一系列关于 DolphinScheduler v2.0.1的源码分析文 ...

  2. dolphinscheduler v2.0.1 master和worker执行流程分析(一)

    前言 以下是基于海豚v2.0.1源码分析得出的图解:master和worker执行流程. 后面所有的讲解都是围绕这一张图,所以在看讲解时,请参考整个图去理解.讲解思路是化整为零,积点成线,集线成面. ...

  3. mysql 8.0 一条insert语句的具体执行流程分析(三)

    代码版本:mysql 8.0.22 编程语言:c++ && c++11 && c++14 && c++17 上一篇文章:mysql 8.0 一条inse ...

  4. mysql 8.0 一条insert语句的具体执行流程分析(二)

    继续上一篇文章:mysql 8.0 一条insert语句的具体执行流程分析(一)_一缕阳光的博客-CSDN博客 由于最近换工作一直在试用期内,在拼命的学习.总结中,因此没有时间写文章,今天转正了腾出来 ...

  5. Java多线程- 线程池的基本使用和执行流程分析 - ThreadPoolExecutor

    线程池的实现原理 池化技术 一说到线程池自然就会想到池化技术. 其实所谓池化技术,就是把一些能够复用的东西放到池中,避免重复创建.销毁的开销,从而极大提高性能. 常见池化技术的例如: 线程池 内存池 ...

  6. 动态执行流程分析和性能瓶颈分析的利器——gperftools的Cpu Profiler

    在<动态执行流程分析和性能瓶颈分析的利器--valgrind的callgrind>中,我们领略了valgrind对流程和性能瓶颈分析的强大能力.本文将介绍拥有相似能力的gperftools ...

  7. 动态执行流程分析和性能瓶颈分析的利器——valgrind的callgrind

    在<内存.性能问题分析的利器--valgrind>一文中我们简单介绍了下valgrind工具集,本文将使用callgrind工具进行动态执行流程分析和性能瓶颈分析.(转载请指明出于brea ...

  8. 【网络安全】Metasploit生成的Shellcode的导入函数解析以及执行流程分析(2)

    密码破解的利器--彩虹表(rainbow table) 确定 shellcode 依赖于哪些导入将使研究人员进一步了解其其余逻辑.不用动态分析shellcode,并且考虑到研究人员已经弄清楚了上面的哈 ...

  9. Mybatis执行流程分析_自定义简易Mybatis框架

    自定义简易Mybatis框架 Mybatis执行流程分析 Mybatis代码编写流程: Mybatis配置文件加载过程: 需求分析及技术概述 根据上述的功能结构图, 得出如下需求: 1. 需要具有配置 ...

最新文章

  1. iOS UICollectionView实现瀑布流(3)
  2. 豆瓣FLASHMP3播放器
  3. weblogic oracle连接池配置文件,weblogic连接池的配置
  4. hdu 2196 叶子节点最长距离(树DP)
  5. c# Linq Where 抛出异常 导致 程序崩溃
  6. java学习之类型转换与越界
  7. 编译并运行Java文件
  8. 查看mysql下的内容
  9. 土木工程模板计算机专业,土木工程毕业论文答辩自述模板
  10. java中除数时刻0的异常_java中除数为0时出现的异常情况
  11. EF中一种简单的多条件动态查询方法
  12. 易趋携手电气风电,推进产品研发项目管理能力进阶
  13. 核心网在无线通信中的王者地位
  14. Python编程--个人信息修改小程序
  15. 信息项目管理师 高级软考 案例分析
  16. 生鲜电商现在难做最大的问题是什么
  17. 杭电2017单人排位赛2-B魔法宝石
  18. IDEA创建maven项目没有srcmainjava目录问题解决
  19. 如何对待新事物_面对新事物,我们该如何做选择?
  20. 去除文本中重复的数据行

热门文章

  1. GPT-4的黑箱运作方式引科学家不满
  2. node-sass配置淘宝镜像仓库不生效解决办法
  3. HCIE安全笔试-H12-731 V2.0 多选题解析
  4. linux 设置ntp时间同步服务器,Linux配置ntp时间同步服务器
  5. Grunt - imagemin图像压缩
  6. 第五话·数据结构必看之·栈 真的这么简单?
  7. Unity3D显示中文字体
  8. 【Web】JavaScript实现九九乘法表格
  9. php经纬度之间的距离计算公式,php计算两个经纬度地点之间距离的方法分享
  10. 两轮差速运动模型推导