zoukankan      html  css  js  c++  java
  • Storm中并发程度的理解

    Storm中涉及到了很多组件,例如nimbus,supervisor等等,在参考了这两篇文章之后,对这个有了更好的理解。

    Understanding the parallelism of a Storm topology

    https://github.com/nathanmarz/storm/wiki/Understanding-the-parallelism-of-a-Storm-topology

    http://www.cnblogs.com/yufengof/p/storm-worker-executor-task.html

    我们先理一下概念:

    1. 一般对于物理节点来讲,我们部署的节点的类型包括nimbus(master),supervisor(slave),通常是一个nimbus,多个supervisor。nimbus是负责安排任务给supervisor去完成的,即supervisor是实际上干活的。
    2. 而对于一个supervisor来讲,它可以包含多个worker,worker有可以包含多个executor,executor又可以执行多个task。

    这样一说就有点乱,因为这个worker、executor、task和topology,spout和bolt之间又是怎么样的对应关系呢??

    首先看下面一张图

                   

    supervisor和node是一一对应的关系,而worker就是process(进程),executor就是thread(线程),task就是在spout或bolt中定义的函数。

    这样就好理解了,这些从上到下都是一对多的关系。

    那supervisor,worker和executor跟topology或component(包括spout和bolt)之间的对应关系呢?

    1. 一个topology可以在多个supervisor上执行,一个supervisor也可以执行多个topology
    2. 但是,一个worker只执行某个topology,一个topology由多个worker来执行
    3. 一个executor可以执行一个component中的多个task,但是一个component可以由多个executor来执行,这就是我们在编程中指定的并发程度。后面会看到。
    4. 一个executor默认对应一个task
    5. 一个worker中包含多个executor,但是这些executor不一定都是用来处理同一个component

    我们看storm wiki中的一张图片来解释

                        

    对于这个topology,

    1. 它包含3个component,1个spout,2个bolt
    2. 它包含2个worker process,10个executor thread,12个task
    3. 同颜色属于同一个component
     1 Config conf = new Config();
     2 conf.setNumWorkers(2); // use two worker processes
     3 
     4 topologyBuilder.setSpout("blue-spout", new BlueSpout(), 2); // set parallelism hint to 2
     5 
     6 topologyBuilder.setBolt("green-bolt", new GreenBolt(), 2)
     7                .setNumTasks(4)
     8                .shuffleGrouping("blue-spout");
     9 
    10 topologyBuilder.setBolt("yellow-bolt", new YellowBolt(), 6)
    11                .shuffleGrouping("green-bolt");
    12 
    13 StormSubmitter.submitTopology(
    14         "mytopology",
    15         conf,
    16         topologyBuilder.createTopology()
    17     );

    代码如上,worker process,executor thread,task这些的数目都可以进行设置。

    所以接下来我们应该会关心一个topology默认对应的worker数是多少?一个executor默认对应的task数是多少?

    更重要的是,我们在编码过程中已经指定了worker process数和exector thread数,但是这两个数可以在运行时被修改,以更好地适应负载的变化!这样的方式叫做rebalance!

    它能够修改worker的数目,也就是说我们是否可以通过监控,来实现自动水平拓展呢??例如结合IaaS,加一个supervisor节点加入到集群中?同时启动对应的worker进程,当负载低的时候,收回对应的supervisor节点,将虚拟机返回到对应的VM池里呢??

    注意一点是:Task的数目在启动后就不能变了,但是可以改executor,即执行的线程数,所以executor数一定是小于等于task数,才能保证每一个executor至少有一个task可以运行.

    所以对于task数太少,后期也无法提高太多!

    1. 第一种方式是使用storm的UI
    2. 第二种方式是使用CLI tool来修改
    # Reconfigure the topology "mytopology" to use 5 worker processes,
    # the spout "blue-spout" to use 3 executors and
    # the bolt "yellow-bolt" to use 10 executors.
    
    $ storm rebalance mytopology -n 5 -e blue-spout=3 -e yellow-bolt=10

    具体请参考wiki的文章

  • 相关阅读:
    document.getElementById("mytxt").style.left=""style.left在IE的FF中注意
    asp.net 用户控件中 使用相对路径的解决方法 图片路径问题(用户控件、图片路径) ,ResolveUrl
    探索 Block (一) (手把手讲解Block 底层实现原理)
    iOS 多线程开发 (概念与API简介)
    iOS 性能小点
    iOS runtime (二)(runtime学习之AutoCoding源码分析)
    探索 NSRunLoop (二)(NSRunLoop 自己动手实现SimpleRunLoop)
    iOS NSNotificationCenter (自己实现一个通知中心XMCNotificationCenter)
    iOS runtime (三)(runtime学习之YYModel源码分析)
    iOS runtime(一)(runtime 分析理解)
  • 原文地址:https://www.cnblogs.com/longshaohang/p/3561492.html
Copyright © 2011-2022 走看看