Memory Storm进程增加内存

Memory Storm进程增加内存,memory,apache-storm,Memory,Apache Storm,我正在使用Storm实现一个用于pagerank估计的分布式算法。我一直有内存问题,所以我决定创建一个虚拟实现,它不会显式地在内存中保存任何内容,以确定问题是在我的算法中还是在我的Storm结构中 事实上,虽然虚拟实现只做消息传递(很多),但每个工作进程的内存一直在增加,直到管道阻塞为止。我不明白为什么会发生这种情况 我的集群有18台机器(一些带有8g、一些16g和一些32g内存)。我已将工作堆大小设置为6g(-Xmx6g) 我的拓扑结构非常简单: 一个喷口 一个螺栓(平行) 螺栓从喷口(字段分

我正在使用Storm实现一个用于pagerank估计的分布式算法。我一直有内存问题,所以我决定创建一个虚拟实现,它不会显式地在内存中保存任何内容,以确定问题是在我的算法中还是在我的Storm结构中

事实上,虽然虚拟实现只做消息传递(很多),但每个工作进程的内存一直在增加,直到管道阻塞为止。我不明白为什么会发生这种情况

我的集群有18台机器(一些带有8g、一些16g和一些32g内存)。我已将工作堆大小设置为6g(-Xmx6g)

我的拓扑结构非常简单: 一个喷口 一个螺栓(平行)

螺栓从喷口(字段分组)以及自身的其他任务接收数据

我的消息传递模式基于具有一定停止概率的随机游动。更具体地说: 喷口生成一个元组。 来自bolt的一个特定任务接收这个元组。 基于一定的概率,此任务生成另一个元组,并将其再次发送给同一螺栓的另一个任务

我在这个问题上被困了很长一段时间,所以如果有人能帮助我,那将是非常有帮助的

致以最良好的祝愿,
Nick

看来您的拓扑结构中有一个瓶颈,即一个螺栓接收的数据比处理中的数据多。因此,bolt的输入队列会随着时间的推移而增长,从而消耗越来越多的内存


您可以增加“瓶颈螺栓”的并行性,也可以启用容错机制,该机制还可以通过有限数量的运行中元组()实现流控制。为此,您还需要设置“max spout pending”参数。

此虚拟设置中的螺栓唯一要做的事情是生成一个随机双精度,如果小于0.8,则向该螺栓的另一个任务发出一个新元组(即继续随机行走)。该螺栓的平行度为18,而喷嘴为单体。每个喷口元组在执行bolt时负责创建更多的元组。尽管@MatthiasJSax answer很可能说到点子上,但我想知道,您有什么样的输入数据?Pagerank实际上不需要很大的内存需求,即使没有并行性。。。除非你有大量的投入。(我在风暴中考虑了PageRank的实现,但是为了估计数据流的滑动窗口中的秩,但我没有这么做;如果你想解决流问题,我很想知道你的方法,我也可以分享我的想法。”谢谢!Irnzcig My input dataset是通过SNAP Stanford公开提供的friendster社交网络数据集。它由65mil节点和1.8bil边组成。实际上它相当大。我的方法是一种用于流图更新的近似算法(基于随机游动)。我们还没有发布它,所以我恐怕不能分享细节。好的!当然,这改变了局面。非常有趣的项目,祝你好运@Irnzzig非常感谢,伙计,你也是。