【问题标题】:How to set resource requirements of components for a Storm topology running in Heron?如何为在 Heron 中运行的 Storm 拓扑设置组件的资源需求?
【发布时间】:2018-10-22 09:11:39
【问题描述】:

最近,我想将 Storm 拓扑迁移到 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拓扑中设置组件的资源需求吗?如果没有,除了增加集群中工作节点的资源容量,还有其他方法可以解决这个问题吗?任何帮助都非常感谢。

【问题讨论】:

    标签: apache-storm heron


    【解决方案1】:

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

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

    1. 您只能设置容器资源。在这种情况下,一个容器中的 spout/bolts 将平等地共享这些资源。
    2. 您可以为每种类型的螺栓/喷嘴设置资源。在这种情况下,每个容器使用的总资源是装入该容器的那些 spout/bolts 的总和。
    3. 您可以将以上两者结合起来。在这种情况下,未指定的 spout/bolts 将共享剩余的资源。

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

    【讨论】:

    • 感谢您的回答。我知道如何使用拓扑中的 conf 对象配置 Heron 中组件和容器的资源。 但是问题是:当我迁移Storm的拓扑运行在Heron上时,出现了资源不足导致无法分配资源的问题。我可以在 Heron 中设置 Strom 拓扑的资源要求吗? 我认为答案应该是 NO。那么除了提升Heron集群中节点的资源,还有其他的解决方案吗?
    • 如果超过了总资源上限,那么在集群中添加新资源是解决这个问题的唯一方法。
    • 好的,感谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多