storm_集群调度原理

<h4>前言:</h4>
因为前面讲个那3个demo都是local topology运行,所以对storm集群状态下的工作情况没有介绍太多,写面我们来详细描述一下。
<h4>一、集群状态管理及工作调度</h4>
    storm的集群表面上看和hadoop的集群非常像。但是在Hadoop上面你运行的是MapReduce的Job, 而在Storm上面你运行的是Topology。它们是非常不一样的一个关键的区别是: 一个MapReduce Job最终会结束, 而一个Topology运永远运行(除非你显式的杀掉他)。
    在storm的集群里面有两种节点: 控制节点(master node)和工作节点(worker node)。控制节点上面运行一个后台程序:Nimbus, 它的作用类似Hadoop里面的JobTracker。Nimbus负责在集群里面分布代码,分配工作给机器, 并且监控状态。每一个工作节点上面运行一个叫做Supervisor的应用(类似 TaskTracker)。Supervisor会监听分配给它那台机器的工作,根据需要 启动/关闭工作进程。每一个工作进程执行一个Topology(类似 Job)的一个子集;一个运行的Topology由运行在很多机器上的很多工作进程 Worker(类似 Child)组成。
<pre>

20150722183100878.png

</pre>
<b>集群状态管理:</b>
集群的状态是通过一个storm-cluster-state的对象来描述的。
其提供了许多功能接口,比如:
1、zookeeper相关的基本操作,如create-node、set-data、remove-node、get-children等.
2、心跳接口,如supervisor-heartbeat!、worker-heatbeat!等.
3、心跳信息,如executors-beats等.
4、启动、更新、停止storm,如update-storm!等.

<b>任务调度:</b>
1、zookeeper是整个集群状态同步、协调的核心组件。
2、supervisor、worker、executor等组件会定期向zookeeper写心跳信息
3、当topology出现错误、或者有新的topology提交到集群时,topologies信息会同步到zookeeper。
4、nimbus会定期监视zookeeper上的任务分配信息assignments,并将重新分配的计划同步到zookeeper。
所以,nimbus会根据心跳、topologies信息及已分配的任务信息为依据,来重新分配任务。

<h4>二、supervisor的工作原理:</h4>
<pre>


捕获.PNG

</pre>
1、worker是一个进程.
2、executor是一个线程,是运行tasks的物理容器.
3、task是对spout/bolt/acker等任务的逻辑抽象.
supervisor会定时从zookeeper获取拓补信息topologies、任务分配信息assignments及各类心跳信息,以此为依据进行任务分配。在supervisor同步时,会根据新的任务分配情况来启动新的worker或者关闭旧的worker并进行负载均衡。worker通过定期的更新connections信息,来获知其应该通讯的其它worker。worker启动时,会根据其分配到的任务启动一个或多个executor线程。这些线程仅会处理唯一的topology。 如果有新的tolopogy被提交到集群,nimbus会重新分配任务。executor线程负责处理多个spouts或者多个bolts的逻辑,这些spouts或者bolts,也称为tasks。具体有多少个worker,多少个executor,每个executor负责多少个task,是由配置和指定的parallelism-hint共同决定的,但这个值并不一定等于实际运行中的数目。如果计算出的总的executors超过了nimbus的限制,此topology将不会得到执行。

<h4>三、topology提交过程</h4>

20150722204129345.png

1.非本地模式下,客户端通过thrift调用nimbus接口,来上传代码到nimbus并触发提交操作.
2.nimbus进行任务分配,并将信息同步到zookeeper.
3.supervisor定期获取任务分配信息,如果topology代码缺失,会从nimbus下载代码,并根据任务分配信息,同步worker.
4.worker根据分配的tasks信息,启动多个executor线程,同时实例化spout、bolt、acker等组件,此时,等待所有connections(worker和其它机器通讯的网络连接)启动完毕,此storm-cluster即进入工作状态。
5.除非显示调用kill topology,否则spout、bolt等组件会一直运行。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 目录 场景假设 调优步骤和方法 Storm 的部分特性 Storm 并行度 Storm 消息机制 Storm UI...
    mtide阅读 17,186评论 30 60
  • 这是一个JStorm使用教程,不包含环境搭建教程,直接在公司现有集群上跑任务,关于JStorm集群环境搭建,后续研...
    Coselding阅读 6,435评论 1 9
  • 原文链接Storm Tutorial 本人原创翻译,转载请注明出处 这个教程内容包含如何创建topologies及...
    quiterr阅读 1,647评论 0 6
  • cinderella熊阅读 173评论 0 0
  • 第三章123 VS me 我们依然是普通朋友,她在网络上看到了这个城市将要举办国际马拉松的比赛,打电话问我参不参加...
    林嘉瑞阅读 402评论 2 5