文 / 成杰峰,刘勤,李震国
本文为《程序员》原创文章,未经允许不得转载,更多精彩文章请订阅2017年《程序员》
挖掘大规模图数据能增强现有商业业务,甚至产生新的商业模式。然而,这些图数据的规模让图数据挖掘本身成为难题,这些突出的挑战都指向了发展具有高可扩展能力的大规模图计算处理的有效工具。本文先展开叙述图计算技术的几个核心层面,进而介绍华为诺亚方舟实验室的VENUS图计算系统,最后对图计算发展的趋势作简要展望。
背景
大量不同个体之间彼此交互产生的数据以图的形式表现,在通信、互联网、电子商务、社交网络和物联网等领域中积累了大量的图数据。其规模巨大并且不断增长。简言之,图由节点(即个体)与边(即个体之间的联系)构成;而图数据是不同领域的数据中有这种图结构的相关部分。由Web网页和页面间的超链接构成的图或者社会网络中的不同用户和用户之间的关系链(见图1)都构成了大规模图数据。据CNNIC统计,仅在中国的Web页面所形成的图规模在2010年就达到600亿节点,并以78.6%的年增长率不断增大。Facebook的社交网络在2011年已超过8亿节点;而腾讯QQ社交网络目前在10亿个节点的规模。在电信工业中,广州市仅一个月内由电话呼叫方和被呼叫方组成的图就操过4.5千万个节点、1.5亿条边。而著名的ClueWeb数据包含全量的Web站点和网页,2012年公布的数据集已经达到1亿个节点、425亿条边,仅是存储边的列表的磁盘文件就超过400GB。
非常有价值的是:挖掘这些大规模图数据能增强现有商业业务,甚至产生新的商业模式。然而,这些图数据的规模让图数据挖掘本身成为难题。比如ClueWeb图的全量SimRank计算需要几千年。这些突出的挑战都指向了发展具有高可扩展能力的大规模图计算处理的有效工具。
虽然业界经过多年的实践发展出MapReduce和Spark等主流大数据平台,但图挖掘任务有其本身的独特性:由于数据之间依赖性强,使分布式处理模式需要频繁地在各个机器之间进行数据交换;且图挖掘算法流程本身由多次迭代处理构成。因此,主流大数据平台公认被不适合处理图挖掘任务[1],而基于图计算的大数据分析平台成为了图挖掘和相关机器学习算法的新方法。代表之一是Google提出的Pregel系统[2],Google称20%的数据处理是使用Pregel实现的,图计算是成功的数据挖掘处理框架。然而,Google一直没有将Pregel的具体实现开源,外界争相对Pregel进行模仿实现。2012年,卡内基梅隆大学教授Carlos Guestrin提出了分布式GraphLab框架[3],引起业界的广泛关注。
据Guestrin介绍,GraphLab在推荐系统中有很多应用,其他主要应用领域还包括互联网欺诈侦测和入侵探测等。GraphLab项目剥离出一个独立运作的商业公司GraphLab Inc,由Carlos Guestrin负责。2013年5月,该公司从Madrona Venture Group和NEA募集了675万美元资金并于2015年1月再得到1,850万美元的B轮融资。在2016年8月,这家图计算公司被苹果以2亿美元左右的价格收购。例证了图计算在大数据趋势下的重要性和在人工智能产业发展中的必要性。
本文以下先展开叙述图计算技术的几个核心层面,进而介绍华为诺亚方舟实验室的VENUS图计算系统,最后对图计算发展的趋势作简要展望。
图计算核心技术
随着大规模图数据分析的需要,近几年涌现出了很多图计算系统,其中值得注意的标志性工作有:Pregel[2]、GraphLab[3]和GraphChi[4]等。类似于现有Hadoop/Spark大数据框架通过MapReduce这样的简单接口函数去实现各种分布式集群处理任务,图计算的基本思想是使用“think like a vertex”去抽象表达图挖掘及相关机器学习算法,使得各种数据挖掘任务可以变为编写顶点程序(vertex program)并通过现有的图计算系统执行得以完成。
顶点程序计算更新图中顶点和邻接边的计算状态。而这些计算状态进一步被其他顶点程序执行时调用。图计算系统按BSP并行机制(Pregel)或异步并行机制(GraphLab)在计算集群上调度所有的顶点程序,并加入一定的容错机制,比如快照恢复。这样,图计算任务自动具有容错的并行处理,从而极大地提升数据挖掘算法的可扩展性。
具体些说,图计算系统预定义好的一个虚函数update(),通过对其重载以实现表达用户逻辑的顶点程序。于是,图计算系统将该函数对每一个顶点进行调用。update()方法可以访问使用的是当前顶点及其边的信息,以及入边的顶点及其边的信息;同时可以修改一个顶点以及与它相连的边上的权值。在图计算完成一个算法的多次迭代中,每次迭代就是系统完成一遍在图的每一个顶点上执行更新函数。由于Pregel采用同步执行模式等原因,速度较慢,目前GraphLab和GraphChi已经分别成为了分布式图计算系统和基于磁盘单机图计算系统的业界标杆。
GraphLab是基于内存的分布式图计算系统,一个图被分割成多个子图,每个子图保存在一台计算机的内存中。图的分割采用选取顶点切开图的方式。分开之后,选出来切图的顶点进一步