gpt4 book ai didi

java - Apache Giraph 1.0.0 - 如何为顶点分配内存?

转载 作者:行者123 更新时间:2023-12-02 09:49:12 24 4
gpt4 key购买 nike

最近,我成功地创建了一个自定义顶点类,其中每个顶点都有一个 LongWritable id,并且这个 id 也是它自己的值。我的 Giraph 程序在一个小型顶点集(100,000 个顶点)上成功运行,并且程序完成并输出预期值。但是,当我将卷增加到 3000 万个顶点时,当总内存达到最大(每个映射器堆大小为 1.5 GB)时,程序会挂起。由于我的顶点类只保存一个 id 和值(8 + 8 = 16 字节)以及发散边(平均 8*8*2 = 128 字节),我不明白为什么内存消耗如此之高。从下面的日志消息中可以看出,内存最大为 450 万个顶点,大小为 1363 MB,因此当 Giraph 运行时,每个顶点占用 317 字节。 Giraph 中哪些额外的数据结构导致字节/顶点如此之高?

readVertexInputSplit: Loaded 4500000 vertices at 90245.3768041096 vertices/sec 0 edges at 0.0 edges/sec Memory (free/total/max) = 187.52M / 1363.00M / 1365.50M

waitFor: Future result not ready yet java.util.concurrent.FutureTask@5f7bd943

最佳答案

只是为了为任何寻找答案的人提供答案。

尝试改变 Giraph 保存分区的方式。如果使用默认的,开销会很大。请改用 org.apache.giraph.partition.ByteArrayPartition,它实际上仅将数据保存为字节数组,而不是包装形式。 Java 在保存对象方面有一定的开销,在您的情况下,这是非常明显的,因为您有许多小对象 - 因此浪费也很高。

此外,一般来说,不建议运行小型映射器。最好拥有几个强大的节点(大约 10 个核心和 30-60GB RAM),而不是几十个小节点。

可能还有很多其他原因,但如果没有详细信息,我就不能说。

关于java - Apache Giraph 1.0.0 - 如何为顶点分配内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25902761/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com