1. 程式人生 > >Storm在zookeeper上的目錄結構

Storm在zookeeper上的目錄結構

storm操作zookeeper的主要函式都定義在名稱空間backtype.storm.cluster中(即cluster.clj檔案中)。 backtype.storm.cluster定義了兩個重要protocol:ClusterState和StormClusterState。clojure中的protocol可以看成java中的介面,封裝了一組方法。ClusterState協議中封裝了一組與zookeeper進行互動的基礎函式,如獲取子節點函式,獲取子節點資料函式等,ClusterState協議定義如下:

Zookeeper的操作 
(defprotocol ClusterState

 (set-ephemeral-node [this path data])
 (delete-node [this path])
 (create-sequential [this path data])
 ;; if node does not exist, create persistent with this data
 (set-data [this path data])
 (get-data [this path watch?])
 (get-version [this path watch?])
 (get-data-with-version [this path watch?
])
 (get-children [this path watch?])
 (mkdirs [this path])
 (close [this])
 (register [this callback])
 (unregister [this id]))
Storm使用Zookeeper的操作 
(defprotocol StormClusterState
 (assignments [this callback])
 (assignment-info [this storm-id callback])
 (assignment-info-with-version [this storm-id
callback])
 (assignment-version [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 node port error])
 (errors [this storm-id task-id])
 (disconnect [this]))
Storm中在Zookeeper中儲存的目錄
(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))

從上面來看,在Zookeeper中主要是有如下的五個子目錄:

  1. /assignments -> 任務分配資訊
  2. /storms -> 正在執行的topology的ID
  3. /supervisors -> 所有的Supervisors的心跳資訊
  4. /workerbeats -> 所有的Worker的心跳
  5. /errors -> 產生的出錯資訊
結構圖
/-{storm-zk-root}          -- stormzookeeper上的根目錄(預設為/storm)
 |
 |-/assignments            -- topology的任務分配資訊
 |   |
 |   |-/{topology-id}      -- 這個下面儲存的是每個topologyassignments資訊包括: 對應的
 |                            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的心跳資訊包括:心跳時間,主
 |                            機名,這個supervisorworker的埠號執行時間(具體看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}

相關推薦

2.1 2.2 系統目錄結構)(下)

都是 掛載 sbin 樹形 dia user 重要 網卡 指定 1.ls列取系統目錄文件ls list [root@laozhilinux-01:~] # ls /bin data docs home lib media opt

python ftp 按目錄結構傳下載

#!/usr/bin/python # coding=utf-8 from ftplib import FTP import time import os def __ftp_upload(ftp,local,remote,isDel=False): if os.

