Storm启动流程分析
1、客户端运行storm nimbus时,会调用storm的python脚本,该脚本中为每个命令编写一个方法,
每个方法都可以生成一条相应的Java命令。
2、nimbus启动之后,接收客户端提交任务
该命令会执行storm-starter-topologies-o.9.6.jar 中的storm-starter-topologies-o.9.6.jar的main方法,main方法中会执行以下代码:
stormSubmitter.submitTopology ("mywordcount",config,topologyBuilder.createTopology () );
topologyBuilder.createTopology (),会将程序猿编写的pout对象和bolt对象进行序列化。
会将用户的jar上传到nimbus物理节点的/export/data/storm/workdir/nimus/inbox目录下。并且改名,改名的规则是添加了一个UUID字符串。
在nimbus物理节点的/export/data/storm/workdir/nimbus/stormdist 目录下。有当前正在运行的topology的jar包和配置文件,序列化对象文件。
3、接受到任务之后,会将任务进行分配,分配会产生一个assignment对象,该对象会保存到zk中目录是/storm/assignment,
该目录值保存正在运行的topology任务
4、supervisor通过watch机制,感知nimbus在zk上的任务分配信息,从zk上拉取任务信息,分辨出属于自己任务。
5、supervisor 根据自己的任务信息,启动自己的worker,并分配一个端口。
6、worker启动之后,来连接zk,拉取任务
7、worker根据任务类型,分别执行spout任务或者bolt任务
spout的声明周期是:open、nextTuple、outPutFiled
bolt的生命周期是:prepare、execute(tuple)、outPutFiled
1、客户端运行storm nimbus时,会调用storm的python脚本,该脚本中为每个命令编写一个方法,
每个方法都可以生成一条相应的Java命令。
2、nimbus启动之后,接收客户端提交任务
该命令会执行storm-starter-topologies-o.9.6.jar 中的storm-starter-topologies-o.9.6.jar的main方法,main方法中会执行以下代码:
stormSubmitter.submitTopology ("mywordcount",config,topologyBuilder.createTopology () );
topologyBuilder.createTopology (),会将程序猿编写的pout对象和bolt对象进行序列化。
会将用户的jar上传到nimbus物理节点的/export/data/storm/workdir/nimus/inbox目录下。并且改名,改名的规则是添加了一个UUID字符串。
在nimbus物理节点的/export/data/storm/workdir/nimbus/stormdist 目录下。有当前正在运行的topology的jar包和配置文件,序列化对象文件。
3、接受到任务之后,会将任务进行分配,分配会产生一个assignment对象,该对象会保存到zk中目录是/storm/assignment,
该目录值保存正在运行的topology任务
4、supervisor通过watch机制,感知nimbus在zk上的任务分配信息,从zk上拉取任务信息,分辨出属于自己任务。
5、supervisor 根据自己的任务信息,启动自己的worker,并分配一个端口。
6、worker启动之后,来连接zk,拉取任务
7、worker根据任务类型,分别执行spout任务或者bolt任务
spout的声明周期是:open、nextTuple、outPutFiled
bolt的生命周期是:prepare、execute(tuple)、outPutFiled