strom之Worker、executor、task详解

Storm在集群上运行一个Topology时,主要通过以下3个实体来完成Topology的执行工作:

1. Worker(进程)

2. Executor(线程)

3. Task

下图简要描述了这3者之间的关系:

上图和下面这张图一样

看看官网的对这部分的讲解

Example of a running topology

The following illustration shows how a simple topology would look like in operation. The topology consists of three components: one spout called BlueSpout and two
bolts called GreenBolt and YellowBolt. The components are linked
such that BlueSpout sends its output to GreenBolt, which in turns
sends its own output to YellowBolt.

The GreenBolt was configured as per the code snippet above whereas BlueSpout and YellowBolt only
set the parallelism hint (number of executors). Here is the relevant code:

Config conf = new Config();
conf.setNumWorkers(2); // use two worker processes

topologyBuilder.setSpout("blue-spout", new BlueSpout(), 2); // set parallelism hint to 2

topologyBuilder.setBolt("green-bolt", new GreenBolt(), 2)
               .setNumTasks(4)
               .shuffleGrouping("blue-spout");

topologyBuilder.setBolt("yellow-bolt", new YellowBolt(), 6)
               .shuffleGrouping("green-bolt");

StormSubmitter.submitTopology(
        "mytopology",
        conf,
        topologyBuilder.createTopology()
    );

1个worker进程执行的是1个topology的子集(注:不会出现1个worker为多个topology服务)。1个worker进程会启动1个或多个executor线程来执行1个topology的component(spout或bolt)。因此,1个运行中的topology就是由集群中多台物理机上的多个worker进程组成的。

executor是1个被worker进程启动的单独线程。每个executor只会运行1个topology的1个component(spout或bolt)的task(注:task可以是1个或多个,storm默认是1个component只生成1个task,executor线程里会在每次循环里顺序调用所有task实例)。

task是最终运行spout或bolt中代码的单元(注:1个task即为spout或bolt的1个实例,executor线程在执行期间会调用该task的nextTuple或execute方法)。topology启动后,1个component(spout或bolt)的task数目是固定不变的,但该component使用的executor线程数可以动态调整(例如:1个executor线程可以执行该component的1个或多个task实例)。这意味着,对于1个component存在这样的条件:#threads<=#tasks(即:线程数小于等于task数目)。默认情况下task的数目等于executor线程数目,即1个executor线程只运行1个task。

那么一个excutor处理多个task,有什么用?一种理解的是可以方便以后扩容。首先要知道,topology代码一旦提交到nimbus上去之后,task数量随之而定,以后永不再改变,甚至重启topology,都不会再改变task数量,除非改代码,再重新提交。而设置并行度就不一样了,我们不需要重新提交代码,就可以修改topology的并发,可以随时修改。但一个executor必须要处理一个task,如果以前我们默认有4个executor,4个task,即一个executor处理一个task,好了,我现在感觉现在并发不够,处理速度跟不上,想调高一些并发,调为8个,但task数量只有4个,多出来的executor也只是闲着,所以调高并发也没卵用了。如果我设置task数量为8,一开始并发度为4,一个executor必须执行2个task,速度慢了,我把并发度改为8,一个executor只执行一个task,速度比刚刚快了

时间: 2024-10-06 19:44:40

strom之Worker、executor、task详解的相关文章

Android Gradle 自定义Task 详解

转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/76408024 本文出自[赵彦军的博客] 一:Gradle 是什么 Gradle是一个基于Apache Ant和Apache Maven概念的项目自动化构建工具. 它使用一种基于Groovy的特定领域语言(DSL)来声明项目设置,抛弃了基于XML的各种繁琐配置.面向Java应用为主. 当前其支持的语言限于Java.Groovy.Kotlin和Scala,计划未来将支持更多的语言.基

Spark技术内幕:Executor分配详解

