Supervisor由三个线程组成,一个计时器线程和两个事件线程.

  • 计时器线程负责维持心跳已经更新Zookeeper中的状态,还负责每隔一定的时间将事件线程需要执行的事件添加到其对应的队列中.
  • 两个事件线程分别负责与Nimbus同步任务和根据任务变化同步管理Worker进程.

相关数据结构图:

 

 

同步Nimbus的事件线程

执行流程图:

 

方法原型:

(defn mk-synchronize-supervisor [supervisor sync-processes event-manager process-event-manager])

参数说明:

Supervisor:supervisor-data对象。

Sync-processes:mk-supervisor中定义的用于同步当前supervisor启动的Worker的方法。

Event-manager:mk-supervisor中定义的用于运行mk-synchronize-supervisor方法的线程。

Process-event-manager:mk-supervisor中定义的运行sync-processes方法的线程。

方法说明:

  1. 获取supervisor中的配置信息,storm-local-cluster,isupervisor和local-state对象.
  2. 定义sync-callback方法,将mk-synchronize-supervisor方法再次加入到Nimbus任务的事件现场中执行,该方法用来在进行Zookeeper操作时设置回调方法,当Zookeeper中的内容发送变化时也会调用该方法.
  3. 调用read-storm-code-locations方法获取<storm-id,master-code-location>集合保存到storm-code-map.
  4. 调用read-downloaded-storm-ids方法获取当前已经下载Topology对应的storm id信息.
  5. 调用read-assignments方法获取分配给当前Supervisor的任务信息,返回<poer,LocalAssignment>集合保存给new-assignment.
  6. 调用assigned-storm-ids-from-port-assignments获取new-assignment中的storm-id,保存到assigned-storm-ids.
  7. 获取local-state中保存的LS-LOCAL-ASSIGNMENTS信息做为existing-assignment,<port,Assignment>.
  8. 调用download-storm-code下载当前已经分配给该Topology但还没下载到本地的Topology信息.
  9. 计算出属于existing-assignment但不属于new-assignment的端口信息,调用isupervisor的killedWorker方法关闭这些端口。
  10. 调用isupervisor的assigned方法设置新分配的端口信息.
  11. 更新local-state中保存的LS_LOCAL_ASSIGNMENT信息,设置为new-assignment.
  12. 更新supervisor-data中的curr-assignment信息,设置为new-assignment.
  13. 移除本地已下载但已不在assigned-storm-ids中的Topology.
  14. 将sync-process方法添加到process-event-manager中执行.

Storm系列(九)架构分析之Supervisor-同步Nimbus的事件线程的更多相关文章

  1. Storm系列(七)架构分析之Scheduler-调度器[DefaultScheduler]

    Storm默认的任务调度器.实现如下: 1  (defn –prepare [this conf]) 2  (defn –schedule [this ^Topologies topologies ^ ...

  2. Storm系列(五)架构分析之Nimbus启动过程

    启动流程图   mk-assignments 功能:对当前集群中所有Topology进行新一轮的任务调度. 实现源码路径: \apache-storm-0.9.4\storm-core\src\clj ...

  3. Nimbus<一>Storm系列(五)架构分析之Nimbus启动过程

    启动流程图 mk-assignments 功能:对当前集群中所有Topology进行新一轮的任务调度. 实现源码路径: \apache-storm-0.9.4\storm-core\src\clj\b ...

  4. Storm系列(十一)架构分析之Supervisor-管理Worker进程的事件线程

    处理流程:   方法原型: (defn sync-processes [supervisor]) 函数说明: Supervisor是一个supervisor-data对象. 从local-state中 ...

  5. Storm系列(六)架构分析之Scheduler-调度器[EventScheduler]

    任务调度接口定义: 1  IScheduler{ 2      // conf为当前nimbus的stormp配置 3  void prepare(Map conf); // 初始化 4  // to ...

  6. Storm系列(十三)架构分析之Worker-维护ZMQ连接

    Worker根据Topology的定义及分配到自身的任务情况,计算出发出的消息被那些Task接收,由于Worker上分配的任务可能被调整,因此Worker需要定时的更新这些连接信息. ZMQ连接信息更 ...

  7. Qualcomm Android display架构分析

    Android display架构分析(一) http://blog.csdn.net/BonderWu/archive/2010/08/12/5805961.aspx http://hi.baidu ...

  8. 高通Android display架构分析

    目录(?)[-] Kernel Space Display架构介绍 函数和数据结构介绍 函数和数据结构介绍 函数和数据结构介绍 数据流分析 初始化过程分析 User Space display接口 K ...

  9. java多线程系列(九)---ArrayBlockingQueue源码分析

    java多线程系列(九)---ArrayBlockingQueue源码分析 目录 认识cpu.核心与线程 java多线程系列(一)之java多线程技能 java多线程系列(二)之对象变量的并发访问 j ...

随机推荐

  1. Django视图与网址传参

    目的:采用/add?a=1&b=2  这样get/post方法进行 修改一下mysite/views.py文件 from django.shortcuts import renderfrom ...

  2. 关于JS中的apply()与call()使用方法与区别

    Js apply方法详解我在一开始看到javascript的函数apply和call时,非常的模糊,看也看不懂,最近在网上看到一些文章对apply方法和call的一些示例,总算是看的有点眉目了,在这里 ...

  3. 导出Excel文件

    /// <summary> /// 类说明:Assistant /// 更新网站:[url=http://www.sufeinet.com/thread-655-1-1.html]http ...

  4. long([x[, base]]) :将一个字符转换为long类型

    python的int型最大值和系统有关,32位和64位系统看到的结果是不一样,分别为2的31次方减1和2的63次方减1,可以通过sys.maxint查看此值. >>> import ...

  5. 百度:在O(1)空间复杂度范围内对一个数组中前后连段有序数组进行归并排序

    一.题目理解 题目:数组al[0,mid-1]和al[mid,num-1]是各自有序的,对数组al[0,num-1]的两个子有序段进行merge,得到al[0,num-1]整体有序.要求空间复杂度为O ...

  6. XSS之学习误区分析

    有段时间没写东西了, 最近看到zone里出现了很多“XSS怎么绕过某某符号的帖子”,觉得很多新手在寻找XSS时走进了一些误区,比如:专门想着怎么去“绕过”.这里做个总结,希望对大家有所帮助. 1. 误 ...

  7. 开发安全的Web程序

    目录0x1:什么是安全的Web应用程序0x2:过滤输入的数据0x3:转义输出的数据0x4:Register Globals0x5:magic_quotes_gpc0x6:错误信息的报告0x7:文件的安 ...

  8. 对于 APM 用户的一次真实调查分析(下)

    一.前言 对 APM 用户的一次真实调查分析(上)中,我们主要聊到了现阶段国外 APM 行业对各个企业的渗透率.大部分使用 APM 工具的企业规模以及 APM 工具在用户心中的地位等问题,有兴趣的朋友 ...

  9. HDU 2844 Coins(多重背包)

    点我看题目 题意 :Whuacmers有n种硬币,分别是面值为A1,A2,.....,An,每一种面值的硬币的数量分别是C1,C2,......,Cn,Whuacmers想买钱包,但是想给人家刚好的钱 ...

  10. easyui源码翻译1.32--Slider(滑动条)

    前言 使用$.fn.slider.defaults重写默认值对象.下载该插件翻译源码 滑动条允许用户从一个有限的范围内选择一个数值.当滑块控件沿着轨道移动的时候,将会显示一个提示来表示当前值.用户可以 ...