Spark GraphX是基于Spark的分布式图计算子框架,它是常用图算法在Spark上的并行化实现,并且它提供了图计算中用于图和图并行计算的API,可以认为它是GraphLab和Pre-gel在Spark上的重写及优化,它是Spark生态圈中非常重要的组件。其中,GraphLab是由CMU(卡内基梅隆大学)的Select实验室在2010年提出的一个基于图像处理模型的开源图计算框架,框架使用C++语言开发实现;而Pregel是一个用于分布式图计算的计算框架,主要用于图遍历(BFS)、最短路径(SSSP)、PageRank计算等,Pregel采用了BSP模型,即“计算”-“通信”-“同步”的模式。
目前已经有很多基于图的并行计算框架,比如基于BSP(Bulk Synchronous message Pass-ing,批量同步消息传递)模型的Pregel、Giraph、HAMA,基于GAS模型(邻居更新模型)的GraphLab。Spark GraphX同样是基于GAS模型的。GAS模型是以边为中心,对顶点进行切割并将顶点分配给集群中各个结点进行存储的。
对于基于BSP模型的图计算框架,如Pregel图计算框架,在图处理任务时要经过一系列的迭代步骤来实现,这些迭代步骤也就是超步(SuperStep)。在一个超步中,所有的进程并行执行局部计算。一个超步可分为三个阶段:本地计算阶段,每个处理器只对存储本地内存中的数据进行本地计算;全局通信阶段,对任何非本地数据进行操作;栅栏同步阶段,等待所有通信行为的结束。BSP模式最大的好处是编程简单,但由于其存在一个全局障碍,使得在一些情况下其运算的性能非常差。对于Spark GraphX而言,由于它使用了异步的概念所以没有全局的Barrier,这也使得它可以用极为简洁的代码方便地使用Pregel的API。(www.xing528.com)
对应的,Spark GraphX图计算框架是基于GAS模型的。作为Spark生态圈中非常重要的组件,在Spark提供的“One stack to rule them all”(一栈式数据解决方案)的思想指导下,Spark GraphX可以与Spark的其他子框架,如Spark SQL、MLlib等无缝结合使用,例如我们可以使用Spark SQL进行数据的ETL(Extract Transform and Load,提取转换加载)操作,之后将操作结果交给Spark GraphX处理,而Spark GraphX在计算时又可以和MLlib子框架结合使用,共同完成深度数据挖掘等人工智能的操作,这些特性都是其他图计算平台无法比拟的。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。