设为首页 收藏本站
查看: 1275|回复: 0

[经验分享] Storm在zookeeper上的目录结构

[复制链接]

尚未签到

发表于 2015-9-5 14:14:42 | 显示全部楼层 |阅读模式
  storm操作zookeeper的主要函数都定义在命名空间backtype.storm.cluster中(即cluster.clj文件中)。 backtype.storm.cluster定义了两个重要protocol:ClusterState和StormClusterState。clojure中的protocol可以看成java中的接口,封装了一组方法。ClusterState协议中封装了一组与zookeeper进行交互的基础函数,如获取子节点函数,获取子节点数据函数等,ClusterState协议定义如下:
  关于storm操作zookeeper的详细分析请参见博客:storm操作zookeeper源码分析-cluster.clj


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中主要是有如下的五个子目录:

  • /assignments -> 任务分配信息
  • /storms -> 正在运行的topology的ID
  • /supervisors -> 所有的Supervisors的心跳信息
  • /workerbeats -> 所有的Worker的心跳
  • /errors -> 产生的出错信息

结构图
  

/-{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}  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-109800-1-1.html 上篇帖子: Zookeeper Tutorial 1 下篇帖子: zookeeper 分布式锁服务
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表