apache-storm - 如何为在 Heron 中运行的 Storm 拓扑设置组件的资源需求?
问题描述
最近,我想将 Storm 拓扑迁移到 Heron。但它存在一些问题。
在 Heron 拓扑中,我可以设置 和 的资源components
,containers
例如:
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 拓扑中,我无法设置这些资源需求。因此,当我尝试使用在 Heron 中运行 Storm 拓扑时RoundRobin Packing
,它将使用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 集群中的 worker 节点并没有那么多RAM
资源Disk
。所以当提交 Storm 拓扑时,这个拓扑的状态会是pending
Aurora,因为Insufficient: disk or ram.
我对Storm不是很熟悉,可以在Storm拓扑中设置组件的资源需求吗?如果不行,除了增加集群中工作节点的资源容量,还有没有其他办法解决这个问题?任何帮助都非常感谢。
解决方案
首先,让我试着理解你的问题:你问的是如何在使用 RoundRobinPacking 资源打包算法时为拓扑中的每个组件设置 cpu/memory/disk 限制。
其次,如果我正确理解你的问题。那么答案只是你问题的第一部分。conf
您可以使用heron 框架提供的对象设置这些限制。要记住的一些事情是:
- 您只能设置容器资源。在这种情况下,一个容器中的 spout/bolts 将平等地共享这些资源。
- 您可以为每种类型的 bolt/spout 设置资源。在这种情况下,每个容器使用的总资源是装入该容器的那些 spout/bolts 的总和。
- 您可以将以上两者结合起来。在这种情况下,未指定的 spouts/bolts 将共享剩余的资源。
第三,Heron 的底层架构与 Storm 有很大不同。我不认为 Storm 提供了如此细粒度的资源控制。Storm 没有这些配置。
推荐阅读
- javascript - 尝试使用 JQuery 为框的颜色设置动画
- linux - 为什么在分组命令中执行简单命令不会fork子shell进程,而复合命令会这样做
- javascript - react-native(mobX) : 如何将新对象添加到现有对象
- python-3.x - 从整数队列开始合并同一位置的元素
- typescript - 可以在 io-ts 中表示可索引签名吗
- ios - 更改 Cognito-User-Pool/AWS-Amplify;导致注册问题
- vb.net - 有没有更好的方法来设置闹钟而不是使用计时器比较时间?
- java - 将字符串从 Java 客户端发送到 Python 服务器
- python - 如何在函数中键入默认列表初始值设定项
- python - 是否有推荐的方法来确保不变性