資料來源: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}