JStorm源码分析(六)Supervisor启动Worker的过程

JStorm源码分析(六):Supervisor启动Worker的过程

JStorm源码分析文件

对于整个JStorm源码分析系列,我将JStorm源码分析的文件放在我的GitHub上JStorm源码剖析,欢迎大家fork和star
Worker的启动是在Supervis or获取任务的过程中完成的:

1.Supervisor启动后,SyncSupervisorEvent会定时的循环扫描Zookeeper的任务分配目录,看是否 有自己的任务,如果有,那么把对应的信息写到本地(Supervisor)机器的指定目录中,这个工作 主要是有SyncSupervisorEvent 线程中的run方法来完成的。在SyncSupervisorEvent 线程的run方 法 中 , 最 后 给 p r o c e s s E v e n t Ma n a g e r 添 加 一 个 s y n c P r o c e s s e s 事 件 , 而 W o r k e r 的 创 建 和 启 动 就 是 在 syncProcesses的run方法中完成的。

2.在syncProcesses的run方法中调用startNewWorkers()方法,启动新的Worker。

这里写图片描述

3.在startNewWorkers()方法中,生成新的worker id、创建新的worker目录,调用launchWorker()方 法启动worker

这里写图片描述

这里写图片描述

这里写图片描述

4.集群模式下,在launchWorker()方法中,拼接java命令,启动Worker
这里写图片描述
(1)launchWorker()方法调用java命令,启动worker的过程,首先是调 用JStormUtils.launchProcess()
这里写图片描述

(2)在launchProcess()方法中,拆分并组装命令,然后调用launchProcess(command, cmdList, environment, backend)方法
这里写图片描述

这里写图片描述

(3)最后调用jdk的launchProcess(cmdWrapper, environment)方法,执行命令,启动worker

这里写图片描述

(5)通过ProcessBuilder执行一条命令 java -server backtype.storm.daemon.worker 调用Worker 的main方法,在main方法中调用mk_worker()方法。

以下的流程与本地模式的启动方式一致。

5.在本地模式下,调用W orker类的mk_worker()方法,启动worker

这里写图片描述

6.在W orker类的mk_worker()方法中,拼装worker的相关信息,创建worker实例对象,并调用其 execute()方法

这里写图片描述

相关系列文章

JStorm源码分析(一)Storm执行脚本

JStorm源码分析(二)Storm任务提交流程

JStorm源码分析(三)Nimbus的任务分配过程

JStorm源码分析(四)Storm集群启动过程

JStorm源码分析(五)Supervisor获取任务

JStorm源码分析(七)Excutor启动和创建

微信公众号

有兴趣的同学可以关注小编哟!
这里写图片描述

猜你喜欢

转载自blog.csdn.net/oeljeklaus/article/details/80992642