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 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值