Graph Hadoop MapReduce实现了图形中的最短路径,而不仅仅是距离

Graph Hadoop MapReduce实现了图形中的最短路径,而不仅仅是距离,graph,hadoop,mapreduce,shortest-path,Graph,Hadoop,Mapreduce,Shortest Path,我一直在寻找“最短路径搜索算法的MapReduce实现” 然而,我能找到的所有实例“计算了从节点x到y的最短距离”,没有一个实际输出“像x-a-b-c-y这样的实际最短路径” 至于我试图实现的是,我有数百个1000个节点的图,我需要对不同节点之间的最短路径执行频繁模式分析。这是我正在做的一个研究项目 如果有人能给我指出一些实现(如果存在的话)或给出一些关于如何破解现有SSSP实现以生成路径和距离的指针,那将是一个很大的帮助基本上,这些实现与某种消息传递一起工作。所以消息在map和reduce阶段

我一直在寻找“最短路径搜索算法的MapReduce实现”

然而,我能找到的所有实例“计算了从节点x到y的最短距离”,没有一个实际输出“像x-a-b-c-y这样的实际最短路径”

至于我试图实现的是,我有数百个1000个节点的图,我需要对不同节点之间的最短路径执行频繁模式分析。这是我正在做的一个研究项目


如果有人能给我指出一些实现(如果存在的话)或给出一些关于如何破解现有SSSP实现以生成路径和距离的指针,那将是一个很大的帮助

基本上,这些实现与某种消息传递一起工作。所以消息在map和reduce阶段之间被发送到HDFS

在减速器中,它们按距离分组和过滤,以最小距离为准。在这种情况下,当更新距离时,您必须设置消息来自的顶点(可能是某个ID)

因此,每个顶点都有额外的空间要求,但可以重建图中所有可能的最短路径

根据您的评论:

可能是的

我需要编写另一个顶点对象类来保存它 补充资料。谢谢你的提示,虽然那会很有趣 如果你能指出我何时何地可以捕捉到这一点,那将非常有用 关于最小体重来源的信息,来自您博客的任何信息可能:-)

是的,对于ApacheHama来说,这可能是一个非常酷的主题。大多数实现只是考虑成本,而不是实际路径。在您的情况下(从上面链接的博客中),您必须提取一个顶点类,该类实际上将相邻顶点保存为
LongWritable
(可能是一个列表,而不是文本对象上的此拆分),只需添加一个父id或源id作为字段(当然也可以是
LongWritable
)。 在贴图器中传播时,将设置此选项,即在当前关键点节点的相邻顶点上循环的for循环

在reducer中,您将在迭代分组值时更新最低的某个位置,在那里,您必须通过更新为最小值的顶点设置关键顶点中的源顶点

实际上,您可以从我的博客中获得一些顶点类: 或者直接从存储库:

也许这对你有帮助,这是非常没有维护,所以请回到我,如果你有一个具体的问题

以下是BSP中与Apache Hama相同的算法:


您是否研究过Djikstra或A*的实施情况,以了解它们是如何工作的?它们都非常非常简单,一旦你理解了它们,做你想做的事情就很简单了。你只局限于基本的hadoop吗?在hadoop(Giraph和Golden Orb)之上有几个开源软件包专门研究图形算法,尽管我并不太关注这一部分。其思想是,不用编写映射器和约简器,而是将算法实现为表示与图的边匹配的节点和消息的类顺便说一句,戈德诺布已经死了。@BlueRaja DannyPflughoeft:我确实看过这些实现,希望有人能给我指点如何调整它们以获得我想要的,你能帮助我了解更多的细节吗?也许我们可以考虑这里给出的解释,因为我是Hadoop @ ToasasunggButt & Chris Gerken的初学者:我确实看到了GrAPAPH,它似乎处于非常萌芽的阶段,HAMA也是如此,因为我从Hadoop切换到PielGug类的开始似乎有点压倒一切。不过,如果值得的话,我愿意花时间在上面。是的,我可能需要编写另一个顶点对象类来保存这些附加信息。谢谢你的提示,不过如果你能指出我何时何地可以获取最小体重的信息,这将非常有帮助,你博客上的任何信息都可以:-)哇!谢谢因此,我认为:在映射阶段,每个活动节点(既不关闭也不访问的节点)将2条信息传递给其邻居:1)根据其信息到达邻居的成本,2)它知道的最短路径(基本上是您建议的列表,其id附加到列表中),当然,将邻居的状态设置为“已访问”,有点脏。然后在reduce阶段,所有具有访问状态的节点将扫描最小成本并保存相应的路径。你能指出是否有任何明显的错误吗?另外,由于我处理的是有向图,我可能需要对算法进行一些调整,以满足终止条件,我将尝试实现这一思想,并看看我的结果如何。同时,非常感谢所有有用的输入!!!我觉得你的理解力不错。没问题,希望对您有帮助;)