• storm基础系列之一----storm并发度概念剖析


    前言:

    学了几天storm的基础,发现如果有hadoop基础,再理解起概念来,容易的多。不过,涉及到一些独有的东西,如调度,如并发度,还是很麻烦。那么,从这一篇开始,力争清晰的梳理这些知识。

     在正式学习并发之前,有必要先明确几个基本概念的定义,以及具体作用。

    一、基础概念

    1.1 Topology 原意拓扑。可以把他理解为是hadoop中的job,他是把一系列的任务项组装后的一个结果。

    1.2 Spout 是任务的一种,作用是读取数据,然后组装成一定的格式,发射出去。

    1.3 Bolt 是另一种任务,接收Spout或者上级Bolt发射的任务,进行处理。处理后,也有发射功能,当然如果已经处理完成,也可以作为叶子节点不再发射。

    1.4 worker 进程,占用独立的jvm,每台机器都可以拥有多个worker。一个Topology,出于分布式的设计,都会把任务分配到多台机器去执行。那么,相应的,也就是分给了一组可能不在同一台机器上的worker。 反过来理解,一个worker里有一个Topology的任务集合的子集,注意不会再包含另一个Topology的任务。

    如图:

    1.5 executor 执行者,就是我们在代码里,setspout或setbolt时,指定的数值。可以把他看做是线程。在一个work进程里,可以有多个线程。 每个组件component (spout或bolt)由一个或多个executor来执行。这一层概念,是细化到了Topology的内层,也就是具体每个Spout、Bolt上了。也就是说,这一段代码要并行执行的数目。

    1.6 task 具体的逻辑处理单元。或者可以叫任务。有多少个task就实例化多少个组件(注意,实例化并不是执行,执行由executor来负责),通常情况下,一个executor线程可以执行一个或同时执行多个task任务,默认是一个。 task数不会改变,而executor数会变。当task数更大些时,实际并发数就是executor的数目。从这里可以看出,task也是从具体的组件层面来定义的。task是一个静态的概念,而executor是动态的概念,是执行者,比如,我配置了task=100,那么就有100个任务等待执行,我再配置executor=10,这意思就是有十个执行者(即10个线程)并发来执行者100个task(内存有100个对象,供调度执行)。

    需要指出的是,executor的数量应该小于等于task数量。task可以不设置,不设置默认就是取的executor的数量。

    这里有一张经典的图:

    这张图中有一点可以指出,右边的那个executor里,是有两个task的,在这个线程里,会循环调用这两个task,不过这两个task应该是对应同一个组件的。

    1.7 component 组件,值得是spout或者bolt。

    1.8 nimbus 任务分发调度者,相当于JobTracker。

    1.9 supervisor 作业执行者,相当于taskTracker。

    二、并发度配置

    2.1 理清了上述的概念,那么接下来我们梳理下,并发度配置的相关细节:

    worker,可在代码中或配置文件中配置。数目最好大于机器数目。conf.setNumWorkers(2)

    executor,代码中配置,setBolt(),setSpout()

    task数目,代码中配置,setNumTasks()如果不配置,默认取executor数目。

    2.2 动态改变并发度

    可变的是worker和executor的数目,可通过命令或者webUI

    其中命令的为:

    storm rebalance mytopology -n 5 -e blue-spout=3 -e yellow-bolt=10

    以上就是关于storm一些基本概念,以及概念之间的联系。

    因为今天提交了两个Topology,出现了一些错误,于是重新回顾这个关系:

    再次总结:

    每个worker只会处理一种Topology里的component。

    可能是多个worker一起处理一个Topology。

    executor是线程,处理具体的component。

    task是具体component的实例,可以不指定,不设定的时候,num就是executor的数量。

  • 相关阅读:
    XMPP即时通讯资料记录
    iOS 图片裁剪与修改
    iOS开发xcode报错:"xxxxxx"has been modified since the precompiled header was built
    模糊数学课件(清晰易懂)
    几个可用于数据挖掘和统计分析的java库
    java中list集合的内容,如何使用像数据库中group by形式那样排序
    spark java 代码example
    spark 编程向导
    一个深度学习博客
    Selenium2(WebDriver)_如何判断WebElement元素对象是否存在
  • 原文地址:https://www.cnblogs.com/xyang/p/5614235.html
Copyright © 2020-2023  润新知