GraphX原型论文

GraphX是Spark中用于图(e.g., Web-Graphs and Social Networks)和图并行计算(e.g., PageRank and Collaborative Filtering)的API,可以认为是GraphLab(C++)和Pregel(C++)在Spark(Scala)上的重写及优化,跟其他分布式图计算框架相比,GraphX最大的贡献是,在Spark之上提供一栈式数据解决方案,可以方便且高效地完成图计算的一整套流水作业。

GraphX最先是伯克利AMPLAB的一个分布式图计算框架项目,后来整合到Spark中成为一个核心组件,这里的内容是基于论文

Xin, Reynold S., et al. "GraphX: Unifying Data-Parallel and Graph-Parallel Analytics." arXiv preprint arXiv:1402.2394 (2014).[PPT] [Talk][Video][GitHub][Hands-on Exercises]

图计算

Graph来描述参数之间的关系,可以自然地做model partition/parallel,传统地用key-value存储参数的方式,可能会损失模型结构信息。

Graphx图处理流水线

Graphx是Spark生态中的非常重要的组件,融合了图并行以及数据并行的优势,虽然在单纯的计算机段的性能相比不如GraphLab等计算框架,但是如果从整个图处理流水线的视角(图构建,图合并,最终结果的查询)看,那么性能就非常具有竞争性了。

两种视图
  1. GraphX通过引入Resilient Distributed Property Graph(一种点和边都带属性的有向多图)扩展了Spark RDD这种抽象数据结构,这种Property Graph拥有两种Table和Graph两种视图(及视图对应的一套API),而只有一份物理存储。
  2. Table视图将图看成Vertex Property Table和Edge Property Table等的组合,这些Table继承了Spark RDD的API(fiter,map等)。
  3. Graph视图上包括reverse/subgraph/mapV(E)/joinV(E)/mrTriplets等操作。结合pagerank和社交网络的实例看看mrTriplets(最复杂的一个API )的用法。
优化
  1. 点分割:graphx借鉴powerGraph,使用的是vertexcut(点分割)方式存储图。这种存储方式特点是任何一条边只会出现在一台机器上,每个点有可能分布到不同的机器上。当点被分割到不同机器上时,是相同的镜像,但是有一个点作为主点(master),其他的点作为虚点(ghost),当点B的数据发生变化时,先更新点B的master的数据,然后将所有更新好的数据发送到B的ghost所在的所有机器,更新B的ghost。这样做的好处是在边的存储上是没有冗余的,而且对于某个点与它的邻居的交互操作,只要满足交换律和结合律,比如求邻居权重的和,求点的所有边的条数这样的操作,可以在不同的机器上并行进行,只要把每个机器上的结果进行汇总就可以了,网络开销也比较小。代价是每个点可能要存储多份,更新点要有数据同步开销。
  2. Routing Table:vertex Table中的一个partition对应着Routing Table中的一个partition,Routing Table指示了一个vertex会涉及到哪些Edge Table partition。
  3. Caching for Iterative mrTriplets&Indexing Active Edges:在迭代的后期,只有很少的点有更新,因此对没有更新的点使用local cached能够大幅降低通信所耗。
  4. Join Elimination:例如在PR计算中,一个点值的更新只跟邻居的值有关,而跟它本身的值无关,那么在mrTriplets计算中,就不需要Vertex Table和Edge Table的3-way join,而只需要2-way join。此外,还有一些Index和Data Reuse的查询优化。
性能
  1. GraphX整体上比GraphLab慢2-3倍,有两方面的原因:1)GraphX跑在JVM上,没有C++快是显然的 2)GraphLab不受Spark框架的限制,可以通过Threads来共享内存,而GraphX就算在同一台机器上都有communication cost,“GraphX have to go through the full network stack even communicating between patrition on the same machine.”
  2. GraphX在超大规模数据下,Runtime的增长比GraphLab要慢,scalability要好一些。
  3. 从整个图计算Pipeline来说,GraphX的总体Runtime少于GraphLab+Spark。
社交网络实验

Graph Analytics With GraphX

GraphX Programming Guide

代码量

杂谈
  1. GraphX论文的作者Joseph Gonzalez在今年ICML上做了关于大规模机器学习系统对比的报告
  2. Spark的GraphX是从表到图、允许图与表的交互,GraphLab也认识到表对图的重要性,在其Python包GraphLab Create里提供SFrame,即基于表的图表示,该图表示数据存在于HDFS,S3或直接从URL读取,支持Tb级的数据(虽然不大,比PyData和R强),提供基于表的groupby aggregation/joins/user defined transformations/append等API, 功能和语法类似于pandas- and R- dataframes。
参考

关于图计算和graphx的一些思考

