【云计算】storm任务提交流程实例图文教程
小标 2019-01-07 来源 : 阅读 1228 评论 0

摘要:本文主要向大家介绍了【云计算】storm任务提交流程实例图文教程,通过具体的内容向大家展现,希望对大家学习云计算有所帮助。

本文主要向大家介绍了【云计算】storm任务提交流程实例图文教程,通过具体的内容向大家展现,希望对大家学习云计算有所帮助。

storm的任务提交流程为storm知识点中的重点,因此,笔者将这些资料单独拿出来,做一次记录。


下图为总体的数据流程:


构建四台服务器,上面会建立管理员,叫做nimbus,用来协调任务、分配任务; 在下面的各个服务器上构建supervisor,用来处理数据;在supervisor上会启动对应的worker,每个worker对应一个端口:6700、6701、6702;每个机器都一致。 Client提交任务是将其提交给nimbus,由nimbus分配任务:首先nimbus会获取空闲worker的信息,然后根据并发数分配任务(topology会产生任务信息:有一个并发数为myspout为2,mybolt1为2,mybolt2为4,worker为2等,共形成8个task,每个worker中有8/2=4个,即每个worker上有4个线程,task的划分是用taskid去取模来分配),分配完成后,将这些信息放在zk上。 Supervisor中会通过watcher监听zk,topology中有三个任务类型,myspout、mybolt1、mybolt2三种,这三种类型会分配给2个worker,如上图的前两个supervisor,此时第三个supervisor会空闲; 当这个数据分配好后,开始连接外部数据源,然后开始运作,myspout连接外面的datasource,myspout随机发的话数据会通过myspout发送给两个bolt1(在两台服务器上),在bolt1上将sentence切分开,形成一个个单词,bolt1将数据分给bolt2的时候是按照field进行的,相同的单词会给到同一个bolt2上。

针对上面的解释,可以在底层的角度重新描述storm的结构为:


接下来对上面的图形进行详细解释:


(一)Storm启动流程解析:


1、客户端运行storm nimbus时,会调用storm的脚本,生成一条java命令;


命令格式如下:java -server xxxx.classname -args;


Nimbus---àRunning:/export/servers/jdk/bin/java -server backtype.storm.daemon.nimbus


Supervisor-àRunning:/export/servers/jdk/bin/java


-server backtype.storm.daemon.supervisor


2、nimbus启动之后,接受客户端提交的任务;


命令格式为:storm jar xxx.jar xxx驱动类 参数


Running:/export/servers/jdk/bin/java


-client


-Dstorm.jar=/export/servers/storm/examples/storm-starter/storm-starter-topologies-0.9.6.jar


storm.starter.WordCountTopology wordcount-28


该命令会执行storm-starter-topologies-0.9.6.jar中的main方法,main方法中会执行以下代码:


Stormsubmitter.SubmitTopology(“mywordcount”, config, topologyBuilder.createTopology());


topologyBuilder.createTopology():会将程序员编写的spout对象和bolt对象进行序列化。


会将用户的jar上传到nimbus物理节点的/export/data/storm/workdir/nimbus/inbox目录下,并且改名,改名的规则是添加了一个UUID字符串。


在nimbus物理节点的/export/data/storm/workdir/nimbus/stormdist目录下,有当前正在运行的topology的jar包和配置文件,序列化对象文件。


3、接受到任务之后,会将任务进行分配,分配会产生一个assignment对象,该对象会保存在zk中,目录是/storm/assignments/,该目录只保存正在运行的topology任务。具体的保存信息为:


通过上面的步骤,storm会将分配的任务存储在zk中,等待supervisor进行调用。


(二)supervisor的运行过程:


4、supervisor通过watch机制,感知到nimbus在zk上的任务分配信息,从zk上拉去任务信息,分辨出属于自己的任务,即从assignments中找到worker信息。


5、根据自己的任务信息,启动自己的worker,并分配一个端口号。


在启动worker的时候会进入到:


‘export /data/storm/workdir/supervisor/stormdist/wordcount-3-1461683066/stormjar.jar’


然后执行对应的命令:


‘export/servers/jdk/bin/java’ ‘-server’ ‘-Xmx768m’


‘export /data/storm/workdir/supervisor/stormdist/wordcount-3-1461683066/stormjar.jar’


‘backtype.storm.daemon.worker’ ‘wordcount-3-1461683066’


‘a69bb8fc-e08e-b51f-e539b066f90b’ ‘6701’ ‘9fac2805-7d2b-4e40-aabc-1c859856d64’


从这个目录中可以看到,这个目录中有三个文件是从nimbus中获取到的,放到这个目录中。


启动stormjar.jar文件中的如下的worker:


wordcount-3-1461683066后面的字符串a69bb8fc-e08e-b51f-e539b066f90b为UUID。


6、worker启动之后可以连接zookeeper,进入到/storm/assignments/目录中从中拉取任务。


这个worker会根据task中的任务类型进行分配:


假设任务信息为:


1----àspout----type:spout;


2----àbolt-----type:bolt;


3----àacker----type:bolt;


然后storm根据任务创建对象,创建对象的方式有几种?


New classname :创建对象;


Class.forname :反射对象;


还有克隆对象、序列化反序列化对象;


得到程序员自己定义的spout和bolt对象。


7、worker根据任务类型,分别执行spout任务和bolt任务;


spout的声明周期是:openànextTupleàoutfield;


bolt的生命周期是:prepareàexecute(tuple)àoutputfield;


(三)如何指定驱动类中每个组件的并发度数量?如何设置worker的数量?


并发即为上面每个值的数量。


1、根据上游的数据量来设置spout的并发度;


2、根据业务复杂度和execute方法执行时间来设置bolt并发度;


3、根据集群的可用资源来配置,一般情况下70%的资源使用率;


4、worker的数量理论上根据程序并发度总的task数量来均分,在实际的业务场景中,需要反复调整;


补充:


一个worker进程会有细节的分析:


有两个问题:


1、UUID是什么?


在zk中,worker启动端口号的时候,就将uuid与端口号的对应关系分配好了,然后存储到suporvisor中。


2、一个worker分出的多个进程是什么?


在worker的pids目录下有多个进程,这几个进程中:第一个为jps worker的;


后面是如果这个worker启动过其他进程,此处会显示进程号;

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标大数据云计算大数据安全频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式AI+学习就业服务平台 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved