一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 淺談Storm在zookeeper上的目錄結構

淺談Storm在zookeeper上的目錄結構

2021-01-18 10:15不懂 Java教程

這篇文章主要介紹了淺談Storm在zookeeper上的目錄結構的相關內容,涉及storm使用zookeeper的操作以及詳細結構圖,具有一定參考價值,需要的朋友可以了解下。

Storm的所有的狀態信息都保存在Zookeeper里面,nimbus通過在zookeeper上面寫狀態信息來分配任務:

使得nimbus可以監控整個storm集群的狀態,從而可以重啟一些掛掉的task。 ZooKeeper使得整個storm集群十分的健壯-—任何一臺工作機器掛掉都沒有關系,只要重啟然后從zookeeper上面重新獲取狀態信息就可以了。那Storm在zookeeper里面存儲了哪些狀態呢?在James Xu的文章中有所涉及,但是該文章講述的已經過時了。本文主要介紹Storm在ZooKeeper中保存的數據目錄結構,源代碼主要是:backtype.storm.cluster。

關于storm操作zookeeper的詳細分析請參見:源碼閱讀之storm操作zookeeper-cluster.clj

Zookeeper的操作

?
1
2
3
4
5
6
7
8
9
10
11
12
(defprotocol ClusterState
 (set-ephemeral-node [this path data])
 (delete-node [this path])
 (create-sequential [this path data])
 (set-data [this path data]) ;; if node does not exist, create persistent with this data
 (get-data [this path watch?])
 (get-children [this path watch?])
 (mkdirs [this path])
 (close [this])
 (register [this callback])
 (unregister [this id])
 )

Storm使用Zookeeper的操作

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
(defprotocol StormClusterState
 (assignments [this callback])
 (assignment-info [this storm-id callback])
 (active-storms [this])
 (storm-base [this storm-id callback])
 (get-worker-heartbeat [this storm-id node port])
 (executor-beats [this storm-id executor->node+port])
 (supervisors [this callback])
 (supervisor-info [this supervisor-id]) ;; returns nil if doesn't exist
 (setup-heartbeats! [this storm-id])
 (teardown-heartbeats! [this storm-id])
 (teardown-topology-errors! [this storm-id])
 (heartbeat-storms [this])
 (error-topologies [this])
 (worker-heartbeat! [this storm-id node port info])
 (remove-worker-heartbeat! [this storm-id node port])
 (supervisor-heartbeat! [this supervisor-id info])
 (activate-storm! [this storm-id storm-base])
 (update-storm! [this storm-id new-elems])
 (remove-storm-base! [this storm-id])
 (set-assignment! [this storm-id info])
 (remove-storm! [this storm-id])
 (report-error [this storm-id task-id error])
 (errors [this storm-id task-id])
 (disconnect [this])
 )

Storm中在Zookeeper中存儲的目錄

?
1
2
3
4
5
6
7
8
9
10
11
12
(def ASSIGNMENTS-ROOT "assignments")
(def CODE-ROOT "code")
(def STORMS-ROOT "storms")
(def SUPERVISORS-ROOT "supervisors")
(def WORKERBEATS-ROOT "workerbeats")
(def ERRORS-ROOT "errors")
 
(def ASSIGNMENTS-SUBTREE (str "/" ASSIGNMENTS-ROOT))
(def STORMS-SUBTREE (str "/" STORMS-ROOT))
(def SUPERVISORS-SUBTREE (str "/" SUPERVISORS-ROOT))
(def WORKERBEATS-SUBTREE (str "/" WORKERBEATS-ROOT))
(def ERRORS-SUBTREE (str "/" ERRORS-ROOT))

1./assignments -> 任務分配信息
2./storms -> 正在運行的topology的ID
3./supervisors -> 所有的Supervisors的心跳信息
4./workerbeats -> 所有的Worker的心跳
5./errors -> 產生的出錯信息

結構圖

?
1
2
3
4
5
6
7
8
9
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
/-{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}

總結

以上就是本文關于淺談Storm在zookeeper上的目錄結構的全部內容,如有不足之處,歡迎留言指出,希望對大家有所幫助。感謝朋友們對本站的支持!

原文鏈接:https://segmentfault.com/a/1190000000653595

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产精品女主播自在线拍 | 性鸥美| 日日爽 | 欧美日韩精品一区二区三区视频在线 | 国产成人在线视频播放 | 国产欧美一区二区精品性色 | 亚洲男人的天堂在线 | 亚州男人天堂 | 麻豆视频入口 | xnxx老师 | 欧美日韩高清完整版在线观看免费 | 久久精品无码人妻无码AV蜜臀 | 韩国漂亮美女三级在线观看 | 91传媒制片厂制作传媒破解版 | 免费观看全集 | 91国语自产拍在线观看 | 国产好深好硬好爽我还要视频 | 日本xxxⅹ69xxxx护士 | 久久精视频 | 啊用力好大粗黑人小说 | 五月天婷婷精品免费视频 | 亚洲欧美久久婷婷爱综合一区天堂 | 国产探花在线观看 | 亚洲福利视频一区 | 变态人shou交小说 | 全日本爽视频在线 | 国产另类视频一区二区三区 | 国产成人精品免费大全 | 日韩欧美三级视频 | 亚洲成年网站在线观看 | 欧美大片一区二区三区 | 日本特黄一级午夜剧场毛片 | 亚洲国产网址 | 日韩成人影视 | 国产伊人网 | 欧美一二区| 果冻传媒在线免费观看 | 午夜精品久久久 | 日韩a级片视频 | 精品国产一区二区三区在线 | 波多野结衣不卡 |