【流式計算】Twitter Storm源代碼分析之ZooKeeper中的目錄結構

作者: xumingming | 可以轉載, 但必須以超鏈接形式標明文章原始出處和作者信息及版權聲明

轉自網址: http://xumingming.sinaapp.com/466/twitter-storm-code-analysis-zookeeper-dirs/

 
我們知道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, 代碼裏面還沒有改過來。

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
/-{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的出錯信息

發佈了34 篇原創文章 · 獲贊 15 · 訪問量 51萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章