hadoop的shuffle/sort(或partition)阶段可以定制为执行图遍历吗?

daupos2t  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(323)

我还在学习由hadoop具体实现的mapreduce框架,我想知道是否可以修改它来执行以下任务:
map()函数将发出(key,value)对,它们的键是大小为2的数组,比如int[2]。我希望每一对包含两个共同整数中的任何一个都Map到同一个缩减器。
例如,如果map()发射:([2,3],4),([2,4],5),([6,5],2),([5,7],1),那么reduce1应该接收前两对,reduce2应该接收后两对(前两个共享2,后两个共享5)。这可以看作是一个连通分量问题,其中顶点是int[]中的整数,边在同一int[]中的任意两个整数之间共享。

hs1rzwqc

hs1rzwqc1#

一个算法的变化,你可能可以做到这一点-但你需要发射每边两次
对于当前输出的每条边,应为两个顶点ID输出它们,修改输出值以包括另一条边、权重和可选方向(如果边方向对算法很重要)。
所以不是这样:

([2,3],4)
([2,4],5)
([6,5],2)
([5,7],1)

输出(s表示键是源,d表示键是目标):

(2, [3, 4, S])
(3, [2, 4, D])
(2, [4, 5, S])
(4, [2, 5, D])
(6, [5, 2, S])
(5, [6, 2, D])
(5, [7, 1, S])
(7, [5, 1, D])

现在在reducer中,您将按顶点id分组,并将能够迭代其他包含其他顶点id、权重和方向的元组:

(2, [3, 4, S])
(2, [4, 5, S])

(3, [2, 4, D])

(4, [2, 5, D])

(5, [6, 2, D])
(5, [7, 1, S])

(6, [5, 2, S])

(7, [5, 1, D])

您仍然需要注意,每条边可能会被处理两次,特别是当边在两个顶点之间的两个方向上存在时。

相关问题