如何在 Heron 中为 Storm 拓扑 运行 设置组件的资源需求?

How to set resource requirements of components for a Storm topology running in Heron?

最近想把一个Storm Topology迁移到Heron。但是也有一些问题。
在Heron拓扑中,我可以设置componentscontainers的资源,比如:

conf.setComponentRam("spout", ByteAmount.fromMegabytes(512));
conf.setComponentRam("split", ByteAmount.fromMegabytes(512));
conf.setComponentRam("count", ByteAmount.fromMegabytes(512));
conf.setContainerDiskRequested(ByteAmount.fromGigabytes(3));
conf.setContainerRamRequested(ByteAmount.fromGigabytes(3));
conf.setContainerCpuRequested(2);

但在 Storm 拓扑中,我无法设置这些资源要求。因此,当我尝试使用 RoundRobin Packing 在 Heron 中 运行 一个 Storm 拓扑时,它将使用 default resource settings 如下:

DEFAULT_DISK_PADDING_PER_CONTAINER = ByteAmount.fromGigabytes(12);
DEFAULT_CPU_PADDING_PER_CONTAINER = 1;
MIN_RAM_PER_INSTANCE = ByteAmount.fromMegabytes(192);
DEFAULT_RAM_PADDING_PER_CONTAINER = ByteAmount.fromGigabytes(2);

但问题是:我的Heron集群中的工作节点没有那么多RAMDisk资源。所以当提交Storm拓扑时,这个拓扑的状态在Aurora中会是pending,因为Insufficient: disk or ram.

我对Storm不是很熟悉,能否设置Storm拓扑中组件的资源需求?如果不行,除了增加集群中工作节点的资源容量,还有没有其他办法解决这个问题呢?非常感谢任何帮助。

首先,让我试着理解你的问题: 您询问的是如何在使用 RoundRobinPacking 资源打包算法时为拓扑中的每个组件设置 cpu/memory/disk 限制。

其次,如果我没有正确理解你的问题。那么答案只是你问题的第一部分。您可以使用 heron 框架提供的 conf 对象设置这些限制。要记住的一些事情是:

  1. 只能设置容器资源。在这种情况下,一个容器中的spouts/bolts将平均共享这些资源。
  2. 您可以为每种类型设置资源bolt/spout。在这种情况下,每个容器使用的总资源是 spouts/bolts 装入该容器的总资源。
  3. 你可以结合以上两个。在这种情况下,未指定的 spouts/bolts 将共享剩余的资源。

第三,Heron的底层架构与Storm有很大不同。我不认为 Storm 提供如此细粒度的资源控制。而 Storm 没有这些配置。