storm系列2:并行度和资源分配

并行度相关概念

  和spark driver、work、executor一样,storm也有一套自己的概念。Storm集群中的节点可以分为两类:主节点nimbus,从节点supervisor。nimbus主要负责分配计算资源,supervisor主要负责执行client提交的任务。supervisor节点在运行任务时,涉及到以下三个概念:worker、executor、task。

worker

  supervisor在执行任务时,会启动一个或者多个jvm进程,这些进程统称为worker。默认情况下一个supervisor最多可以启动4个worker,也可以通过修改storm.yaml参数进行修改。因为topology最终都是通过worker来执行的,所以nimbus并不关心有几个supervisor,只关心有多少个worker,至于worker分配在哪个节点上,nimbus是不关心的。需要说明的是,一个worker只能同时运行一个topology,如果在该worker运行时又有topology提交,nimbus会将其分配给其他空闲的worker。

executor

  在一个jvm进程中,有时候我们会开启多个线程执行任务,这里executor的概念就是线程的概念。

task

  executor中运行的topology的一个component,如spout、bolt,叫做task,task是storm中进行计算的最小运行单位,表示spout和bolt的运行实例。

资源设置的注意事项

worker

  worker个数的增加,会导致worker之间数据传输时间增加。如果程序瓶颈在于待处理的元组数据太多算力不足,那么通过可以通过增加worker个数提高计算效率。

executor

  executor是真正的并行度。executor初始数量=spout数量+bolt数量+acker数量,也就是task个数,默认一个executor对应一个task。其中spout、bolt、acker数量运行时是不会变化的,但是executor数量是可以变化的。

task

  task的存在是为了topology扩展的灵活性,与并行度无关。task在实际执行数据处理。如果单纯提高task个数,不增加executor个数,并不一定能提高性能。提高task任务数量,可以为后期进行弹性计算(rebalance)即后期动态调整某一组件的并行度。

并行度计算

计算并行度官网有个比较好的例子



上图中,有2个worker进程,

  • 蓝色的BlueSpout有2个executor进程,每个executor有1个task,并行度为2;
  • 绿色的GreenBolt有2个executor进程,每个executor有2个task,并行度为2;
  • 黄色的YellowBolt有6个executor进程,每个executor有1个task,并行度为6;
  • 上图总平行度是2+2+6=10,具体分配到每个worker上就是5个
-------------本文结束感谢您的阅读-------------

本文标题:storm系列2:并行度和资源分配

文章作者:小建儿

发布时间:2018年08月22日 - 15:08

最后更新:2018年08月22日 - 16:08

原始链接:http://yajian.github.io/storm系列2-并行度和资源分配/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。