资料来源:Twitter Storm源代码分析之ZooKeeper中的目录结构java
一、本机zookeeper中,storm目录结构
node
[zk: 127.0.0.1:2181(CONNECTED) 12] ls /storm [workerbeats, errors, supervisors, storms, assignments] [zk: 127.0.0.1:2181(CONNECTED) 13]
二、在zookeeper中保存的数据目录结构shell
一个要注意的地方是,做者在代码里面不少地方用到的storm-id
, 其实就是topology-id
的意思。我在邮件列表里面问了他一下, 他说之前他把topology叫作storm, 代码里面尚未改过来。segmentfault
/-{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的出错信息
三、现版本中storm在zookeeper中的结构图(资料来源:http://segmentfault.com/a/1190000000653595)app
/-{storm-zk-root} -- storm在zookeeper上的根目录(默认为/storm) | |-/assignments -- topology的任务分配信息 | | | |-/{topology-id} -- 这个目录保存的是每一个topology的assignments信息包括:对应的nimbus上 | -- 的代码目录,全部task的启动时间,每一个task与机器、端口的映射。操做为 | -- (assignments)来获取全部assignments的值;以及(assignment-info storm-id) | -- 来获得给定的storm-id对应的AssignmentInfo信息 | -- 在AssignmentInfo中存储的内容有: | -- :executor->node+port :executor->start-time-secs :node->host | -- 具体定义在common.clj中的 | -- (defrecord Assignment[master-code-dir node->host executor->node+port executor->start-time-secs]) | |-/storms -- 这个目录保存全部正在运行的topology的id | | | | | |-/{topology-id} -- 这个文件保存这个topology的一些信息,包括topology的名字,topology开始运行 | -- 的时间以及这个topology的状态。操做(active-storms),得到当前路径活跃的下 | -- topology数据。保存的内容参考类StormBase;(storm-base storm-id)获得给定的 | -- storm-id下的StormBase数据,具体定义在common.clj中的 | -- (defrecord StormBase [storm-name launch-time-secs status num-workers component->executors]) | |-/supervisors -- 这个目录保存全部的supervisor的心跳信息 | | | | | |-/{supervisor-id} -- 这个文件保存supervisor的心跳信息包括:心跳时间,主机名,这个supervisor上 | -- worker的端口号,运行时间(具体看SupervisorInfo类)。操做(supervisors)获得 | -- 全部的supervisors节点;(supervisor-info supervisor-id)获得给定的 | -- supervisor-id对应的SupervisorInfo信息;具体定义在common.clj中的 | | -- (defrecord SupervisorInfo [time-secs hostname assignment-id used-ports meta scheduler-meta uptime-secs]) | |-/workerbeats -- 全部worker的心跳 | | | |-/{topology-id} -- 这个目录保存这个topology的全部的worker的心跳信息 | | | |-/{supervisorId-port} -- worker的心跳信息,包括心跳的时间,worker运行时间以及一些统计信息 | | -- 操做(heartbeat-storms)获得全部有心跳数据的topology, | -- (get-worker-heartbeat storm-id node port)获得具体一个topology下 | -- 的某个worker(node:port)的心跳情况, | -- (executor-beats storm-id executor->node+port)获得一个executor的心跳情况 | |-/errors -- 全部产生的error信息 | |-/{topology-id} -- 这个目录保存这个topology下面的错误信息。操做(error-topologies)获得出错 | -- 的topology;(errors storm-id component-id)获得 | -- 给定的storm-id component-id下的出错信息 |-/{component-id}