当用户应用new SparkContext后,集群就会为在Worker上分配executor,那么这个过程是什么呢?本文以Standalone的Cluster为例,详细的阐述这个过程.序列图如下: 1. SparkContext创建TaskScheduler和DAG Scheduler SparkContext是用户应用和Spark集群的交换的主要接口,用户应用一般首先要创建它.如果你使用SparkShell,你不必自己显式去创建它,系统会自动创建一个名字为sc的SparkContext的实例.

Java线程池Executor框架详解

Java的线程既是工作单元,也是执行机制.从JDK 5开始,把工作单元与执行机制分离开来.工作单元包括Runnable和Callable,而执行机制由Executor框架提供. Executor框架简介在HotSpot VM的线程模型中,Java线程(java.lang.Thread)被一对一映射为本地操作系统线程.Java线程启动时会创建一个本地操作系统线程:当该Java线程终止时,这个操作系统线程也会被回收.操作系统会调度所有线程并将它们分配给可用的CPU.在上层,Java多线程程序通常把应

Activity中Task详解

来源:http://blog.csdn.net/liuhe688/article/details/6761337 今天我们来讲一下Activity的task相关内容. 上次我们讲到Activity的四种启动模式的时候,已经了解到一些关于task的技术,今天我再向大家介绍一下. task是一组Activity实例组成的栈: task是一个具有栈结构的容器,可以放置多个Activity实例.启动一个应用,系统就会为之创建一个task,来放置根Activity.默认情况下,一个Activity启动另一

Linux Apache prefork和worker的原理详解

prefork(多进程,每个进程产生子进程)和worker(多进程,每个进程生成多个线程)    prefork的工作原理是,控制进程在最初建立“StartServers”个子进程后,为了满足MinSpareServers设置的需要创建一个进程,等待一秒钟,继续创建两个,再等待一秒钟,继续创建四个……如此按指数级增加创建的进程数,最多达到每秒32个,直到满足MinSpareServers设置的值为止.这就是预派生(prefork)的由来.这种模式可以不必在请求到来时再产生新的进程,从而减小了系统

[NIO]dawn之Task详解

在上篇文章中,我们设置好了开发环境,接下来,我们将在了解了Task以及Buffer之后,再开始了解网络编程.我们首先来看看Task package zhmt.dawn; import kilim.Pausable; import kilim.Scheduler; import kilim.Task; //继承kilim.Task public class HelloWorld extends Task{ //覆盖execute,注意这里的Pausable异常,这个异常必须抛出,不能捕捉(实际上也

Storm的并行度详解

Storm的并行度是非常重要的,通过提高并行度可以提高storm程序的计算能力. 那strom是如何提高并行度的呢? Strom程序的执行是由多个supervisor共同执行的.supervisor运行的是topology中的spout/bolt task task  是storm中进行计算的最小的运行单位,表示是spout或者bolt的运行实例. 程序执行的最大粒度的运行单位是进程,刚才说的task也是需要有进程来运行它的,在supervisor中,运行task的进程称为worker, Sup

理解storm的并行执行,workder,executor,task的关系以及调度算法

官方对storm中worker,executor,task讲解非常清楚,https://github.com/nathanmarz/storm/wiki/Understanding-the-parallelism-of-a-Storm-topology  转载到个人博客上.一图胜千言: Storm distinguishes between the following three main entities that are used to actually run a topology in

apache两种工作模式详解

prefork模式 这个多路处理模块(MPM)实现了一个非线程型的.预派生的web服务器,它的工作方式类似于Apache 1.3.它适合于没有线程安全库,需要避免线程兼容性问题的系统.它是要求将每个请求相互独立的情况下最好的MPM,这样若一个请求出现问题就不会影响到其他请求. 这个MPM具有很强的自我调节能力,只需要很少的配置指令调整.最重要的是将MaxClients设置为一个足够大的数值以处理潜在的请求高峰,同时又不能太大,以致需要使用的内存超出物理内存的大小. worker模式 此多路处理模