Storm的并行度详解 Strom Topology执行分析:worker数,Bolt实例数,executor数,task数

strom之Worker、executor、task详解 Storm在集群上运行一个Topology时,主要通过以下3个实体来完成Topology的执行工作: 1. Worker(进程) 2. Executor(线程) 3. Task 下图简要描述了这3者之间的关系: 上图和下面这张图一样 看看官网的对这部分的讲解 Example of a running topology The following illust 阅读详情

 

2017年12月13日 21:07:01

阅读数:672

Storm的并行度详解

Storm的并行度是非常重要的,通过提高并行度可以提高storm程序的计算能力。

那strom是如何提高并行度的呢?

Strom程序的执行是由多个supervisor共同执行的。supervisor运行的是topology中的spout/bolt task

task  是storm中进行计算的最小的运行单位,表示是spout或者bolt的运行实例。

程序执行的最大粒度的运行单位是进程,刚才说的task也是需要有进程来运行它的,在supervisor中,运行task的进程称为worker,

Supervisor节点上可以运行非常多的worker进程,一般在一个进程中是可以启动多个线程的,所以我们可以在worker中运行多个线程,这些线程称为executor,在executor中运行task。

这样的话就可以提高strom的计算能力。

总结一下:worker>executor>task

要想提高storm的并行度可以从三个方面来改造

worker(进程)>executor(线程)>task(实例)

增加work进程,增加executor线程,增加task实例

 

看下面的图:

这表示是一个work进程,其实就是一个jvm虚拟机进程,在这个work进程里面有多个executor线程,每个executor线程会运行一个或多个task实例。一个task是最终完成数据处理的实体单元。(默认情况下一个executor运行一个task)

技术分享

worker,executor,task解释

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。

刚才从理论说明了如何提高集群的并行度,在这里我们就来看一下这些东西worker(进程)>executor(线程)>task(实例) 是如何设置的

l  worker(进程):这个worker进程数量是在集群启动之前配置好的,在哪配置的呢?是在storm/conf/storm.yaml文件中,参数是supervisor.slots.port,如果我们不在这进行配置的话,这个参数也是有默认值的,在strom-0.9.3的压缩包中的lib目录下,有一个strom-core.jar,打开这个jar文件,在里面有一个defaults.yaml文件中是有一些默认配置的。

技术分享

默认情况下一个storm项目只使用一个work进程,也可以通过代码进行修改,通过config.setNumWorkers(workers)设置。(最好一台机器上的一个topology只使用一个worker,主要原因时减少了worker之间的数据传输)

注意:如果worker使用完的话再提交topology就不会执行,因为没有可用的worker,只能处于等待状态,把之前运行的topology停止一个之后这个就会继续执行了,

技术分享

l executor(线程):默认情况下一个executor运行一个task,可以通过在代码中设置builder.setSpout(id,spout, parallelism_hint);或者builder.setBolt(id,bolt,parallelism_hint);来提高线程数的。

l task(实例):通过boltDeclarer.setNumTasks(num);来设置实例的个数

默认情况下,一个supervisor节点会启动4个worker进程。每个worker进程会启动1个executor,每个executor启动1个task。

Ok,这几个参数都可以使用一些方法进行增加。

下面来举个例子看一下对这些配置修改之后的效果

l  worker(进程),通过在代码中设置,可以在ui界面上查看worker的总数,并且还可以在linux服务器上执行jps查看work进程。

技术分享

在代码中设置使用3个worker,查看ui界面,发现workers是3个,executors使用了5个,为什么呢?因为每一个worker默认都会占用一个executor(这个executor会启动一个acker任务),这样就会占用三个,剩下的两个是spout和bolt实例占用了。

如果使用5个worker,executor会使用7个,因为worker本身就会占用5个,spout和bolt占用两个。

技术分享

Acker任务默认是每个worker进程启动一个executor线程来执行,,可以在topology中取消acker任务,这样的话就不会多出来一个executor和任务了。

代码如下:

实际上就是修改一个配置

topology.acker.executors

技术分享

这样的话在页面查看就只有两个executor和2个task了。

l  executor(线程),在spout和bolt中设置线程数,都设置为2个,查看ui界面

技术分享

现在使用的executor和tasks就是7个了,因为worker本身使用3个,spout和bolt分别使用2个。

技术分享

l  task(实例),在sum中设置实例个数为5,查看ui界面

技术分享

发现ui界面上显示的tasks是10,因为spout占用2个,bolt占用5个,剩下的3个由acker任务占用

技术分享

注意:虽然在这设置了多个task实例,但是并行度并没有很大提高,因为只有两个线程去运行这些实例,只有设置足够多的线程和实例才可以真正的提高并行度。

在这设置多个实例主要是为了下面执行rebalance的时候用到,因为rebalance不需要修改代码,就可以动态修改topology的并行度,这样的话就必须提前配置好多个实例,在rebalance的时候主要是对之前设置多余的任务实例分配线程去执行。

在命令行动态修改并行度

除了使用代码进行调整,还可以在shell命令行下对并行度进行调整。

storm rebalance mytopology -w 10 -n 2 -e spout=2 -e bolt=2

表示 10秒之后对mytopology进行并行度调整。把spout调整为2个executor,把bolt调整为2个executor

注意:并行度主要就是调整executor的数量,但是调整之后的executor的数量必须小于等于task的数量,如果分配的executor的线程数比task数量多的话也只能分配和task数量相等的executor。

 

 

在创建Storm的Topology时,我们通常使用如下代码:

 

[java] view plain copy

  1. builder.setBolt("cpp", new CppBolt(), 3).setNumTasks(5).noneGrouping(pre_name);  
  2.   
  3. Config conf = new Config();  
  4. conf.setNumWorkers(3);  


参数1:bolt名称 "cpp"

 

参数2:bolt类型 CppBolt

参数3:bolt的并行数,parallelismNum,即运行topology时,该bolt的线程数

setNumTasks() 设置bolt的task数

noneGrouping()  设置输入流方式及字段

conf.setNumWorkers()设置worker数据。

 

经过多次试验总结,得出如下结论:

1)Topology的worker数通过config设置,即执行该topology的worker(java)进程数。它可以通过storm rebalance 命令任意调整。

2) Topology中某个bolt的executor数,即parallelismNum,即执行该bolt的线程数,在setBolt时由第三个参数指定。它可以通过storm rebalance 命令调整,但最大不能超过该bolt的task数;

3) bolt的task数,通过setNumTasks()设置。(也可不设置,默认取bolt的executor数),无法在运行时调整。

4)Bolt实例数,这个比较特别,它和task数相等。有多少个task就会new 多少个Bolt对象。而这些Bolt对象在运行时由Bolt的thread进行调度。也即是说

 

[java] view plain copy

  1. builder.setBolt("cpp", new CppBolt(), 3).setNumTasks(5).noneGrouping(pre_name);  

会创建3个线程,但有内存中会5个CppBolt对象,三个线程调度5个对象。

《爬虫和逆向教程》 - 专栏介绍和目录 本专栏为爬虫初学者和进阶开发者量身定制的爬虫和逆向学习园地。为你提供全面而深入的爬虫和逆向技术指导,从入门到精通,从基础理论到高级实战,助你在数据的海洋中畅游,挖掘出有价值的信息。通过本专栏的学习,你将具备独立开发和优化爬虫程序的能力,及逆向分析能力和项目开发能力,成为爬虫领域的佼佼者。 阅读详情

相关推荐

【Unity】Unity性能分析解决方案——UPR

由Unity中国团队提供的一套性能优化解决方案,其是一系列性能工具的集合,并可将收集的数据进行可视化。

Davidorzs的博客 1008

【转】Storm并行度详解

