Storm 并行度分配原理及优化
来源:互联网 发布:java导入jar包 编辑:程序博客网 时间:2024/05/01 13:26
当一个topology在storm cluster中运行时,它的并发主要跟3个逻辑对象相关:worker,executor 和task
1. Worker 是运行在工作节点上面,被Supervisor守护进程创建的用来干活的JVM进程。每个Worker对应于一个给定topology的全部执行任务的一个子集。反过来说,一个Worker里面不会运行属于不同的topology的执行任务。
2. Executor可以理解成一个Worker进程中的工作线程。一个Executor中只能运行隶属于同一个component(spout/bolt)的task。一个Worker进程中可以有一个或多个Executor线程。在默认情况下,一个Executor运行一个task。
3. Task则是spout和bolt中具体要干的活了。一个Executor可以负责1个或多个task。每个component(spout/bolt)的并发度就是这个component对应的task数量。同时,task也是各个节点之间进行grouping(partition)的单位。
conf.setNumWorkers(workers); //设置worker数量
uilder.setBolt("2", new WordSpliter(),4) //设置Executor并发数量
builder.setBolt("2", new WordSpliter(),4).setNumTasks(1); //设置每个线程处理的Task数量
任务分配时有两种情况:
{1: [host1:port1] 2 : [host2:port1]
3 : [host1:port1] 4 : [host2:port1]}
可以看到任务平均地分配在两个worker上。3 : [host1:port1] 4 : [host2:port1]}
(b)如果task数目比worker少,例如task是[1 2],而worker有[host1:port1 host1:port2 host2:port1 host2:port2],那么首先会将woker排序,将不同host间隔排列,保证task不会全部分配到同一个机器上,也就是将worker排列成
[host1:port1 host2:port1 host1:port2 host2:port2]
然后分配任务为{1: host1:port1 , 2 : host2:port1}
通过Config.setNumWorkers(int))来指定一个storm集群中执行topolgy的进程数量, 所有的线程将在这些指定的worker进程中运行. 比如说一个topology中要启动300个线程来运行spout/bolt, 而指定的worker进程数量是60个, 那么storm将会给每个worker分配5个线程来跑spout/bolt, 如果要对一个topology进行调优, 可以调整worker数量和spout/bolt的parallelism数量(调整参数之后要记得重新部署topology. 后续会为该操作提供一个swapping的功能来减小重新部署的时间).
对于worker和task之间的比例, nathan也给出了参考, 即1个worker包含10~15个左右, 当然这个参考, 实际情况还是要根据配置和测试情况
实际上woker的实际运行数量受限于setworker配置和supervisor.slots.ports两个配置
0 0
- Storm 并行度分配原理及优化
- storm并行度优化
- storm 并行度
- 008-storm并行度
- Storm并行度理解
- Storm并行度详解
- Storm并行度
- Storm并行度编程
- storm并行度详解
- Storm并行度
- storm-并行度
- storm架构及原理
- Storm的并行度详解
- storm教程(四):storm策略和storm并行度
- storm 基本结构及原理
- storm分区,并行度笔记- Introducing parallelism in Storm
- Jstorm与Storm中的并行度区分
- Storm(五)拓扑并行度
- cnpm的使用
- 14.1 多线程(1)
- 基于matlab的边缘提取方法的比较
- spring事件驱动模型--观察者模式在spring中的应用
- vi,vim 常用的快捷键
- Storm 并行度分配原理及优化
- Android Studio之基本Gradle使用
- 如何使用FL Studio中的时间标记
- java开发操作系统:进程间的消息通讯
- 获取手机的分辨率
- Excel-001 常用公式汇总
- (C++)函数参数传递中的一级指针和二级指针【【**】】
- iClient for JavaScript---客户端统计专题图
- SQL号段整理