第1节 storm编程:7、并行度分析以及如何解决线程安全问题

storm其实就是一个多进程与多线程的框架

开多个进程:分配到的资源更多

开多个线程:执行的速度更快

设置进程个数以及线程个数

============================================

7. storm的并行度

 

config.setNumWorkers(1);

topologyBuilder.setSpout("mySpout", new RandomSpout(),3);

topologyBuilder.setBolt("splitBolt", new SplitBolt(),3).shuffleGrouping("mySpout");

topologyBuilder.setBolt("countBolt", new CountBolt(),3).setNumTasks(4).shuffleGrouping("splitBolt");

Storm当中的worker,executor,task之间的相互关系

Worker:表示一个进程

Executor:表示由worker启动的线程

一个worker只会负责一个topology任务,不会出现一个worker负责多个topology任务的情况。

一个worker进程当中,可以启动多个线程executor,也就是说,一个worker进程可以对应多个executor线程

task 是实际执行数据处理的最小工作单元(注意,task 并不是线程) —— 在你的代码中实现的每个 spout 或者 bolt 都会在集群中运行很多个 task。在拓扑的整个生命周期中每个组件的 task 数量都是保持不变的,不过每个组件的 executor 数量却是有可能会随着时间变化。在默认情况下 task 的数量是和 executor 的数量一样的,也就是说,默认情况下 Storm 会在每个线程上运行一个 task

注:调整task的数量,并不能够实际上提高storm的并行度,因为storm不管是spout还是bolt当中的代码都是串行执行的,就算一个executor对应多个task,这多个task也是串行去执行executor当中的代码,所以这个调整task的个数,实际上并不能提高storm的并行度

在实际工作当中,由于spout与bolt的数量不能够精准确定,所以需要随时调整spout与bolt的数量,所以在storm当中,我们可以通过命令来动态的进行调整

storm rebalance mytopo -n 3 -e mySpout=5 -e splitBolt=6 -e countBolt=8

一定要注意:重新调整的时候=号两边不要有空格

猜你喜欢

转载自www.cnblogs.com/mediocreWorld/p/11235388.html