1、Storm并行度相关的概念 Storm集群有很多节点,按照类型分为nimbus(主节点)、supervisor(从节点),在conf/storm.yaml中配置了一个supervisor,有多个槽(supervisor.slots.ports),每个槽就是一个JVM,就是一个worker(一个节点,运行一个worker),在每个worker里面可以运行多个线程叫做executor,在ex...

weixin_30905981的博客 318

音乐频谱灯的硬件艺术:从STM32到SK9822LED的工程美学

本文探讨了基于STM32微控制器和SK9822 LED的音乐频谱灯硬件设计与实现。通过ADC采集音频信号,利用FFT算法进行频谱分析,并驱动LED阵列呈现动态视觉效果,展现了硬件工程与艺术美学的完美融合。

Pepper的专栏 215

storm并行度

    1.storm并行度  storm的并行是由非常多的supervisor完成的。  storm的supervisor运行的是topology中的spout/bolt task。  task是storm中进行计算的最小的运行单位,表示的是spout、bolt的运行实例。  程序执行的最大粒度的运行单位是进程。在supervisor中,运行task的进程称作worker。  super...

后知后觉的it路 303

STK中的传感器、雷达、发射机、接收机、天线

本文根据STK手册介绍了传感器、雷达、发射机、接收机、天线等对象的基本属性,简略分析了它们的不同之处。

wangyulj的专栏 1万+

ICME 2026 即插即用 | 特征增强篇 | FSD:多尺度小波分解+频域特征融合,结构细节纹理均增强,性能猛涨!

本文提出了一种基于频域结构解耦和区域感知融合的双路径学习框架(FSD),用于低光图像超分辨率任务。该框架通过多尺度小波变换将输入图像分解为低频亮度结构和高频纹理细节两个正交分量,并采用双路径网络分别处理这两个分量,最后通过跨频段语义重组模块实现特征融合。实验表明,FSD模块在多项指标上显著优于现有方法,能有效提升图像的结构自然度和细节清晰度。该模块适用于对频域/结构/纹理敏感的视觉任务,可直接嵌入网络实现端到端训练。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 140

【五】storm调优,调整并行度

实际上就是用多线程。没有真的对集群做扩容。官网介绍http://storm.apache.org/releases/1.1.2/Understanding-the-parallelism-of-a-Storm-topology.htmlstorm中运行topology的实体主要有三个:worker processes:    一个supervisor可以启多个worker。一个topology可以...

Sid小杰的博客 2252

基于Python实现人脸识别相似度对比

随着人工智能技术的不断进步,人脸识别成为了一种广泛应用的技术。人脸相似度对比是其中的一个重要应用场景,可以用于人脸搜索、身份验证等方面。本文将介绍如何使用Python实现人脸相似度对比。

商务合作 / 项目定制 / 学习交流。个人vx:lovely_wml 9809

storm性能调优-并行度

storm关于并行度的调优策略

qq_64408956的博客 593

Challenge 4 - OSCP A

