图的三角形计数问题是一个基本的图计算问题,是很多复杂网络分析(比如社交网络分析) 的基础。目前图的三角形计数问题已经成为了 Spark 系统中 GraphX 图计算库所提供的一个算法级 API。本次实验任务就是要在 Hadoop 系统上实现 Twitter 社交网络图的三角形计数任务。
1.1 MapReduce 的设计思路
整过过程分为3个job,各job对应的键值对类型如下表所示:
|
inputKey |
inputValue |
outputKey |
outputValue |
Map1 |
Object |
Text |
Text |
Text |
Reduce1 |
Text |
Text |
Text |
Text |
Map2 |
LongWritable |
Text |
Text |
Text |
Reduce2 |
Text |
Text |
Text |
Text |
Map3 |
LongWritable |
Text |
Text |
Text |
Reduce3 |
Text |
Text |
Text |
Text |
Map1负责读入边,将按行存储的点对读入后,分割成a和b两个点,去除起点和终点相同的边,将标号较小的点放在前面,即a < b,输出键值对a + b –> +,表示存在一条a到b的边。因为对于第二个数据集标号值较大,所以需要以字符串形式存储。
Reduce1负责去重,不改变键值对,但是对于多条相同的键值对只保留一条。
Map2负责以+为分隔符,将key拆成两个点,输出键值对变为a->b。