JStorm源码分析(四):Storm集群启动过程
JStorm源码分析文件
对于整个JStorm源码分析系列,我将JStorm源码分析的文件放在我的GitHub上JStorm源码剖析,欢迎大家fork和star
1.Nimbus的启动过程
(1)Nimbus 的启动脚本命令:bin/storm nimbus 实际调用过程:
storm脚本中的main方法---->调用 def nimbus---->exec_storm_class 在exec_storm_class中,最终调用java命令,即:
java -server backtype.storm.daemon.nimbus----->执行NimbusServer的main方法。
(2)NimbusServer的main方法源码如下:
(3)在NimbusServer的main方法中,调用launchServer()启动nimbus
(4)launchServer中的init()方法
(5)initTopologyStatus ()方法源码如下:
至此,nimbus的启动过程完成!
2.Supervisor的启动过程
(1)Supervisor 的启动脚本命令:bin/storm supervisor
实际调用过程:
storm脚本中的main方法---->调用 def supervisor ---->exec_storm_class
在exec_storm_class中,最终调用java命令,即:
java -server backtype.storm.daemon.supervisor----->执行Supervisor的main方法。
(2)Supervisor的main方法中,创建Supervisor的实例,并调用其run()方法。
(3)在run()方法中调用mkSupervisor(conf,null)方法启动Supervisor。
清理Supervisor本地临时目录
获取Zookeeper的客户端操作实例对象
创建LocalStat的key-value本地数据库
使用UUID生成一个Supervisor的id,并放入到LocalStat的key-value本地数据库中
移除LocalStat中的"lcoal-zk-assignment-version"和"local-zk-assignments"信息
创建Supervisor的心跳对象,设置Supervisor的心跳时间
supervisor.heartbeat.frequency.secs,并将Supervisor的信息写入Zookeeper中
将心跳同步到Nimbus和Apsara容器
创建和启动Supervisor的同步线程,每隔supervisor.monitor.frequency.secs秒,运行一次 Supervisor的同步线程
检查Supervisor是否运行正常
最 后 , 返 回 一 个 S u p e r v i s o r Ma n g e r , S u p e r v i s o r Ma n g e r 能 够 停 止 所 有 的 S u p e r v i s o r 和 W o r k e r
源码如下:
至此,Supervisor的启动过程完成!
相关系列文章
JStorm源码分析(六)Supervisor启动Worker的过程
微信公众号
有兴趣的同学可以关注小编哟!