经典教程 | 基于Spark GraphX实现微博二度关系推荐

导读:图计算是近几年大数据领域非常受关注的热点,社交网络中的好友关系推荐是一种典型图计算场景,本文是微博关系项目团队在二度关系计算中的一些实践,供高可用架构读者参考,作者为王舜、蒋生武、田瑞林。


关系计算问题描述

二度关系是指用户与用户通过关注者为桥梁发现到的关注者之间的关系。目前微博通过二度关系实现了潜在用户的推荐。用户的一度关系包含了关注、好友两种类型,二度关系则得到关注的关注、关注的好友、好友的关注、好友的好友四种类型。

如果要为全站亿级用户根据二度关系和四种桥梁类型推荐桥梁权重最高 TopN 个用户,大致估算了下总关系量在千亿级别,按照原有的 Mapreduce 模式计算整个二度关系,需要以桥梁用户为 Key,把它的关注和粉丝两个亿级的表做 Join,如果活跃用户按照亿计,平均关注量按百计, Join 需要传输的数据量为几百 TB,同时 Mapreduce 在 shuffle 过程中中间结果需要多次排序和落地到 HDFS, 按这么实现内存和带宽无法满足,而且在时效上也不能满足业务需要。

二度关系推荐可抽象成在有向图中寻找到指定顶点的最短距离为 2 的所有顶点,将满足上述条件的顶点称为顶点的二跳邻居.这是经典的图问题,使用分布式图计算模型在算法描述和扩展性上有很大的优势。

下面我们把二度关系抽象成图后举例描述下

0?wx_fmt=png

如上图所示,单向箭头表示关注关系,双向箭头表示好友关系,箭头上的数字表示边权重,如 A 到 C1 的桥梁权重 =B1(0.5+0.6)+B2(0.7+0.1)=1.9,推荐理由是好友的好友.我们需要将全站千亿级有效关注关系按上述模型计算求得 A 的二跳邻居 C,再去掉 C 中 A 直接关注的,最后将 C 按桥梁权重从高到低取 TopN。

框架选择

目前业界主流的分布式图计算框架有 Giraph 和 GraphX。Giraph 是一个迭代的图计算系统。Giraph 计算的输入是由点和直连的边组成的图.例如,点可以表示人,边可以表示朋友请求.每个顶点保存一个值,每个边也保存一个值.输入不仅取决于图的拓扑逻辑,也包括定点和边的初始值.

Giraph 由 Yahoo 开源,原型是 Google 的 Pregel,在 2012 年已经成为 Apache 软件基金会的开源项目,并得到 Facebook 的支持,获得多方面的改进.

GraphX 是是 Apache 的开源项目 Spark 的重要部分,最早是伯克利 AMPLAB 的分布式图计算框架项目,后来整合到 Spark 中成为一个核心组件。GraphX 是 Spark 中用于图和图并行计算的 API,其实是 GraphLab 和 Pregel 在 Spark(Scala) 上的重写及优化,跟其他分布式图计算框架相比, GraphX 最大的优点,在 Spark 之上提供一栈式数据解决方案,可以方便且高效地完成图计算的一整套流水作业.

0?wx_fmt=png

End-to-end PageRank performance (20 iterations, 3.7B edges)

GraphX 借助 Spark,将图表示为 RDD,一种分布式的能载入内存的数据集。较之 mapreduce 顺序处理数据,鉴于内存具有天然的随机访问特性, Spark 的大多数操作都在内存中完成,因此更适合处理图问题。GraphX 处理端到端的图迭代问题在运行时间上也快于 Giraph( 见上图 ),因此我们决定采用 GraphX 做二度关系挖掘和推荐。

基于 GraphX 的二度关系求解

基本概念

属性图 : 属性图是一个有向多重图,它带有连接到每个顶点和边的用户定义的对象。有向多重图中多个并行 (parallel) 的边共享相同的源和目的地顶点.支持并行边的能力简化了建模场景,这个场景中,相同的顶点存在多种关系 ( 例如 likes 和 blocks),每个顶点由一个唯一的 long 型的 VertexID 作为顶点 ID。

一个属性图 Graph 由两个 RDD 构成分别是 :VertexRDD[VD] 和 EdgeRDD[ED],分别表示顶点和边。VD 和 ED 分别表示顶点和边的属性类型.他们和 RDD 一样,属性图是不可变的、分布式的、容错的.其中最关键的是不变性.逻辑上,所有图的转换和操作都产生了一个新图;物理上, GraphX 会有一定程度的不变顶点和边的复用优化,对用户透明。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值