Storm1.0版本任务调度策略实现源码分析

本文深入分析了Storm1.0版本的任务调度策略,包括DefaultScheduler的工作原理,详细介绍了Topology提交过程,以及任务如何在集群中被公平分配。在DefaultScheduler中,storm会考虑集群状态、可用slot和executor需求,进行任务与worker的匹配,以优化资源利用。然而,对于特定场景,如单一worker的topology连续提交,可能会导致资源分配不均衡。
摘要由CSDN通过智能技术生成

一、任务调度策略

     当我们将topology提交到storm集群的时候,任务是怎样分配的呢,这就需要理解storm的任务调度策略,这里主要给大家分享默认的调度策略DefaultScheduler,在storm的1.1.0版本已经支持4种调度策略,分别是DefaultScheduler,IsolationScheduler,MultitenantScheduler,ResourceAwareScheduler

二、Topology的提交过程

  在理解默认的调度策略之前,先看一下我们提交一个topology到集群的整个流程图。

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

   下面我们来看一下整个topolgoy提交过程的源代码

     Main方法里面的提交代码

StormSubmitter.submitTopology("one-work",config,builder.createTopology());

    然后调用下面方法

   

public static void submitTopologyAs(String name, Map stormConf, StormTopology topology, SubmitOptions opts, ProgressListener progressListener, String asUser)
            throws AlreadyAliveException, InvalidTopologyException, AuthorizationException, IllegalArgumentException {

     //配置文件必须能够被Json序列化
        if(!Utils.isValidConf(stormConf)) {
            throw new IllegalArgumentException("Storm conf is not valid. Must be json-serializable");
        }
        stormConf = new HashMap(stormConf);
     //将命令行的参数加入stormConf
        stormConf.putAll(Utils.readCommandLineOpts());
     //先加载defaults.yaml, 然后再加载storm.yaml
        Map conf = Utils.readStormConfig();
        conf.putAll(stormConf);
      //设置zookeeper的相关权限
        stormConf.putAll(prepareZookeeperAuthentication(conf));
        validateConfs(conf, topology);
        Map<String,String> passed
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值