- apache-storm/
- Apache storm ApacheStorm:LOCAL_或_SHUFFLE不将工作推给其他执行者
Apache storm ApacheStorm:LOCAL_或_SHUFFLE不将工作推给其他执行者
Apache storm ApacheStorm:LOCAL_或_SHUFFLE不将工作推给其他执行者,apache-storm,Apache Storm,我一直在使用storm拓扑设置,以便在不出现OutOfMemory错误的情况下实现最大吞吐量
我的设置:
3节点风暴(v1.0.1)集群。显然,一个节点也是主节点,部署在AWS m3.2x大型实例上。共有12名工作人员(每个节点4名):
每个辅助进程有4 GB堆空间:
worker.heap.memory.mb: 4096
特别是我的一个螺栓,我们称之为:HashingBolt有一个并行性提示12
这将创建12个执行器,每个执行器一个任务(因为我使用Flux来配置/部署)。
HashingBo
我一直在使用storm拓扑设置,以便在不出现OutOfMemory错误的情况下实现最大吞吐量
我的设置:
3节点风暴(v1.0.1)集群。显然,一个节点也是主节点,部署在AWS m3.2x大型实例上。共有12名工作人员(每个节点4名):
每个辅助进程有4 GB堆空间:
worker.heap.memory.mb: 4096
特别是我的一个螺栓,我们称之为:HashingBolt
有一个并行性提示12
这将创建12个执行器,每个执行器一个任务(因为我使用Flux来配置/部署)。
HashingBolt
的流类型为LOCAL\u或\u SHUFFLE
我期待的是:
在Storm UI中单击HashingBolt
时,我希望在Executors(所有时间)部分下看到12行-每个executor一行-每行都有内容
我希望storm首先最大化4个本地执行器(在主节点上,因为local\u或\u SHUFFLE
更喜欢本地执行器,如果可用),然后恢复到SHUFFLE并开始最大化其他两个节点上的执行器
我看到的是:
只有4名遗嘱执行人做过任何事。所有其他的都是空闲的,从来没有确认/发出任何东西。我假设这是因为这4名遗嘱执行人是当地人,他们是优先考虑的
现在,如果我将流类型更改为SHUFFLE,那么——当然——所有执行器都会工作,吞吐量也会增加
我的问题是:
我的猜测正确吗?这4位遗嘱执行人是当地人吗?还是说这是在转移注意力
为什么在LOCAL\u或\u SHUFFLE
中没有使用其他执行器?是
这是因为做这项工作的4名执行人没有
马克斯已经够了吗
如果4名当地遗嘱执行人没有得到足够的保护,我该怎么做?这与流缓冲区大小有关吗?我应该减少/增加等吗
如果我将worker的数量更改为3(每个节点一个),那么我会开始看到在LOCAL\u或\u SHUFFLE
模式下将工作推送到远程worker吗
任何见解或建议都将不胜感激
补充以下答案
除了下面选择的答案外,我相信选择平行排列的螺栓上的SHUFFLE,然后在以下螺栓上选择LOCAL_或_SHUFFLE,也将确保所有工人都保持忙碌,同时享受保持以下工作在本地的潜在速度优势
我非常确定这是4个本地执行器(使用Storm UI,您可以单击一个螺栓,查看每个执行器部署在何处,哪个执行器获取数据,哪个不获取数据——因此您可以查看标识每个工作进程的主机/端口来实际验证这一点)
我想是的。使用Storm UI,您可以看到“容量”列,显示每个执行器的负载;所以你可以验证
你为什么要把它们最大化?你会得到什么
如果你只有3名员工,我实际上不确定是否会考虑所有当地遗嘱执行人。但即使如此,问题是,你会得到什么
关于这一点的一些一般性评论:如果您只有3个节点,那么从性能角度来看,使用比节点更多的worker并不会带来太多好处。唯一的性能优势是每个内部“调度程序线程”的负载更少(请参阅)。由于worker JVM本质上是多线程的,所以您可以将更多的执行器分配给单个worker——只要您的机器有足够的内核,您就可以获得所需的速度
与可用节点相比,每个拓扑使用更多工作节点的主要目的实际上是获得更好的容错性。如果一个工作JVM失败,那么执行器就会减少。一个主管可以有多个工作JVM的原因是拓扑隔离。单个辅助JVM将只执行单个拓扑中的喷口/螺栓。因此,如果要在单个主机上部署多个拓扑,则每个拓扑中每个主机至少需要一个工作线程
关于local或shuffle:如果您使用local of shuffle,为什么您会担心并非所有下游执行者都得到分配的工作?如果本地的可以处理负载,你的拓扑运行得很好。。。如果用户无法处理负载,数据将自动分发给其他用户。所以我不理解你的担心,不是所有的执行者都能得到输入数据
此外,如果您想让所有执行者都忙起来,为什么不使用随机播放,而不是本地或随机播放?这保证了所有执行者都能得到完全相同的工作份额
我非常确定这是4个本地执行器(使用Storm UI,您可以单击一个螺栓,查看每个执行器部署在何处,哪个执行器获取数据,哪个不获取数据——因此您可以查看标识每个工作进程的主机/端口来实际验证这一点)
我想是的。使用Storm UI,您可以看到“容量”列,显示每个执行器的负载;所以你可以验证
你为什么要把它们最大化?你会得到什么
如果你只有3名员工,我实际上不确定是否会考虑所有当地遗嘱执行人。但即使如此,问题是,你会得到什么
关于这一点的一些一般性评论:如果您只有3个节点,那么从性能角度来看,使用比节点更多的worker并不会带来太多好处。唯一的性能优势是每个内部“调度程序线程”的负载更少(请参阅)。由于worker JVM本质上是多线程的,所以您可以将更多的执行器分配给单个worker——只要您的机器有足够的内核,您就可以获得所需的速度
与可用节点相比,每个拓扑使用更多工作节点的主要目的实际上是获得更好的容错性。如果一个工作JVM失败,那么执行器就会减少。一个主管可以有多个工作JVM的原因是拓扑隔离。单身工人
worker.heap.memory.mb: 4096