文档章节

jstorm源码阅读(2) —— supervisor简介

纳兰清风
 纳兰清风
发布于 2017/02/16 20:03
字数 640
阅读 72
收藏 0

jstorm源码阅读(2)—— supervisor简介


模块功能

  • Heartbeat 模块用于汇报supervisor心跳信息,包括hostname,workerports,current time和during time等信息,被AsyncLoopThread封装后默认每隔60s一次。

  • SyncContainerHb 向类似Apsara或Yarn的资源调度框架汇报容器心跳

  • SyncProcessEvent 由SyncSupervisorEvent调用,在run方法中根据传递进来的分配信息和Topology id来kill or start workers。

  • EventManagerImp 从队列中取出事件并执行,that's all。

  • SyncSupervisorEvent 内部组件包括SyncProcessEvent,EventManager,StormClusterState,LocalState,Heartbeat。 run方法是其唯一执行入口,执行过程如下:

  1. 实例化EventManagerZkPusher
RunnableCallback syncCallback = new EventManagerZkPusher(this, syncSupEventManager);
  1. 分别以lcoal-zk-assignment-version和lcoal-zk-assignment为key从LocalState中获取task分配信息的快照。
Map<String, Integer> assignmentVersion = (Map<String, Integer>) localState.get(Common.LS_LOCAL_ZK_ASSIGNMENT_VERSION);
if (assignmentVersion == null) {
    assignmentVersion = new HashMap<String, Integer>();
}
Map<String, Assignment> assignments = (Map<String, Assignment>) localState.get(Common.LS_LOCAl_ZK_ASSIGNMENTS);
if (assignments == null) {
    assignments = new HashMap<String, Assignment>();
}
  1. 将zk中的任务分配信息同步到内存。
  2. 获取本地已经下载了的jar包的topology id.
  3. 过滤出需要本supervisor节点执行的task,并保证每个端口唯一分配给一个task。
  4. 把过滤出的本节点任务信息以local-assignments为key写入到LocalState中。
  5. 从zk中获取所有topology id和其对应的代码存放路径,并下载。
  6. 删除掉本地无用的topology代码。
  7. 以需要本节点运行的任务信息为参数调用SyncProcessEvent的run方法来启动topology。
  8. 设置心跳开关为true。 但是有个疑问是这个run方法是谁触发的呢?我们注意到有这样一行代码:
RunnableCallback syncCallback = new EventManagerZkPusher(this, syncSupEventManager);
...
getAllAssignments(assignmentVersion, assignments, syncCallback);

代码中的syncSupEventManager就是EventManagerImp,而EventManagerZkPusher的回调方法就是把this加入到EventManagerImp的队列中然后在另一个线程中由EventManagerImp完成this.run方法的调用。那么EventManagerZkPusher的回调方法是在哪里触发的呢,我们注意到在获取task的发布信息的时候有把syncCallback作为参数传递进去,注册到StormClusterState中,查看StormZkClusterState的构造函数会发现他向zk中注册了一个全局的回调函数,在触发该回调函数时根据参数的不同来选择具体应该回调哪一个RunnableCallback。

  • EventManagerPusher 构造函数以SyncSupervisorEvent和EventManagerImpl为参数,用来把SyncSupervisorEvent时间放入EventManagerImpl的队列中,使用AsyncLoopThread循环执行。
  • HttpServer 主要提供日志查看功能

OK,以上就是supervisor内部一些模块的简单介绍,总体来说就是以EventManagerPusher和zk事件来驱动一个多线程事件驱动模型。

© 著作权归作者所有

纳兰清风

纳兰清风

粉丝 33
博文 36
码字总数 37100
作品 0
朝阳
程序员
私信 提问
JStorm 入门(二) 启动

在nimbus 节点上执行 “nohup jstorm nimbus &”, 查看$JSTORM_HOME/logs/nimbus.log检查有无错误 在supervisor节点上执行 “nohup jstorm supervisor &”, 查看$JSTORM_HOME/logs/superviso......

atkone
2014/08/26
1K
0
JStorm 2.1.1 发布,分布式计算系统

Storm 是一个类似Hadoop MapReduce的系统, 用户按照指定的接口实现一个任务,然后将这个任务递交给JStorm系统,Jstorm将这个任务跑起来,并且按7 * 24小时运行起来,一旦中间一个worker 发生...

淡漠悠然
2016/03/07
2.3K
6
Storm 和JStorm

关于流处理框架,在先前的文章汇总已经介绍过Strom,今天学习的是来自阿里的的流处理框架JStorm。简单的概述Storm就是:JStorm 比Storm更稳定,更强大,更快,Storm上跑的程序,一行代码不变...

止静
2014/08/30
9.6K
1
JStorm 2.2.1 发布,分布式计算系统

JStorm 2.2.1 发布,更新内容如下: 新功能 Performance is improved by 200%~300%, compared to Release 2.1.1 and 0.9.8.1 in several testing scenarios, while 120%~200% compared to Fl......

淡漠悠然
2017/01/10
2.4K
2
JStorm-Alibaba —— Storm 的实时流式计算框架

JStorm是参考storm的实时流式计算框架,在网络IO、线程模型、资源调度、可用性及稳定性上做了持续改进,已被越来越多企业使用。经过4年发展,阿里巴巴JStorm集群已经成为世界上最大的集群之一...

局长
2016/10/02
961
0

没有更多内容

加载失败,请刷新页面

加载更多

计算机实现原理专题--二进制减法器(二)

在计算机实现原理专题--二进制减法器(一)中说明了基本原理,现准备说明如何来实现。 首先第一步255-b运算相当于对b进行按位取反,因此可将8个非门组成如下图的形式: 由于每次做减法时,我...

FAT_mt
昨天
6
0
好程序员大数据学习路线分享函数+map映射+元祖

好程序员大数据学习路线分享函数+map映射+元祖,大数据各个平台上的语言实现 hadoop 由java实现,2003年至今,三大块:数据处理,数据存储,数据计算 存储: hbase --> 数据成表 处理: hive --> 数...

好程序员官方
昨天
7
0
tabel 中含有复选框的列 数据理解

1、el-ui中实现某一列为复选框 实现多选非常简单: 手动添加一个el-table-column,设type属性为selction即可; 2、@selection-change事件:选项发生勾选状态变化时触发该事件 <el-table @sel...

everthing
昨天
6
0
【技术分享】TestFlight测试的流程文档

上架基本需求资料 1、苹果开发者账号(如还没账号先申请-苹果开发者账号申请教程) 2、开发好的APP 通过本篇教程,可以学习到ios证书申请和打包ipa上传到appstoreconnect.apple.com进行TestF...

qtb999
昨天
10
0
再见 Spring Boot 1.X,Spring Boot 2.X 走向舞台中心

2019年8月6日,Spring 官方在其博客宣布,Spring Boot 1.x 停止维护,Spring Boot 1.x 生命周期正式结束。 其实早在2018年7月30号,Spring 官方就已经在博客进行过预告,Spring Boot 1.X 将维...

Java技术剑
昨天
18
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部