转载请注明出处:
十分钟了解分布式计算:GraphX

转载于:https://www.cnblogs.com/wei-li/p/graphx.html

十分钟了解分布式计算:GraphX相关推荐

  1. 十分钟了解分布式计算:Petuum

    Petuum是一个机器学习专用分布式计算框架,本文介绍其架构,并基于文章 More Effective Distributed ML via a Stale Synchronous Parallel ...

  2. 十分钟了解分布式计算:Spark

    Spark是一个通用的分布式内存计算框架,本文主要研讨Spark的核心数据结构RDD的设计思路,及其在内存上的容错.内容基于论文 Zaharia, Matei, et al. "Resili ...

  3. 十分钟了解分布式计算:GraphLab

    GraphLab是一个面向大规模机器学习/图计算的分布式内存计算框架,由CMU在2009年开始的一个C++项目,这里的内容是基于论文 Low, Yucheng, et al. "Distri ...

  4. 十分钟成为 Contributor 系列 | 为 TiDB 重构 built-in 函数

    2019独角兽企业重金招聘Python工程师标准>>> 这是十分钟成为 TiDB Contributor 系列的第二篇文章,让大家可以无门槛参与大型开源项目,感谢社区为 TiDB 带 ...

  5. 用D3.js 十分钟实现字符跳动效果

    用D3.js 十分钟实现字符跳动效果 注 本文基于 D3.js 作者 Mike Bostock 的 例子 原文分为三部分, 在这里笔者将其整合为了一篇方便阅读. 该效果基于 D3.js, 主要使用到了 ...

  6. 飞机的“黑色十分钟”能被人工智能消灭吗?

    [导读]近年来,"AI的应用和落地"逐渐成了具化的关键词,它和很多事物很多行业结合在一起,形成了奇妙的"化学反应".例如,在日常生活中,AI可以推送我们喜欢的新 ...

  7. 十分钟上手2022latex安装与入门

    序言:本次下载是为美赛而用,因此我们选择的下载组合为texlive+texstudio,使用windows10安装.在此提醒大家,类似工具的下载建议大家亲历亲为,不要相信一些诱导性网站,都是非官方的安 ...

  8. 十分钟用Windows服务器简单搭建DHCP中继代理!!

                         十分钟用Windows服务器简单搭建DHCP中继代理!! 一.什么是中继代理? 大家都知道DHCP分配地址都需要用到IP广播,但是广播是不能在两个网段之间进行 ...

  9. 《科学》:媲美AlphaFold2的蛋白质结构预测新工具问世,一台游戏计算机十分钟出结果,完全免费...

    来源:学术头条本文约2000字,建议阅读5分钟 整个研究学界都将受益. 如今,人工智能已经渗透到人们生活的方方面面,各种深度学习算法也越来越多地应用于各个领域.尤其在生物和医学领域,人工智能技术可以说 ...

最新文章

  1. ospf路由汇总的目的
  2. 升降压斩波电路matlab,升降压斩波电路matlab仿真.doc
  3. git 提交的时候报错:error: 'flutter_app/' does not have a commit checked out
  4. TF-IDF与余弦相似性的应用(三):自动摘要
  5. RK3399如何选择系统呢?
  6. python中requests的常用方法_python3 Requests常用操作
  7. windows下 安装 rabbitMQ 及操作常用命令
  8. FCKeditor2.3 For PHP 详细整理的使用参考
  9. Coursera自动驾驶课程第7讲:Vehicle Lateral Control
  10. 将地址强制转换为指针
  11. 发生无法识别的错误_车牌识别系统的核心部件抓拍摄像机怎么安装?
  12. UVA12207 LA4493 That is Your Queue【双端队列】
  13. 人脸方向学习(四):人脸关键点检测+Mobilenet_v3结构探索
  14. centos7中Python切换到Python3.x版本(解决常出现的错误)
  15. Q8 凯立德 J07 升级方法
  16. 新书推荐|Windows黑客编程技术详解
  17. (混沌序列统计特性)Maurer通用统计测试---matlab
  18. LeCo-33.搜索旋转数组
  19. 2020科大讯飞iFLYTEK A.I.开发者大赛
  20. html网页常用功能:下拉框模糊搜索

热门文章

  1. “领悟”的价值是什么?思维能力训练问答
  2. Python爬虫-爬取扇贝单词(Xpath)
  3. Alluxio HA 写入文件失败
  4. 汉得宣布开源:基于容器的企业级应用 PaaS 平台
  5. Struts2--标签tag
  6. 10个小窍门,让你轻松准确搜索。
  7. SpringMVC+MyBatis项目总结(一)
  8. finally代码块和return的执行顺序问题
  9. gaokao--抓取高校基本信息
  10. Word中的图片显示出不来的解决办法