在c盘下发现一个windows.old,在里面可以找到SYSTEM和SAM文件,下载到本地,利用samdump2解密发现没解出来,再来试试pwdump.py(https://github.com/CiscoCXSecurity/creddump7)得到压缩包密码bludecode,解压之后发现一个比较特殊的文件configuration.php,里面有两个类似密码的字符串。登录之后在/opt/backups/下发现几个特殊文件,其中sitebackup3.zip是个正常的压缩包。但是这个压缩包是有密码的。

羽的博客 5783

python抓取美团外卖的数据(商家、评分、评论)

本文详细介绍了如何使用Selenium和抓取美团外卖的商家、评分和评论数据。我们从基础的爬虫原理入手,分析了美团外卖的网页结构,提出了应对反爬虫机制的策略,并给出了详细的代码实现。通过使用Selenium,我们能够绕过动态加载内容的限制,直接抓取网页中的商家信息和评论。结合多线程和代理池等技术,我们可以进一步提高爬虫效率,并避免IP被封禁。未来,随着爬虫技术的发展,我们可以进一步探索深度抓取、数据清洗和数据分析等高级应用,以实现更智能的网页数据抓取。

2201_76125261的博客 2695

Apache Storm 详细配置指南

可选值为 “org.apache.storm.scheduler.resource.strategies.scheduling.DefaultResourceAwareStrategy”(默认)或 “org.apache.storm.scheduler.resource.strategies.scheduling.GenericResourceAwareStrategy”。(1) topology.worker.max.heap.size.mb: 为每个 Worker 进程分配的最大堆内存(MB)。

宋志辉的博客 553

一文学会python基础知识

1. python 运行环境 1.1 脚本式环境 1.2 交互式环境 2. python 注释 3. 变量及变量命名 4. 关键词 BIFS 5. 标准操作符 6. 条件判断 7. 循环 8. python 数据类型 9. python 序列 9.1 序列-字符串(str) 9.2 序列-列表 9.3 序列-元组 10. 字典 11. 集合 12. python内存管理及可变、不可变对象 13. 函数 13.1 函数参数 13.2 return and yiled(生成器) 13.3 参数传递处理 ...

weixin_43178406的博客 26万+

Storm的并行度详解 Strom Topology执行分析:worker数,Bolt实例数,executor数,task数

Storm的并行度详解 Storm的并行度是非常重要的,通过提高并行度可以提高storm程序的计算能力。 那strom是如何提高并行度的呢? Strom程序的执行是由多个supervisor共同执行的。supervisor运行的是topology中的spout/bolt task task  是storm中进行计算的最小的运行单位,表示是spout或者bolt的运行实例。 程序执行的最大...

qq_36864672的博客 9504

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

strom中worker、task、spout/bolt、executor、component的关系

整理一下网上有关worker、task、spout/bolt、executor、component的关系

fzhmoive的专栏 1万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

Strom Topology执行分析:worker数,Bolt实例数,executor数,task数

原创文章,转载请注明出处: 在创建Storm的Topology时,我们通常使用如下代码: builder.setBolt("cpp", new CppBolt(), 3).setNumTasks(5).noneGrouping(pre_name); Config conf = new Config(); conf.setNumWorkers(3); 参数1:bolt名称

jmppok的专栏 9335

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

strom中Worker与Task关系

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

u014545085的博客 419

(大数据之storm)strom中worker、task、spout/bolt、executor、component的关系

整理一下网上有关worker、task、spout/bolt、executor、component之间的关系。 Storm在集群上运行一个Topology时,主要通过以下3个实体来完成Topology的执行工作: 1. Worker(进程) 2. Executor(线程) 3. Task 下图简要描述了这3者之间的关系: 1个worker进程执行的是1个

yuxiang1014的专栏 2072

Storm的并行度详解

文章来源:http://www.bubuko.com/infodetail-822074.html Storm的并行度详解 Storm的并行度是非常重要的,通过提高并行度可以提高storm程序的计算能力。 那strom是如何提高并行度的呢? Strom程序的执行是由多个supervisor共同执行的。supervisor运行的是topology中的spout/b

小海的专栏 7252

Strom简介及处理过程

简介 Storm是Twitter开源的一个类似于Hadoop的实时数据处理框架。 Storm能实现高频数据和大规模数据的实时处理。 官网资料显示storm的一个节点1秒钟能够处理100万个100字节的消息(IntelE5645@2.4Ghz的CPU,24GB的内存) Storm与Hadoop比较 数据来源:HADOOP处理的是HDFS上TB级别的历史数据数据,STORM处理的是实

dwei068的博客 804

【Storm】【六】Web UI

比较简单,就略过了。

鸟人的博客 345
上一篇: bolt BaseBasicBolt BaseRichBolt
下一篇: Java内存溢出问题总结
王树民
博客等级 码龄10年 912粉丝 560原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值