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

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

JStorm源码分析文件

对于整个JStorm源码分析系列,我将JStorm源码分析的文件放在我的GitHub上JStorm源码剖析,欢迎大家fork和star

1 . 在 T o p o l o g y 的 任 务 提 交 中 ,最 后 调 用 S t o r m S u b m i t t e r 的 submitTopology方 法 将 任 务 提 交 给 nimbus;实际上,在StormSubmitter的submitTopology中,是NimbusClient通过RPC(远程过程调 用),调用Nimbus的submitTopologyWithOpts方法或者submitTopology方法。

这里写图片描述

2.submitTopology()方法是Nimbus 接口中的一个方法,其实现类有Servic eHandler,在 ServiceHandler的submitTopology()方法实现源码如下:

这里写图片描述

从 上 面 的 源 码 可 以 看 出 , 调 用 s u b m i t T o p o l o g y ( ) 方 法 , 只 是 多 了 一 步 把 SubmitOptions 参 数 设 置 为 的TopologyInitialStatus.ACTIVE过程,实际上,最终还是调 用submitTopologyWithOpts(name,uploadedJarLocation,jsonConf,topology,options)方法。

3.submitTopologyWithOpts()方法的源码如下:

这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
这里写图片描述
4.从submitTopologyWithOpts()方法的源码可以看出,nimbus的任务分配做了以下两步。

(1)将bolt或spout的任务信息写入到zookeeper中 // STONE_NOTE 在zookeeper中为每一个bolt或spout生成任务信息/ZK/tasks/topoologyId/xxx setupZkTaskInfo(conf, topologyId, stormClusterState);

(2)将任务信息放入到队列中,makeAssignment(topologyName, topologyId, options.get_initial_status());

这里写图片描述

(3)调用TopologyAssign.push(assignEvent)方法,放入队列中。

这里写图片描述
这里写图片描述
(4)TopologyAs ign中开启一条线程,在其run()方法中,不停的从消息队列中获取消息
这里写图片描述

(5)在run()方法中,调用doT opologyAssignment()方法,将获取到的任务事件消息进行任务分配。

这里写图片描述
这里写图片描述

(6)在mkAssignment()方法中,进行分配

这里写图片描述

这里写图片描述

(7)Scheduler调用scheduler.assignTasks (context)的方法,进行集群模式的任务分配

这里写图片描述

这里写图片描述

这里写图片描述

(8)在这个taskScheduler.assign()方法中,进行每个worker中运行的Task的数量分配

这里写图片描述

这里写图片描述

(9)在getRestAssignedWorkers中实现每个worker中的task平均分配的原则

这里写图片描述

(10)最终,在TaskAssignContext的构造函数中,实现对Worker的Task数量进行平均分配的原则

这里写图片描述

这里写图片描述

5.Topology任务配置信息生成流程:

这里写图片描述

(1)setupZkTaskInfo的源码如下:

这里写图片描述

这里写图片描述

调 用 mkTaskComponentAssignments方 法 , 获 取 T a s k 之 间 任 务 信 息 , 放 入 到 M a p 中 。
(2)mkTaskComponentAssignments的源码如下:

这里写图片描述
(3)mkTaskInfo的源码如下:

这里写图片描述

(4)mkTaskMaker源码如下:

这里写图片描述

这里写图片描述

这里写图片描述

最终将任务配置信息放入stormClusterState.set_task(topologyId,taskToTaskInfo)中。

至此,nimbus的任务分配过程完成!

相关系列文章

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

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

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

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

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

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

微信公众号

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值