浅谈Storm在zookeeper上的目录结构

 更新时间:2017年10月16日 08:33:48   作者:不懂  
这篇文章主要介绍了浅谈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的操作

(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的操作

(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中存储的目录

(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 -> 产生的出错信息

结构图

/-{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上的目录结构的全部内容,感兴趣的朋友可以参阅:apache zookeeper使用方法实例详解为zookeeper配置相应的acl权限zookeeper watch机制的理解等,如有不足之处,欢迎留言指出,希望对大家有所帮助。感谢朋友们对本站的支持!

相关文章

  • java单链表实现书籍管理系统

    java单链表实现书籍管理系统

    这篇文章主要为大家详细介绍了java单链表实现书籍管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • Java实现字符串转为驼峰格式的方法详解

    Java实现字符串转为驼峰格式的方法详解

    这篇文章主要介绍了如何利用Java语言实现字符串转为驼峰格式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2022-07-07
  • 浅谈Java中Unicode的编码和实现

    浅谈Java中Unicode的编码和实现

    这篇文章向大家介绍了Java编程中Unicode编码及实现的相关内容,列举了几个字符不同表达式的比较,以及Unicode平面映射的知识,具有一点点参考价值,需要的朋友可以了解下。
    2017-10-10
  • springboot配置ssl后启动一直是端口被占用的解决

    springboot配置ssl后启动一直是端口被占用的解决

    这篇文章主要介绍了springboot配置ssl后启动一直是端口被占用的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • Java IO及BufferedReader.readline()出现的Bug

    Java IO及BufferedReader.readline()出现的Bug

    这篇文章主要介绍了Java IO及BufferedReader.readline()出现的Bug,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • 使用dom4j实现xml转map与xml转json字符串

    使用dom4j实现xml转map与xml转json字符串

    这篇文章主要为大家详细介绍了如何使用dom4j实现xml转map与xml转json字符串功能,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下
    2024-11-11
  • jdk21环境配置详细步骤记录

    jdk21环境配置详细步骤记录

    JDK是整个Java开发的核心,它包含了Java的运行环境和Java工具,这篇文章主要给大家介绍了关于jdk21环境配置的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2023-11-11
  • 在Docker中部署Spring Boot项目过程详解

    在Docker中部署Spring Boot项目过程详解

    这篇文章主要介绍了在Docker中部署Spring Boot项目,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • SpringSecurity整合JWT的使用示例

    SpringSecurity整合JWT的使用示例

    本文主要介绍了SpringSecurity整合JWT的使用示例,整合Spring Security和JWT,可以使我们的应用程序更加安全和高效,感兴趣的可以了解一下
    2023-11-11
  • Java 设置Excel条件格式示例代码(高亮条件值、应用单元格值/公式/数据条等类型)

    Java 设置Excel条件格式示例代码(高亮条件值、应用单元格值/公式/数据条等类型)

    这篇文章主要介绍了Java 设置Excel条件格式示例代码(高亮条件值、应用单元格值/公式/数据条等类型),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01

最新评论