Twitter Storm源代码分析之ZooKeeper中的目录结构
徐明明博客:Twitter Storm源代码分析之ZooKeeper中的目录结构
我们知道Twitter Storm的所有的状态信息都是保存在Zookeeper里面,nimbus通过在zookeeper上面写状态信息来分配任务,supervisor,task通过从zookeeper中读状态来领取任务,同时supervisor, task也会定义发送心跳信息到zookeeper, 使得nimbus可以监控整个storm集群的状态, 从而可以重启一些挂掉的task。ZooKeeper 使得整个storm集群十分的健壮 — 任何一台工作机器挂掉都没有关系,只要重启然后从zookeeper上面重新获取状态信息就可以了。
本文主要介绍Twitter Storm在ZooKeeper中保存的数据目录结构,源代码主要是: backtype.storm.cluster。
一个要注意的地方是,作者在代码里面很多地方用到的storm-id, 其实就是topology-id的意思。我在邮件列表里面问了他一下, 他说以前他把topology叫做storm, 代码里面还没有改过来。
直接看下面的结构图:
/-{storm-zk-root} -- storm在zookeeper上的根
| 目录
|
|-/assignments -- topology的任务分配信息
| |
| |-/{topology-id} -- 这个下面保存的是每个
| topology的assignments
| 信息包括: 对应的
| nimbus上的代码目录,所有
| task的启动时间,
| 每个task与机器、端口的映射
|
|-/tasks -- 所有的task
| |
| |-/{topology-id} -- 这个目录下面id为
| | {topology-id}的topology
| | 所对应的所有的task-id
| |
| |-/{task-id} -- 这个文件里面保存的是这个
| task对应的component-id:
| 可能是spout-id或者bolt-id
|
|-/storms -- 这个目录保存所有正在运行
| | 的topology的id
| |
| |-/{topology-id} -- 这个文件保存这个topology
| 的一些信息,包括topology的
| 名字,topology开始运行的时
| 间以及这个topology的状态
| (具体看StormBase类)
|
|-/supervisors -- 这个目录保存所有的supervisor
| | 的心跳信息
| |
| |-/{supervisor-id} -- 这个文件保存的是supervisor
| 的心跳信息包括:心跳时间,主
| 机名,这个supervisor上worker
| 的端口号运行时间
| (具体看SupervisorInfo类)
|
|-/taskbeats -- 所有task的心跳
| |
| |-/{topology-id} -- 这个目录保存这个topology的所
| | 有的task的心跳信息
| |
| |-/{task-id} -- task的心跳信息,包括心跳的时
| 间,task运行时间以及一些统计
| 信息
|
|-/taskerrors -- 所有task所产生的error信息
|
|-/{topology-id} -- 这个目录保存这个topology下面
| 每个task的出错信息
|
|-/{task-id} -- 这个task的出错信息
Twitter Storm源代码分析之ZooKeeper中的目录结构的更多相关文章
- Twitter Storm源代码分析之Nimbus/Supervisor本地目录结构
storm集群里面工作机器分为两种一种是nimbus, 一种是supervisor, 他们通过zookeeper来进行交互,nimbus通过zookeeper来发布一些指令,supervisor去读z ...
- Storm入门(十一)Twitter Storm源代码分析之CoordinatedBolt
作者: xumingming | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明网址: http://xumingming.sinaapp.com/811/twitter-stor ...
- IntelliJ和tomcat中的目录结构
IntelliJ和tomcat中的目录结构 IntelliJ的官网帮助中心:http://www.jetbrains.com/idea/webhelp/getting-help.html pr ...
- Flask【第11篇】:整合Flask中的目录结构
整合Flask中的目录结构 一.SQLAlchemy-Utils 由于sqlalchemy中没有提供choice方法,所以借助SQLAlchemy-Utils组件提供的choice方法 import ...
- Storm在zookeeper上的目录结构
storm操作zookeeper的主要函数都定义在命名空间backtype.storm.cluster中(即cluster.clj文件中). backtype.storm.cluster定义了两个重要 ...
- kafka笔记-Kafka在zookeeper中的存储结构【转】
参考链接:apache kafka系列之在zookeeper中存储结构 http://blog.csdn.net/lizhitao/article/details/23744675 1.topic注 ...
- kafka在zookeeper中的存储结构
参考site:http://kafka.apache.org/documentation.html#impl_zookeeper 1.zookeeper客户端相关命令 在确保zookeeper服务启动 ...
- MySQL 5.7 源码中的目录结构
MySQl Server的源码可以直接去Github浏览. 这里我们选择5.7版本的:https://github.com/mysql/mysql-server/tree/5.7 也可以通过: git ...
- 浅谈android中的目录结构
之前在android游戏开发中就遇到本地数据存储的问题:一般情形之下就将动态数据写入SD中存储,在没有SD卡的手机上就需另作处理了;再有在开发android应用的过程中,总要去调试APP,安装时又想去 ...
随机推荐
- Git 操作的一些场景
1. 某些不需要的文件/文件夹,如:/build 之类,在添加对应的gitignore之前Push了,导致每次编译都会产生新的文件 解决方法:直接删掉不需要的文件/文件夹,然后push gitigno ...
- Label Font 字体样式设置
label.font = [UIFont fontWithName:@"Arial-BoldItalicMT" size:24]; 字体名如下: Font Family: Amer ...
- EF – 2.EF数据查询基础(上)查询数据的实用编程技巧
目录 5.4.1 查询符合条件的单条记录 EF使用SingleOrDefault()和Find()两个方法查询符合条件的单条记录. 5.4.2 Entity Framework中的内部数据缓存 DbS ...
- 用#define来实现多份近似代码 - map,set中的应用
在stl中map,set内部都是使用相同的红黑树实现,map对应模板参数key_type,mapped_type,而set对应模板参数没有mapped_type 两者都支持insert操作 pair& ...
- 您的 PHP 似乎没有安装运行 WordPress 所必需的 MySQL 扩展”处理方法
转自:http://www.xuebuyuan.com/1549022.html 这已经是一个老掉牙的问题了,部分人使用自己的服务器安装WordPress程序之后,会出现“您的 PHP 似乎没有安装运 ...
- 安装wine的问题
- 10gRAC运行srvctl报错error while loading shared libraries:
数据库10g才会有这个错,因为11g的grid和oracle是分开的. [oracle@news01 orcl]$ srvctl /u01/app/oracle/db_1/jdk/jre/bin/ja ...
- C语言文件操作fclose在NDK引起的BUG
今天在NDK中写了一个简单的写入文件操作: FILE *fp = fopen("/sdcard/test.txt","w"); if(fp == NULL) { ...
- 数据分析(4):Scipy
科学计算 最小二乘leastsq # -*- coding: utf-8 -*- def func(x,p): # p 参数列表 A,k,theta = p; # 可以一一对应赋值 return A* ...
- 汇编学习(五)——表处理程序
(一)串操作指令及重复前缀 一.串操作指令: 1.串传送指令: (1)指令格式: MOVS dst,rsc MOVSB ;ES:[DI]<--DS:[SI],SI<-SI+/-,DI< ...