我是 Apache Giraph 的新手。我的问题与 Giraph 图分区有关。据我所知,Giraph 对大图进行随机分区......可能是#partitions>#workers 以实现负载平衡。但是,我的问题是,#partitions/worker 总是一个整数吗?换句话说,分区(比如 p1)是否会部分驻留在工人 w1 和工人 w2 中?或者,p1 是否应该在 w1 或 w2 中?
2 回答
Giraph 中的分区是指顶点分区而不是图形分区。例如,如果一个图有 10 个顶点,编号从 1 到 10,则可能的分区为 {1,2. 3},{4,5,6},{7,8,9,10}。每个分区都知道其传出边指向的位置。每个工作人员为分配给它的每个分区创建线程。线程遍历分区中的每个顶点并执行计算函数。因此,有了这些信息,我想说一个分区必须完全驻留在单个工作人员上。
你好@zahorak,
如果 Giraph 按原样实现 Pregel,那么根据 Pregel 论文,不需要 #partitions == #workers。它说,
主节点确定图将有多少个分区,并为每台工作机器分配一个或多个分区。该数量可以由用户控制。每个工作人员拥有多个分区允许分区之间的并行性和更好的负载平衡,并且通常会提高性能。
更新:我在 Giraph 用户邮件列表中发现了类似的问题。回复中给出的答案可能会有所帮助。这是线程的链接 - https://www.mail-archive.com/user@giraph.apache.org/msg01869.html
AFAIK不,实际上我会说,#partitions == #workers
分区的原因是在一台服务器上处理部分图。在执行超级步骤之后,发送到其他分区的消息将在集群内的服务器之间进行交换。
也许您像我一样理解“分区”一词下的其他内容,但对我而言,分区意味着:
Giraph 位于具有多个服务器的集群上,为了对所有服务器进行 laverage,它需要对图进行分区。而不是简单地将一个节点随机分配给n 个服务器之一。从中你得到n 个分区,每个分区中的节点由它们分配给的一个服务器执行,没有其他服务器。