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()方法
相关系列文章
微信公众号
有兴趣的同学可以关注小编哟!