AndroidStudio2.2 Preview3中NDK開發之CMake和傳統 JNI在目錄結構和配置檔案的區別

 自從AndroidStudio更新到2.2,就有了CMake和傳統JNI兩種開發NDK的方法,主要就是在目錄結構和build.gradle上的區別,下面我們將分別介紹目錄區別和build.gradle種配置的區別(提示:在第一次用CMake時,最好在新建專案時勾選Include C++

hbase在hdfs的詳細目錄結構

hbase目錄結構如圖:  列出/hbase目錄下的所有目錄和檔案,結構如下: drwxr-xr-x - root supergroup 0 2018-10-27 18:26 /hbase/.tmp drwxr-xr-x - root super

Storm在zookeeper目錄結構

storm操作zookeeper的主要函式都定義在名稱空間backtype.storm.cluster中(即cluster.clj檔案中)。 backtype.storm.cluster定義了兩個重要protocol:ClusterState和StormClusterState。clojure中的protoc

Android原生第一課-瞭解目錄結構和其用處(史最詳細)

學的東西,很久沒用就會忘記,所以寫個東西記錄一下。 這是我之前用Android Studio 建的專案。 目錄檔案 作用 .gradle gradle專案產生資料夾(自動編譯工具產生的檔案) .idea IDEA專案資料夾(開發工具產生的檔案) app

Android Studio工程目錄結構分析()

Android Studio工程目錄 我們這裡以一個簡單的HelloWorld工程來分析: 1、.gradle和.idea         這兩個目錄下放置的都是Android Studio自

[Linux] Linux 中的基本命令與目錄結構(初稿)

展開 src 文件名 auto 使用 bin target editor 提示符 Linux 中的基本命令與目錄結構 目錄 一、Linux 基本目錄結構 二、基本命令 三、瀏覽目錄 四、中間命令 五、更改密碼 六、環境變量和 shell 變量 七、命令路

[Linux] Linux 中的基本命令與目錄結構(待移除)

head 命令 存在 壓縮 下載 創建文件 name 批處理 targe 簡化 Linux 中的基本命令與目錄結構 目錄 一、Linux 基本目錄結構 二、基本命令 三、瀏覽目錄 四、中間命令 五、更改密碼 六、環境變量和 shell 變量 七、命令路徑

Linux系統目錄結構介紹

型號 系統安全 原因 能夠 源碼包安裝 -h ifcfg domain .html 參考博客: http://www.cnblogs.com/chensiqiqi/p/6243549.html 感謝原博主為我學習Linux指明方向!! linux目錄:一切從&ld

Wordpress目錄結構

register ade gist ane oca 配置文件 格式 rpc creat 根目錄 1.index.php:wordpress核心索引文件,即博客輸出文件。 2.license.txt:WordPress GPL許可證文件。 3.my-hacks.php

TP5學習基礎二:目錄結構、URL路由、數據操作

更改 數據 valid nbsp 命名 別名 ret tag ati 一.安裝1.使用git或者composer(composer update)進行實時更新,區別在於git不會清空核心框架目錄而composer會清空。2.使用官網打包好的TP壓縮包(解壓即可用)->

Linux目錄結構介紹

windows linux 目錄結構重點:linux下一切從根"/"開始Linux下磁盤不掛載不能使用,必須掛載。 一、Linux系統目錄結構的基本特點介紹(1)Linux目錄一切從“根”開始,“/”是所有目錄的起點(頂點):相對路徑(目錄)和絕對路徑(目錄)。(2)Linux根下面的目錄是一個有層次

3.Solr4.10.3目錄結構

產品 Coding 1.0 是個 commit collect 記錄 class 引擎 轉載請出自出處:http://www.cnblogs.com/hd3013779515/ 1.整個目錄結構 (1)bin:是腳本的啟動目錄 (2)contrib:第三方包存放的目錄 (

微擎目錄結構介紹

系統通信 app chat 文件操作 con orm code utility for pro ├─ addons ………………………………………… 【模塊安裝目錄】 (意為附加組件) │ ├─ business …………………………………… 模塊的名稱 (示例) │ │

ubuntu - 操作系統的目錄結構

分區 單獨 說明 命令 程序庫 系統管理員 系統 進行 ubuntu Ubuntu 系統的目錄眾多,但是所有的目錄都是在/目錄下面的,並且 Ubuntu 系統是不分 C 盤、D 盤等 一、/:目錄屬於根目錄,是所有目錄的絕對路徑的起始點,Ubuntu 中的所有文件和目錄都在

Linux的目錄結構的介紹

linux目錄介紹/ 根文件,所有的文件都在根下/boot 系統啟動相關的文件,如內核 initrd grub(bootloader)/dev 設備文件(特殊文件,沒有大小,黑色背景,黃色字體) 塊設備 --隨機訪問,數據塊 字符設備 --線性設備

Centos 7系統目錄結構

linux centos 系統目錄結構 tree命令是以樹狀形式顯示目錄下的文件或子目錄安裝tree命令,#yum install -y tree#tree -L 2 / #指定最大的目錄深度 也就是說只包含子目錄為二層的目錄根目錄下的各個目錄所代表的意思:從CentOS 7 開始就不區

Jmeter之目錄結構

.sh 文件 批量 html jmeter 目錄結構 服務 window 關註   首先得了解一下這些東西,以後才能快速的找到某些配置文件進行修改(舉個例子,改配置只是其中之一) 一、bin目錄examples:        目錄中有CSV樣例 jmeter.bat  

Nginx 目錄結構

utf type root pes ces fastcgi rec 目錄 html [[email protected]/* */ nginx]# lsclient_body_temp conf fastcgi_temp html logs proxy