在阅读了google的论文mapreduce:simplified data processing on large clusters之后,我开始在hadoopmapreduce周围闲逛
我研究反向的web链接图是因为它看起来很有趣,实际上当我编写代码时,它非常简单。所以现在我在mapreduce输出中有了值对(target,list<source1,source2,…>),就像我把commoncrawl文件作为输入一样(在每个值对中,source1/source2/。。。我的输出格式为“targetsource1 | source2 |…”,其中每行表示一个值对。
我试着进一步研究这个问题,所以我决定找出是否可以有两个或更多链接的目标源对。那我就被困了好几个星期。
我首先尝试将我的输出文件作为Map器的输入文件,它将输出(target,list<source1,source2,…>)对供reducer处理,其中target是键。然后,reducer跟踪每个源,并用源实际上与目标(键)相同的对应对中的列表值替换源。例如:我有(target1,list<source1,source2>),(target2,list<source2,source3>)和(target3,list<source3,source4>),其中target2=source1和target3=source2,那么输出应该是(target1,list<source2,source3,source4>)。
问题1:这似乎行不通。我认为原因是这些target1、target2和target3键控值对可能不在同一个reducer中。mapreduce没有类似于查找表的东西,或者我不知道它的存在。我说得对吗(我读过一个叫做分布式缓存的东西,但这里我说的是可能需要的每一个值对,所以这将是一个巨大的文件,在使用分布式缓存时是不需要的。)
所以我试着寻找其他的算法,广度优先搜索看起来很有希望。然而,我发现bfs总是有一个起始节点,在我的设计中,每个值对都是一个起始节点,所以我又被卡住了。
问题2:有没有可能的修改,我可以做,使它符合我的设计?
然后我意识到mapreduce中的大多数算法都在使用键和定制的值字段。因此,我尝试提出一种算法,使我的Map器为上述示例中提到的三个值对输出相同的键。
问题3:对第三种方法有什么想法?
谢谢你的阅读和任何可能的建议。
暂无答案!
目前还没有任何答案,快来回答吧!