storm学习笔记(一)




1、Nimbus
Nimbus创建时会创建以下三个节点:
a、/storm/workbeats/topology-id
b、/storm/storms/topology-id
c、/storm/assignments/topology-id
其中对于Nimbus只会创建目录不会设置数据(数据是worker设置的),b和c在创建的同时设置数据。a和b只有再提交新的topology的时候才会创建,并且b中的数据设置完后就不会再变化,
c是再第一次为该topology分配任务的时候创建,若任务分配计划有变,Nimbus就会更新它的内容
Nimbus从zk中获取数据时的路径,包括:
a、/storm/workbeats/topology-id
b、/storm/supervisor/topology-id
c、/storm/errors/topology-id
Nimbus需要从路径a中读取当前已被分配的Worker的运行状态。根据该信息可以得知Worker的状态以及Worker下面所有Executor的统计信息,这些信息会通过UI呈现给用户。
从路径b可以获取所有的Supervisor的状态,当有Supervisor不再活跃时会将它的任务分配到其它的空闲的Supervisor上去。
从路径c中获取所有的错误信息并通过UI呈现给用户
Storm集群中的机器数量时可以动态增减,当机器增减的时候会引起zookeeper中元数据的变化,Nimbus通过从zk中读取这些元数据不断地调整任务分配,所以Storm具有良好的可扩展性。
当Nimbus挂掉时,其他的节点时可以继续工作的,但是不能提交新的Topology,也不能重新进行任务的分配和负载调整,因此目前Nimbus存在单点的问题
2、Supervisor
supervisor除了zk'来创建和获取元数据外,还可以监控制定的本地文件来检测有它启动的所有的Worker的状态。
- 箭头3表示Supervisor在zk中创建的节点时/storm/supervisor/topology-id,当有新节点加入时会在该路径下创建一个节点。但是这个节点是临时的,当Supervisor和zk的链接稳定时,这个节点会一直存在,当和zk的连接断开时,该节点会被自动删除。所以该目录下都是当前活跃的机器,。这是Storm可以进行任务分配的基础,也是Storm具有容错性以及扩展性的基础
- 箭头4表示Supervisor需要获取元数据的路径是/storm/assignments/topology-id,它是Nimbus写入的对Topology任务分配的信息,Supervisor可以从该路径获取Nimbus分配给他的所有任务。Supervisor在本地保存着上次的分配信息,对比这两部分的信息可以得知分配信息是否有变化。若发生变化,则需要关闭被移除任务所对应的所有Worker,并启动新的Worker执行新的任务
- 箭头9表示Supervisor会从LocalState中获取由它启动的所有Worker的心跳信息。Supervisor会每隔一段时间检查一次这些心跳信息,当没有某个Worker的心跳信息时,这个Worker就是被kill掉,然后由Nimbus重新分配这个Worker的任务
3、Worker
- 箭头5表示Worker在zk中创建的路径是/storm/workbeats/topology-id/node-port,当Worker启动时将创建一个对应的节点。Nimbus在创建的时候只会创建/storm/workbeats/topology-id节点,但是不会设置里面的数据,里面的数据由Worker创建,这样做的目的时避免多个Worker同时创建路径冲突
- 箭头6表时Worker会从/storm/workbeats/topology-id节点中获取分配给它的任务并执行
- 箭头8表示Worker在Local State中保存心跳信息,这些心跳信息都保存在本地文件中,Worker用这些信息和Supervisor保持心跳,每隔几秒会更新一次心跳信息
4、Executor
Executor只会利用zk来记录错误信息
- 箭头7标志Executor在zk中创建的路径是/storm/errors/topology-id/componemt-id/sequential-id,
5、总结
- Nimnus和Supervisor之间通过/storm/supervisor/topology-id对应的数据进行心跳保持。Supervisor在创建这个路径时采用的时临时节点模式,只要Supervisor死掉这个节点就会被删除,Nimbus就会将分配给这个Supervisor的任务重新进行分配
- Worker和Supervisor之间/storm/workbeats/topology-id/node-port中的数据进行心跳的维持,NImbus会每隔一段时间获取该路径下的数据,同时Nimbus还会在它的内存中保存上一次的信息。如果发现某个Worker的心跳信息有一段时间没有更新就认为该worker已经死掉,就会将分配给该Worker的任务重新分配
- Worker和Supervisor之间维持心跳时通过本地文件(基于LocalState)
storm学习笔记(一)的更多相关文章
- Storm学习笔记 - 消息容错机制
Storm学习笔记 - 消息容错机制 文章来自「随笔」 http://jsynk.cn/blog/articles/153.html 1. Storm消息容错机制概念 一个提供了可靠的处理机制的spo ...
- Storm学习笔记 - Storm初识
Storm学习笔记 - Storm初识 1. Strom是什么? Storm是一个开源免费的分布式计算框架,可以实时处理大量的数据流. 2. Storm的特点 高性能,低延迟. 分布式:可解决数据量大 ...
- Twitter Storm学习笔记
官方英文文档:http://storm.apache.org/documentation/Documentation.html 本文是学习笔记,转载整合加翻译,主要是为了便于学习. 一.基本概念 参考 ...
- Storm学习笔记——高级篇
1. Storm程序的并发机制 1.1 概念 Workers (JVMs): 在一个物理节点上可以运行一个或多个独立的JVM 进程.一个Topology可以包含一个或多个worker(并行的跑在不同的 ...
- Storm学习笔记
1.如何让一个spout并行读取多个流? 方法:任何spout.bolts组件都可以访问TopologyContext.利用这个特性可以让Spouts的实例之间划分流. 示例:获取到storm集群sp ...
- Storm学习笔记六
1 Storm的通信机制 说明:1.worker与worker之间跨进程通信: 2.worker内部中各个executor间的通信,Task对象--->输入队列queue--->执行--- ...
- apache Storm 学习笔记
Storm流之FieldGrouping字段分组: https://blog.csdn.net/Simon_09010817/article/details/80092080
- Storm学习笔记1:Storm基本组件
Storm概念及组件 Nimbus:负责资源分配和任务调度. Supervisor:负责接受nimbus分配的任务,启动和停止属于自己管理的worker进程. Worker:运行具体处理组件逻辑的进程 ...
- Storm学习笔记——安装配置
1.安装一个zookeeper集群 2.上传storm的安装包,解压 3.修改配置文件conf/storm.yaml #所使用的zookeeper集群主机storm.zookeeper.servers ...
随机推荐
- 角点检测和匹配——Harris算子
一.基本概念 角点corner:可以将角点看做两个边缘的交叉处,在两个方向上都有较大的变化.具体可由下图中分辨出来: 兴趣点interest point:兴趣点是图像中能够较鲁棒的检测出来的点,它不仅 ...
- wifi扩展设置
一.主路由器设置 网络参数 LAN口设置查到 MAC地址,用于设置扩展路由器 Bridge功能设置时 AP1的地址 2.无线基本设置,桥的 SSID BSSID 为扩展 3.无线安全设置 二.扩展路由 ...
- PHP发送E-mail---新手教程
首先下载PHPmailer拓展包,其实就是别人封装好的类库,下载链接:http://pan.baidu.com/s/1slbhGo1 首先去163注册个账号,然后登陆进去,点击设置下面的 POP3/S ...
- 关于Lumen / Laravel .env 文件中的环境变量是如何生效的
.env 文件包含默认环境变量,我们还可自定义其他任何有效的变量,并可通过 调用 env() 或 $_SERVER 或 $_ENV 来获取该变量.那么env()是如何加载到这些变量的呢?在Lume ...
- jsp,2016.11.28
1,在jsp中要关联到js的时候就要导入js才可以调用到js <!-- 导入地区的js --> <script type="text/javascript" sr ...
- Eclipse安装Git插件以及通过Git导入华为软件开发云项目
--内容提交-- 1. Eclipse安装Git插件 2. 在Eclipse中导入华为软件开发云项目, 以及常用Git操作 一. Eclipse安装Git插件 现在从eclipse官网下载 ...
- Html的基本元素(Element)
本人写这篇文章是我在IT修真园里学习了一段时间,反过来复习时整理的.虽然只是些基础知识内容,希望能帮到大家. 首先我们要了解所谓的html它的定义是什么? [html:超文本标记语言,文本:txt格式 ...
- 一步一步学Vue(四)
接上篇.上篇中给出了代码框架,没有具体实现,这一篇会对上篇定义的几个组件进行分别介绍和完善: 1.TodoContainer组件 TodoContainer组件,用来组织其它组件,这是react中推荐 ...
- __main() 和 main() 【转】
因为我们通常在BOOTLOADER中都已做好了比较细致的初始化工作,包括代码的搬运,所以我们最好别再调用库函数__main(),因为__main()作为ADS集成好的库函数,会对系统进行初始化设置,可 ...
- hdu_5868:Different Circle Permutation
似乎是比较基础的一道用到polya定理的题,为了这道题扣了半天组合数学和数论. 等价的题意:可以当成是给正n边形的顶点染色,旋转同构,两种颜色,假设是红蓝,相邻顶点不能同时为蓝. 大概思路:在不考虑旋 ...