storm在zookeeper中存储结构
$rootPath/workerbeats/$topology_id/$node_port
存储由node和port指定worker的运行状态和一些统计信息。包括:topologyId、worker上executor统计信息(发送消息数,接收消息数等)、worker启动时间、最后一次更新时间。
$rootPath/storms/$topology_id
存储topology的本身信息:名字、启动时间、运行状态、要使用的worker数以及组件并行度设置,运行过程中不会变化。$rootPath/assignments/$topology_id
存储任务分配信息:topology在nimbus的存储目录、分配到supervisor机器到主机名的映射关系、每个executor运行在哪个worker以及每个worker的启动时间。运行过程中数据会变化。$rootPath/supervisors/$supervisor_id
存储supervisor机器本身运行统计信息:最近一次更新时间、主机名、supervisorId、已经使用的端口列表、所有端口列表以及运行时间。运行过程中数据会变化。$rootPath/errors/$topology_id/$commponent_id/$sequential_id
存储运行过程中每个组件发生的错误信息,sequential_id是递增的序列号,每一个组件最多只会保留最近的10条错误信息,他运行过程中是不会变,可能会被删除。
storm元数据交互
nimbus
nimbus既需要在zookeeper创建元数据,也需要从zookeeper中获取数据。
箭头1表示由nimbus创建的路径:
a. /storm/workerbeats/$topology_id
b. /storm/storms/$topology_id
c. /storm/assignments/$topology_id
nimbus提交数据时会创建a、b路径,a路径不写数据,b路径会写数据;
nimbus分配任务时会创建c路径的同时设置数据,任务分配计划有变,Nimbus会更新内容。
箭头2表示由nimbus需要获取数据的路径:
a. /storm/workerbeats/$topology_id/$node_port
b. /storm/supervisors/$supervisor_id
c. /storm/errors/$topoloty_id/$component_id/$sequential_id
nimbus从a路径读取当前已经被分配的worker的运行状态,根据worker状态确定是否需要重新调度,还
可以 获取到该worker的executor的运行统计信息。
路径b获取集群supervisor的的状态,通过这些信息确认哪些空闲资源可用,哪些supervisor不再活跃,
需要分配到其他节点上。
路径c数据通过storm ui提供给用户看。
supervisor
- 箭头3 /storm/supervisors/$supervisor_id,表示supervisor在zookeeper中创建的路径,新节点加入集群会创建一个节点。节点是临时的,一旦断开连接节点就会自动被zookeeper删除。这能保证nimbus能及时获取集群的节点信息,为容错&扩展提供基础。
- 箭头4 /storm/assignments/$topology_id表示supervisor需要获取的路径,nimbus将分配信息的信息写入zookeeper,supervisor从zookeeper获取分配的任务,supervisor本地保存上次任务的信息,比较两次分配信息是否有变化,如果有变化,需要移除所对应的的worker,并创建新worker。
- 箭头9表示supervisor会从localStae获取本机所有启动的worker的心跳信息,如果发现心跳信息超时会杀掉worker,原本分配的这个worker任务也会被nimbus重新分配。
worker
- 箭头5中/storm/workerbeats/$topology_id/$node_port表示worker启动时会创建一个与其对应的节点,相当于注册。nimbus 在提交topology是会创建一个根路径/storm/workerbeats/$topology_id,不会设置数据。
- 箭头6表示worker需要获取数据的路径/storm/assignments/$topology_id,worker获取到数据并根据取到的信息执行。
- 箭头8表示worker在localState中保存心跳信息,localState实际上每隔几秒将心跳信息保存到本地文件中,worker和supervisor属于不同进程,通过本地文件来传递心跳。
executor
executor只会利用zookeeper来记录自己的运行报错信息,会保存到以下目录
/storm/errors/$topology_id/$component_id/$sequential_id
相关推荐
Storm实时数据处理
Storm实时数据处理_中文版Storm实时数据处理_中文版Storm实时数据处理_中文版
《大数据技术丛书:Storm实时数据处理》通过丰富的实例,系统讲解Storm的基础知识和实时数据处理的最佳实践方法,内容涵盖Storm本地开发环境搭建、日志流数据处理、Trident、分布式远程过程调用、Topology在不同...
《storm实时数据处理》通过丰富的实例,系统讲解Storm的基础知识和实时数据处理的最佳实践方法,内容涵盖Storm本地开发环境搭建、日志流数据处理、Trident、分布式远程过程调用、Topology在不同编程语言中的实现方法...
本书介绍了实时处理框架storm,并讲解了一些高阶应用开发
《Storm实时数据处理》
( Storm实时数据处理.zip )PDF 高清版 个人收集电子书,仅用学习使用,不可用于商业用途,如有版权问题,请联系删除!
Storm实时数据处理-超清文字版.pdf 这个是带完整目录书签的文字版本,文本内容可以复制的哦
storm实时数据处理 带书签目录pdf高清完整版 这个是带完整目录书签的高清扫描版
Storm实时数据处理_PDF电子书下载 带书签目录 完整版
Storm实时数据处理.pdf
Storm实时数据处理的英文版。
处理数据流,包括基于规则的处理流程。 构建分布式远程过程调用。 交付基于多语言实现的Storm Topology,包括Java、Clojure、Ruby和C++。 将Storm与Cassandra、Hadoop集成。 使用Cascading实现基于批处理的单词重要...
Storm实时数据处理中文完整版,带有完整的书签
storm 实时数据分析 技术详解. 实例,部署,用到的主流技术等。
思路:Storm集群从Kafkatopic主题获取数据,解析后写入MySQL,注意我们使用MyBatis工具与数据库交互 项目结构 部署MySQL 我们在服务器上部署一台MySQL数据库 具体参考这篇文章 数据库表结构如下: ...
分别为1、storm项目-流数据监控系列1《设计文档》2、storm项目-流数据监控系列2《代码解析》 3、storm项目-流数据监控系列3《实例运行》4、storm项目-流数据监控系列4《MetaQ接口》5、storm项目-流数据监控系列5...
分别为1、storm项目-流数据监控系列1《设计文档》2、storm项目-流数据监控系列2《代码解析》 3、storm项目-流数据监控系列3《实例运行》4、storm项目-流数据监控系列4《MetaQ接口》5、storm项目-流数据监控系列5...
Storm集成Kafka 一、整合说明 二、写入数据到Kafka 三、从Kafka中读取数据 从Kafka中读取数据 Storm从Kafka集群读取数据处理