Druid middleManager如何获取task信息并启动Peon进程
前言
继前一篇文章关于task被overload分配到zk上的流程分析,那么MiddleManager又是如何获取到zk上的task信息并启动Peon来真正运行起task的呢?
上图
overload将task信息放到zk上之后,middleManager会有监听管理器WorkerTaskMonitor, 该监听管理器会启动一个操作zk的类PathChildrenCache来持续监听zk相关路径下的信息变动。 middlemanager获取到task后,对task进行反序列化形成task对象放入WorkerTaskMonitor管理的一个map中并开始提交关于运行task的任务。在运行task之前会更新zk相关路径下关于该task的状态供overload关注。
middlemanager会启动一个线程组装java启动进程的参数,然后通过一个可以创建子进程的工具java.lang.Process来启动java进程。
上代码
首先从WorkerTaskMonitor进入,此类的start()方法是middleManager的入口, 一方面初始化各种组件并创建线程启动,另一方面启动关于监听zk路径的任务持续监测有无新的task被分配到当前middleManager上。
进入监听zk的方法,当发现有task信息后会触发childEvent()方法, 第一步就是先将task信息进行反序列化成task对象,然后发布task.
在发布task的方法中,检查该task的状态,判断是否运行或者完成。并将task信息本地持久化。然后启动新的线程去创建peon.
调用TaskRunner来发布task, 此处的TaskRunner是ForkingTaskRunner, 是启动middlemanager是注入的。和overload使用的RomoteTaskRunner不同。ForkingTaskRunner用于fork一个子进程即Peon的。然后更新下task的状态到zk以及缓存中。
在ForkTaskRunner的run方法中提交了一个线程进行异步组装关于启动Peon的参数以及其他准备工作。最后由java.lang.Process类提交一个进程。该方法中组装的参数比较多,下面只截取部分看下流程。
至此Peon已经启动起来了,当然了,在这个过程中有很多关于状态的记录判断工作没有展开详述。只是将这个大体的流转框架描述了一下。
然后Peon启动后会注入ExecutorLifecycle开始运行,以及SingleTaskBackgroundRunner提交了一个线程去调用task的运行。
进入SingleTaskBackgroundRunnerCallable之后就能真正的看到task的执行地方了。task启动的过程的一级如何读取数据形成segment的过程在下一篇描述。
END
Druid middleManager如何获取task信息并启动Peon进程相关推荐
- Python获取磁盘使用信息,python获取GPU信息,python根据进程号获取进程信息,pynvml 获取GPU信息,psutil 获取进程信息,系统信息等
一.工具:psutil模块 psutil是一个跨平台模块,试用相应方法可以直接获取计算机CPU,内存,磁盘,网络等资源使用情况:可以使用我们学习知识与这模块用来做系统监控,性能分析:如果大家熟悉Lin ...
- Android之如何获取手机程序列表以及程序相关信息并启动指定程序
效果图: 程序列表: 启动程序,获取程序信息: 代码如下: 创建一个AppInfo类来表示应用程序 <pre name="code" class="java&quo ...
- kill -3 获取threaddump信息---转载
有些Java应用服务器是在控制台上运行,如Weblogic,为了方便获取threaddump信息,在weblogic启动的时候,会将其标准输出重 定向到一个文件,用"nohup ./star ...
- ios获取设备信息总结
本文转载至 http://blog.csdn.net/decajes/article/details/41807977 1.获取设备的信息 [objc] view plaincopy UIDevice ...
- socket 获取回传信息_Luat系列官方教程5:Socket代码详解
文章篇幅较长,代码部分建议横屏查看,或在PC端打开本文链接.文末依然为爱学习的你准备了专属福利~ TCP和UDP除了在Lua代码声明时有一些不同,其他地方完全一样,所以下面的代码将以TCP长连接的数据 ...
- java读取对象失败_jsp exception对象获取异常信息
获取异常信息的exception对象 exception内置对象用来处理JSP文件执行时发生的所有错误和异常.exception对象和Java的所有对象一样,都具有系统的继承结构,exception对 ...
- crashdumpandroid_Android 中Crash时如何获取异常信息详解及实例
Android 中Crash时如何获取异常信息详解 前言: 大家都知道,Android应用不可避免的会发生crash,无论你的程序写的多完美,总是无法完全避免crash的发生,可能是由于Android ...
- 微信公众号开发之授权获取用户信息
微信开发交流群:148540125 系列文章参考地址 极速开发微信公众号 欢迎留言.转发.打赏 项目源码参考地址 点我点我--欢迎Start 前几篇文章已讲完如何导入项目,如何启动配置项目,如何成为开 ...
- Eureka获取注册信息
本文来说下Eureka获取注册信息 文章目录 Eureka-Client获取信息 启动获取 定时器获取 获取注册信息 全量获取 增量获取 合并数据 Eureka-Server接收请求 控制器接收请求 ...
最新文章
- 数字营销,带动汽车销量增长
- C1之路 | 备考C1
- python中mat函数_python matplotlib中的subplot函数使用详解
- 鼠标linux驱动安装失败,win7插入鼠标提示未能成功安装设备驱动程序怎么办
- iOS 数据持久化 NSUserDefault
- $(document).ready(function(){}),$().ready(function(){})和$(function(){})三个有区别么
- python django 网页 html \n不换行
- linux chmod 命令理解
- Android主备域名切换实施方案(Ping工具Demo)
- python实现3d建模工具_Python实现3D建模工具
- 高级Bash脚本编程指南——一本深入学习shell脚本艺术的书籍
- simulink入门
- 软件开发工具【十四】 之 常用建模工具
- 在Excel中输入身份证号码的方法或批量改为文本格式
- jQuery漂浮横幅图片广告代码
- 通过Docker安装L2TP
- :Pearl Pairing
- word恢复忘记保存的文档
- LoRa Gateway 笔记 3.1.3 帮助程序 util_pkt_logger 进行 LoRa 空口抓包
- [渝粤教育] 中原工学院 互换性与测量技术基础 参考 资料