我们四处寻找一种简单的算法来找到直径有时很大的图中的连通分量(最大的分量有时可以达到 1m)。
我们发现了很多非常复杂的 MR 算法:
- http://codingwiththomas.blogspot.de/2011/04/graph-exploration-with-hadoop-mapreduce.html
- http://blog.piccolboni.info/2010/07/map-reduce-algorithm-for-connected.html
- http://chasebradford.wordpress.com/2010/10/23/mapreduce-implementation-for-union-find/
一个非常简单的算法有什么问题:
- foreach 组件,生成 flatten(nodes_bag) 作为节点,node_with_the_smallest_id 作为 comp_id;
- 按节点分组
- 过滤具有多个comp_id的节点,并构建“将大comp_id更新为小comp_id”表
- 将所有comp_id大的节点更新为对应的新的小comp_id,并将它们标记为脏
并继续使用这些脏节点进行下一次迭代......我们在这里缺少什么?