精华内容
下载资源
问答
  • 图计算

    千次阅读 2018-04-02 14:48:03
    数据 数据存在于我们生活的方方面面,如果将数据相关方分别定位为一个点,而他们之间的互相联系抽象为边,那整个不同事物时间的错综复杂的联系就构成了一幅幅“数据”。 社交关系数据:将每个人作为一个...

    图数据

    图数据存在于我们生活的方方面面,如果将数据相关方分别定位为一个,而他们之间的互相联系抽象为,那整个不同事物时间的错综复杂的联系就构成了一幅幅“图数据”。

    社交关系数据:将每个人作为一个点,而人与人之间的互动关系是边,那么庞大的社交圈子中,不同人之间的互动联系就构成了庞大的社交关系数据。

    网页链接数据:通过一个网页链接,可以跳转到其他多个网页,网页与网页之间的多个跳转联系就构成了一个复杂的网页链接数据。通过这些数据可以进行多个研究,比如可以分析出来哪个网页是入口大的重要网页等。

    比如可以通过交易网络数据图来分析出哪些交易是欺诈交易、通过通信网络数据图来分析企业员工之间不正常的社交、通过用户—商品图数据图来分析用户需求,做个性化推进等。

    图数据的特征

    图数据中主要包括图中的节点以及连接节点的边,通常具有3 个特征:

    1. 节点之间的关联性。图中边的数量是节点数量的指数倍,因此,节点和关系信息同等重要,图结构的差异也是由于对边做了限制,在图中,顶点和边实例化构成各种类型的图,如标签图、属性图、语义图以及特征图等。
    2. 图数据的种类繁多。在许多领域中,使用图来表示该邻域的数据,如生物、化学、计算机视觉、模式识别、信息检索、社会网络、知识发现、动态网络交通、语义网、情报分析等。每个领域对图数据的处理需求不同,因此,没有一个通用的图数据处理系统满足所有领域的需求。
    3. 图数据计算的强耦合性。在图中,数据之间是相互关联的,因此,对图数据的计算也是相互关联的。这种数据耦合的特性对图的规模日益增大达到上百万甚至上亿节点的大图数据计算提出了巨大的挑战。大图数据是无法使用单台机器进行处理的,但如果对大图数据进行并行处理,对于每一个顶点之间都是连通的图来讲,难以分割成若干完全独立的子图进行独立的并行处理;即使可以分割,也会面临并行机器的协同处理,以及将最后的处理结果进行合并等一系列问题。这需要图数据处理系统选取合适的图分割以及图计算模型来迎接挑战并解决问题。

    图算法

    图算法指利用特制的线条算图求得答案的一种简便算法。无向图、有向图和网络能运用很多常用的图算法,这些算法包括:各种遍历算法(这些遍历类似于树的遍历),寻找最短路径的算法,寻找网络中最低代价路径的算法,回答一些简单相关问题(例如,图是否是连通的,图中两个顶点间的最短路径是什么,等等)的算法。图算法可应用到多种场合,例如:优化管道、路由表、快递服务、通信网站等

    图算法的MapReduce实现

    图算法也是迭代算法中比较常见的算法,包括图查询、图索引、图匹配、可达性算法等。

    由于MapReduce没有提供获得全局状态或全局数据的机制,而只能在Map 任务和Reduce 任务之间传输局部信息,所以图算法的MapReduce 实现都遵循以下模式:首先计算节点信息,然后将更新数据传递到它的邻居再次计算,多次迭代后,收敛至最终结果。MapReduce 适用于处理稀疏图,中间结果数量与节点的邻居节点数目成正比;而对于稠密图,若仍然使用MapReduce 实现算法,则需要设计更为成熟的数据划分方法,比如最小生成树算法或图割算法。

    典型的图算法包括PageRank 算法、Descendant-Query 算法、Dijkstra 算法、最小生成树算法。

    常见图算法

    PageRank

    PageRank源自搜索引擎,它是搜索引擎里面非常重要的图算法,可用来对网页做排序。比如我们在网页里搜索hadoop,会出来非常多有着hadoop关键字的网页,可能有上千上万个相关网页,而PageRank可以根据这些网页的排序算法将其排序,将一些用户最需要的网页进行优先展示。

    最短路径

    在社交网络里面,有一个六度空间的理论,表示你和任何一个陌生人之间所间隔的人不会超过五个,最多通过五个中间人你就能够认识任何一个陌生人。这也是图算法的一种,任何两个人之间的最短路径都是小于等于6。

    社群发现

    用来发现社交网络中三角形的个数(圈子),可以分析出哪些圈子更稳固,关系更紧密。用来衡量社群耦合关系的紧密程度。一个人的社交圈子里面,三角形个数越多,说明他的社交关系越稳固、紧密。像Facebook、Twitter等社交网站,常用到的的社交分析算法就是社群发现。

    推荐算法(ALS)

    ALS是一个矩阵分解算法,比如购物网站要给用户进行商品推荐,就需要知道哪些用户对哪些商品感兴趣,这时,可以通过ALS构建一个矩阵图,在这个矩阵图里,假如被用户购买过的商品是1,没有被用户购买过的是0,这时我们需要计算的就是有哪些0有可能会变成1 。

    图计算框架

    GraphX是一个使用非常广泛的图计算库,而在GraphX之前,也有许多的图计算库,比如Pregel、Giraph、GraphLab等,他们有着共同的特点:定义了独特的图计算API,简化图算法的实现;充分利用图数据结构特点加速计算,比通用的数据驱动的计算引擎更快。但随着需求的变化,这些图计算库逐渐被淘汰了。

    现代图计算整个流程里面,涉及了两部分的计算:一是结构化数据的计算和提取,二是图数据计算与分析。为了完成结构化数据和图数据的处理,在GraphX出现之前是用Hadoop Spark这种通用的计算引擎来解决,后半部分是用专门的图计算引擎Pregel来处理,这就需要同时维护、学习两套计算引擎,比较麻烦。同时,混用多个引擎会出现非常多的问题,如成本高,效率低下,数据冗余等问题,这样会使整个计算过程变得复杂。而GraphX就解决了这一问题!作为统一的图计算引擎,GraphX可以实现在一个数据流水线中,使用一种技术解决图 计算相关所有问题!

    GraphX包含两大特色:

    1. New API:打破了结构化数据和图数据的界限。
    2. New Library:直接在Spark上完成图计算。

    图计算的应用

    图能很好地表示各实体之间的关系,因此,在各个领域得到了广泛的应用,如计算机领域、自然科学领域以及交通领域。

    互联网领域的应用

    随着信息技术和网络技术的发展,以Web 2.0 技术为基础的社交网络(如Facebook、人人网)、微博(如Twitter、新浪微博、腾讯微博)等新兴服务中建立了大量的在线社会网络关系,用图表示人与人之间的关系。

    • 在社交网络中,基于图研究社区发现等问题;
    • 在微博中,通过图研究信息传播与影响力最大化等问题;
    • 用图表示如E-mail 中的人与人之间的通信关系,从而可以研究社会群体关系等问题;
    • 在搜索引擎中,可以用图表示网页之间相互的超链接关系,从而计算一个网页的PageRank 得分等。 -

    自然科学领域的应用

    图可以用来在化学分子式中查找分子,在蛋白质网络中查找化合物,在DNA 中查找特定序列等。

    交通领域的应用

    图可用来在动态网络交通中查找最短路径,在邮政快递领域进行邮路规划等。疾病爆发路径的预测与科技文献的引用关系等.图数据虽然结构复杂,处理困难,但是它有很好的表现力,因此得到了各领域的广泛应用。

    展开全文
  • 图计算学习

    千次阅读 2019-03-30 17:30:08
    图计算学习 本文总结自AMiner《图计算研究报告》 概述 图计算定义 图(Graph)是一种重要的数据结构,它由节点 VVV(或称为顶点,即个体) ,与边 EEE(即个体之间的联系)构成,我们一般将图表示为 G(V,E)G(V,...

    图计算学习

    本文总结自AMiner《图计算研究报告》

    概述

    图计算定义

    图(Graph)是一种重要的数据结构,它由节点 VV(或称为顶点,即个体) ,与边 EE(即个体之间的联系)构成,我们一般将图表示为 GVEG(V,E) 。图数据的典型例子有网页链接关系、社交网络、商品推荐等。

    图计算系统中最基础的数据结构由顶点 VV(或节点)、边 EE、权重 DD 这三因素组成,即G=(VED)G=(V,E,D),其中 VV 为顶点(vertex),EE 为边(edge),DD 为权重(data)。

    图计算的特征

    图数据结构很好地表达了数据之间的关联性, 关联性计算是大数据计算的核心——通过获得数据的关联性, 可以从噪音很多的海量数据中抽取有用的信息。 图计算技术解决了传统的计算模式下关联查询的效率低、 成本高的问题,在问题域中对关系进行了完整的刻画,并且具有丰富、高效和敏捷的数据分析能力,其特征有如下三点:

    • 基于图抽象的数据模型

      图计算系统将图结构化数据表示为属性图,它将用户定义的属性与每个顶点和边缘相关联。属性可以包括元数据(例如,用户简档和时间戳)和程序状态(例如顶点的PageRank或相关的亲和度)。源自社交网络和网络图等自然现象的属性图通常具有高度偏斜的幂律度分布和比顶点更多的边数。

    • 图数据模型并行抽象

      图的经典算法中,从PageRank到潜在因子分析算法都是基于相邻顶点和边的属性迭代地变换顶点属性,这种迭代局部变换的常见模式形成了图并行抽象的基础。在图并行抽象中,用户定义的顶点程序同时为每个顶点实现,并通过消息(例如Pregel)或共享状态(例如PowerGraph)与相邻顶点程序交互。每个顶点程序都可以读取和修改其顶点属性,在某些情况下可以读取和修改相邻的顶点属性。

    • 图模型系统优化

      对图数据模型进行抽象和对稀疏图模型结构进行限制,使一系列重要的系统得到了优化。比如 GraphLab 的 GAS 模型更偏向共享内存风格,允许用户的自定义函数访问当前顶点的整个邻域,可抽象成 Gather、Apply 和 Scatter 三个阶段。GAS模式的设计主要是为了适应点分割的图存储模式, 从而避免 Pregel 模型对于邻域很多的顶点、 需要处理的消息非常庞大时会发生的假死或崩溃问题。

    常用技术

    图算法

    • 遍历算法

      图的遍历的复杂性主要表现在以下四个方面:

      1. 在图结构中,没有一个明显的首结点,图中任意一个顶点都可作为第一个被访问的结点,所以要提供首结点。
      2. 在非连通图中,从一个顶点出发,只能够访问它所在的连通分量上的所有顶点,因此,还需考虑如何选取下一个出发点,以访问图中其余的连通分量。
      3. 在图结构中, 可能有回路存在, 那么一个顶点被访问之后, 有可能沿回路又回到该顶点, 在访问之前, 需要判断结点是否已经被访问过。
      4. 在图结构中,一个顶点可以和其它多个顶点相连, 当这样的顶点访问过后,存在如何选取下一个要访问的顶点的问题。
    • 社区发现(Community Detection)

      社区发现算法是用来发现网络中的社区结构,也可以看做是一种聚类算法。 社区发现算法可以用来发现社交网络中三角形的个数(圈子),可以分析出哪些圈子更稳固,关系更紧密,用来衡量社群耦合关系的紧密程度。从一个人的社交圈子里面可以看出,三角形个数越多,说明他的社交关系越稳固、紧密。

    • PageRank

      PageRank源自搜索引擎,用来解决链接分析中网页排名的问题。它是搜索引擎里面非常重要的图算法,可用来对网页做排序。

    • 最短路径

      最短路径用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止。

    图数据计算模型

    图计算模型即针对图数据和图计算特点设计的计算模型,一般应用于图计算系统中。与传统计算模型相比,图计算模型主要针对解决以下问题:

    1. 图计算的频繁迭代带来的读写数据等待和通信开销大的问题;
    2. 图算法对节点和边的邻居信息的计算依赖问题;
    3. 图数据的复杂结构使得图算法难以实现分布不均匀的分块上并行计算的问题。

    屏幕快照 2019-03-27 09.52.38.png

    • 节点中心计算模型

      将图算法细粒度划分为每个节点上的计算操作,节点中心模型将频繁迭代的全局计算转换成多次超步运算,且所有节点独立的并行执行计算操作,数据间的依赖关系仅催在于两个相邻超步之间

      • 同步节点计算模型

        将节点分为活跃和不活跃两种状态,节点接收到消息后进行计算,否则置为不活跃状态

      • 异步节点中心计算模型

        计算节点选择性的读取邻居节点的消息并进行计算,根据每个节点可异步读取和更新的关联边和邻居节点的范围又有三种一致性方案.

      • GAS(gather、apply、scatter)节点计算模型

        沿用同步节点中心计算模型中超步的概念,通过划分大都数节点在单个计算节点内实现并行计算

    • 边中心计算模型

      将图算法的迭代计算转换为可在边列表上顺序执行,避免了随机读写数据对内存资源的高要求.

    • 路径中心计算模型

      将图数据组织为前向边遍历树和后向边遍历树,从而将图计算转换为在树上的迭代计算

    • 子图计算模型

      将图算法转换为多个子图上的迭代运算,减少了计算时的通信开销和迭代操作次数

    无标题.png

    图计算系统

    1.png

    • 单机内存图处理系统

      Ligra、Galois、GraphMat、Polymer

    • 单机外存图处理系统

      GraphChi、X-Stream、VENUS、GridGraph

    • 分布式内存图处理系统

      Pregel、Giraph、GraphLab、PowerGraph、GraphX、Gemin

    • 分布式外存图处理系统

      Chaos

    • 面向机器学习的分布式图计算系统

      TuX2^2

    图计算中的关键技术

    • 异构计算平台
    • 通信模型
    • 执行模型
      • 同步执行
      • 异步执行
    • 图的划分
    • 负载均衡
    • 容错

    技术挑战

    • 局部性差
    • 数据及图结构驱动的计算
    • 图数据的非结构化特性
    • 高访存/计算比

    高引论文

    • Pregel: a system for large-scale graph processing
    • Distributed GraphLab: a framework for machine learning and data mining in the cloud
    • PowerGraph: distributed graph-parallel computation on natural graphs
    • GraphLab: A New Framework For Parallel Machine Learning.
    • GraphChi: large-scale graph computation on just a PC
    • Graphx: Graph processing in a distributed dataflow framework
    • X-Stream: edge-centric graph processing using streaming partitions
    • Ligra: a lightweight graph processing framework for shared memory
    • PowerLyra: differentiated graph computation and partitioning on skewed graphs
    • GridGraph: Large-Scale Graph Processing on a Single Machine Using 2-Level Hierarchical Partitioning
    展开全文
  • 图计算思维与实践 (一)概览

    万次阅读 2020-12-27 15:51:34
    本文介绍了以知识图谱、网络分析为主的图计算的应用,阐述了图思维的方式。

    前言

    说起图计算,可能很多人能想到的是曾经学过图数据结构、复杂网络等,对于其在工程中的实际应用知之甚少。亦或者,很多人听说过知识图谱,却很少想过它是用一种什么样的方式在解决什么样的问题,能否引入到自己的业务领域里面。

    本文的主要内容源自我在项目组的一次分享,主要包含三块:概览、核心概念与算法、在项目中的实践。本意是期望通过分享,能让大家对图计算能有更好的认识,能在合适的业务场景下运用图思维去解决一些实际问题。这里将其整理成博文,期望能对同道中人有所帮助。

    另外,本文在概览部分会提及多个产品与应用,这些只是用来阐述要表达的内容,并无广告之意。

    一个有趣的App

    我们先从一个有趣的App说起。“全历史”,是我在刷知乎时偶然看到别人推荐的一款App,下载后把玩一番,越看越有趣。传统我们了解历史的方式,都是一篇篇文章去阅读,而“全历史”从海量历史信息中将人物、事件、时间、地点等等,以及它们之间的关系进行了提取,构建了知识图谱,让我们有机会从一些不一样的视角去了解历史。其中,“关系图谱”和“AB路径”是两个非常有趣的版块。

    在“关系图谱”中,我们可以搜索一个历史人物或者历史事件,返回的结果并不是包含这个关键词的很多文章,而是一张以该人物或事件为中心的图结构。以搜索“汉武帝”为例,返回结果给出了与汉武帝有关联的人物、事件、地点等以及对应的关系。通过这样的图结构,我们可以很直观的了解汉武帝的相关信息,然后有选择性的进行深入阅读。

    “AB路径”让我们可以探寻任意两个人物或地点之间的关系,你可以天马行空的输入任何关键词,它总会给出一些有趣的结果。比如,“孙中山”和“汉武帝”,你能想象出他们之间的有什么关系吗?搜索结果给出了很多关联路径,虽然有些看起来比较突兀,却给我们了解历史提供了一些新的视角,帮助我们发现一些不曾想过的信息。

    知识图谱与社交网络分析

    信息展示直观、探寻潜在的有关联的历史知识,是“全历史”给我的最大的印象,也是知识图谱的威力所在。那么,究竟什么是知识图谱?

    当我们在Google中搜索一个东西时,Google看到的是我们输入的一个关键词,它会去全网中查出包含了这个关键词的网页。而从人的视角来看,我们搜索的目的是为了了解一个事物,不是单纯的字符串匹配。为了更好地理解人的搜索意图,提高搜索结果质量,Google在2012年5月提出了知识图谱的概念。“Things, not strings.”,是当时出发点,感兴趣的读者可以进一步阅读《Introducing the Knowledge Graph: things, not strings》。

    Google从多个信息源(比如Wikipedia)提取相关领域的人物、事件、时间等元素,以及它们之间的关系,构建图谱。当用户搜索某个关键词时,可以快速提取出与其有关联的元素,并以卡片的形式呈现在搜索页面的右侧。比如,搜索“Donald Trump”,除了返回包含这个关键词的网页,还有右侧的知识卡片,里面有川普的各种基本信息。

    知识图谱,由知识(Knowledge)和图谱(Graph)两个词构成,后者是最终的表现形态,而前者是界定这种表现形态的范畴。在Google提出这个技术概念之后,知识图谱很快被衍生应用到很多不同的领域,目前来看,做的好的都是在某些细分特定领域的应用,比如前面提到的针对历史知识的图谱,也就是说大家会在某个范畴内来应用。而对于图谱,其由大量节点、节点之间的关系构成,比如下图关于美国大选知识图谱的一部分,里面的川普、拜登、2020大选、宾西法利亚大学都是节点元素,箭头表达的是他们之间的关系。

    在Google提出知识图谱的技术概念之前,学术界已经有很多关于语义网络的研究。语义网络,是通过图对知识进行表达的一种方式,普遍认为是知识图谱发展的理论基础。综合来看,由节点元素和元素之间的关系构成图,由图构成网络,而知识图谱是构建在网络之上的针对某个特定领域的应用。

    除了知识图谱,图计算在社交网络分析领域也有着重要的应用。我们今天使用的微信、微博、大众点评等,都有着不同程度的社交信息,由人、事件以及相互的关系构成了社交网络。下图是我在2016年做的一个针对用户在微信端的转发关系以及带来的引流效果的分析,从而给出相应的激励。

    图思维

    讲到这里,我想整理一下什么是图思维。下图是美剧《越狱》中Michael准备进入监狱营救哥哥之前的画面,他花费了很长一段时间来调查研究,将各种因素贴到墙上,用线串起来,然后一遍又一遍的推演思考。我们在很多其他侦探电视里面也能看到类似的场景。他们为什么要这样做?

    这是一种帮助思考、寻找线索的方式,把已知的信息以及信息之间的关系列出来,然后通过关系推理得出新的信息。图思维的核心,在于联系,当我们思考的重点在于事物之间如何联系,或者期望通过联系去产生一些新的发现的时候,其实已经运用了图思维。知识图谱、社交网络分析等都是在运用这样的图思维的方式去解决实际业务中的问题。

    我们再来看看,当你期望运用图思维时,需要做哪些事情?如下图所示,主要分为两块:

    • 图构建,即从诸多数据源中提取节点、节点之间的关系。对于结构化和半结构化数据而已,通常有比较明确的结构定义,提取起来会相对容易一些;而对于非结构化数据,则需要利用NLP等方式来进行语义理解,提取所需要的领域知识。对于提取出来的信息,有时还需要进行消歧,比如“李娜”,有歌手、网球运动员等多个人,那么具体对应的是哪个,则需要结合上下文来作出判断。图构建的难易程度,取决于具体的业务场景和已有数据源。
    • 图探索,即利用图与网络中的信息与特性来解决问题。最基本的应用是根据给定的节点或关系进行图数据查询,输出相应的关联信息;其次是网络特征分析,比如寻找有影响力的节点等;最后是知识推理,用于发现新的关系与属性。

    更多的应用

    最后,我们来看看图计算在其他领域的一些应用。

    “企查查”,针对工商领域的企业信息构建知识图谱。我们可以在这里面查到一家公司的核心人物、投资公司等的关系信息,以及基于这些信息的深层挖掘,比如实际控制人、股权穿透等等。

    在风控、反洗钱等金融领域的应用。这块并没有形成系统的知识图谱,而是针对某些特定业务的图计算应用,比如在反洗钱方面,通过构建账号、账号之间的交易关系的图谱来寻找异常交易社团。下图所示是我之前看到的一篇非常好的文章,感兴趣的读者可以自行百度查阅。

    在网络安全领域,我们在诸多公司的白皮书中有看到基于图计算的核心引擎,比如Crowdstrike的Threat Graph Database。在Google的VirusTotal中,也看到基于IP、Domain、文件MD5等之间的图关联信息。我们也有利用图计算来实现数据挖掘分析,会在第三块“项目实践”中阐述。

    小结

    图计算在我们的工程领域有着广泛的应用,尤其以知识图谱、社交网络分析为主。当我们尝试思考事物之间关系,或者期望通过关系去产生一些新的发现的时候,不妨考虑下图计算是否可以很好的解决问题。



    (未完待续,本文地址:https://bruce.blog.csdn.net/article/details/111768881

    版权声明:本人拒绝不规范转载,所有转载需征得本人同意,并且不得更改文字与图片内容。大家相互尊重,谢谢!

    Bruce
    2020/12/27 下午

    展开全文
  • Pregel(图计算)技术原理

    万次阅读 多人点赞 2018-06-02 14:32:51
    图计算简介 图结构数据: 许多大数据都是以大规模图或网络的形式呈现。 许多非图结构的大数据,也常常会被转换为图模型后进行分析。 图数据结构很好地表达了数据之间的关联性。 关联性计算是大数据计算的核心...

    图计算简介

    图结构数据:

    • 许多大数据都是以大规模图或网络的形式呈现。
    • 许多非图结构的大数据,也常常会被转换为图模型后进行分析。
    • 图数据结构很好地表达了数据之间的关联性
    • 关联性计算是大数据计算的核心——通过获得数据的关联性,可以从噪音很多的海量数据中抽取有用的信息。

    传统图计算解决方案的不足之处:

    很多传统的图计算算法都存在以下几个典型问题:

    1. 常常表现出比较差的内存访问局部性
    2. 针对单个顶点的处理工作过少
    3. 计算过程中伴随着并行度的改变

    针对大型图(比如社交网络和网络图)的计算问题,可能的解决方案及其不足之处具体如下:

    1. 为特定的图应用定制相应的分布式实现
    2. 基于现有的分布式计算平台进行图计算
    3. 使用单机的图算法库:比如BGL、LEAD、NetworkX、JDSL、Standford GraphBase和FGL等
    4. 使用已有的并行图计算系统:比如,Parallel BGL和CGM Graph,实现了很多并行图算法

    图计算通用软件:

    针对大型图的计算,目前通用的图计算软件主要包括两种:

    • 第一种主要是基于遍历算法的、实时的图数据库,如Neo4j、OrientDB、DEX和 Infinite Graph。
    • 第二种则是以图顶点为中心的、基于消息传递批处理的并行引擎,如GoldenOrb、Giraph、Pregel和Hama,这些图处理软件主要是基于BSP模型实现的并行图处理系统。

    一次BSP(Bulk Synchronous Parallel Computing Model,块同步并行计算模型,又称“大同步”模型)计算过程包括一系列全局超步(所谓的超步就是计算中的一次迭代),每个超步主要包括三个组件:

    1. 局部计算:每个参与的处理器都有自身的计算任务。
    2. 通讯:处理器群相互交换数据。
    3. 栅栏同步(Barrier Synchronization):当一个处理器遇到“路障”(或栅栏),会等到其他所有处理器完成它们的计算步骤。

    这里写图片描述

    图:一个超步的垂直结构图

    Pregel图计算模型

    Pregel简介:

    谷歌公司在2003年到2004年公布了GFS、MapReduce和BigTable

    谷歌在后Hadoop时代的新“三驾马车”

    • Caffeine
    • Dremel
    • Pregel

    Pregel是一种基于BSP模型实现的并行图处理系统。

    为了解决大型图的分布式计算问题,Pregel搭建了一套可扩展的、有容错机制的平台,该平台提供了一套非常灵活的API,可以描述各种各样的图计算。

    Pregel作为分布式图计算的计算框架主要用于图遍历、最短路径、PageRank计算等等。

    有向图和顶点:

    这里写图片描述

    图:有向图和顶点
    • Pregel计算模型以有向图作为输入
    • 有向图的每个顶点都有一个String类型的顶点ID
    • 每个顶点都有一个可修改的用户自定义值与之关联
    • 每条有向边都和其源顶点关联,并记录了其目标顶点ID
    • 边上有一个可修改的用户自定义值与之关联

    这里写图片描述

    图:超步示意图
    • 在每个超步S中,图中的所有顶点都会并行执行相同的用户自定义函数。
    • 每个顶点可以接收前一个超步(S-1)中发送给它的消息,修改其自身及其出射边的状态,并发送消息给其他顶点,甚至是修改整个图的拓扑结构。
    • 在这种计算模式中,“边。”并不是核心对象,在边上面不会运行相应的计算,只有顶点才会执行用户自定义函数进行相应计算。

    顶点之间的消息传递:

    这里写图片描述

    图:纯消息传递模型图

    采用消息传递模型主要基于以下两个原因:

    1. 消息传递具有足够的表达能力,没有必要使用远程读取或共享内存的方式.
    2. 有助于提升系统整体性能.

    Pregel的计算过程:

    Pregel的计算过程是由一系列被称为“超步”的迭代组成的。

    在每个超步中,每个顶点上面都会并行执行用户自定义的函数,该函数描述了一个顶点V在一个超步S中需要执行的操作。

    该函数可以读取前一个超步(S-1)中其他顶点发送给顶点V的消息,执行相应计算后,修改顶点V及其出射边的状态,然后沿着顶点V的出射边发送消息给其他顶点,而且,一个消息可能经过多条边的传递后被发送到任意已知ID的目标顶点上去。

    这些消息将会在下一个超步(S+1)中被目标顶点接收,然后像上述过程一样开始下一个超步(S+1)的迭代过程。

    在Pregel计算过程中,一个算法什么时候可以结束,是由所有顶点的状态决定的。

    在第0个超步,所有顶点处于活跃状态。

    当一个顶点不需要继续执行进一步的计算时,就会把自己的状态设置为“停机”,进入非活跃状态。

    当一个处于非活跃状态的顶点收到来自其他顶点的消息时,Pregel计算框架必须根据条件判断来决定是否将其显式唤醒进入活跃状态。

    当图中所有的顶点都已经标识其自身达到“非活跃(inactive)”状态,并且没有消息在传送的时候,算法就可以停止运行。

    这里写图片描述

    图:一个简单的状态机图

    一个简单示例:

    这里写图片描述

    图:一个求最大值的Pregel计算过程图

    Pregel的工作原理

    Pregel的C++ API:

    Pregel已经预先定义好一个基类——Vertex类:

    template <typename VertexValue, typename EdgeValue, typename MessageValue>
    class Vertex {
    	public:
    	//定义的虚函数,Computer();用户的处理逻辑在这实现
    	virtual void Compute(MessageIterator* msgs) = 0;
    	//参数顶点ID
    	const string& vertex_id() const;
    	//记录执行的超步数
    	int64 superstep() const;
    	//获取顶点关联的值
    	const VertexValue& GetValue();
    	VertexValue* MutableValue();
    	//出射边迭代器,获取所有的出射边
    	OutEdgeIterator GetOutEdgeIterator();
    	//发送消息
    	void SendMessageTo(const string& dest_vertex, const MessageValue& message);
    	//设为停机
    	void VoteToHalt();
    };
    

    在Vetex类中,定义了三个值类型参数,分别表示顶点、边和消息。每一个顶点都有一个给定类型的值与之对应。

    编写Pregel程序时,需要继承Vertex类,并且覆写Vertex类的虚函数Compute()。

    消息传递机制:

    顶点之间的通讯是借助于消息传递机制来实现的,每条消息都包含了消息值和需要到达的目标顶点ID。用户可以通过Vertex类的模板参数来设定消息值的数据类型。

    在一个超步S中,一个顶点可以发送任意数量的消息,这些消息将在下一个超步(S+1)中被其他顶点接收。

    一个顶点V通过与之关联的出射边向外发送消息,并且,消息要到达的目标顶点并不一定是与顶点V相邻的顶点,一个消息可以连续经过多条连通的边到达某个与顶点V不相邻的顶点U,U可以从接收的消息中获取到与其不相邻的顶点V的ID。

    Combiner:

    Pregel计算框架在消息发出去之前,Combiner可以将发往同一个顶点的多个整型值进行求和得到一个值,只需向外发送这个“求和结果”,从而实现了由多个消息合并成一个消息,大大减少了传输和缓存的开销。

    在默认情况下,Pregel计算框架并不会开启Combiner功能。

    当用户打算开启Combiner功能时,可以继承Combiner类并覆写虚函数Combine()。

    此外,通常只对那些满足交换律和结合律的操作才可以去开启Combiner功能

    这里写图片描述

    图:Combiner应用的例子

    Aggregator:

    Aggregator提供了一种全局通信、监控和数据查看的机制

    在一个超步S中,每一个顶点都可以向一个Aggregator提供一个数据,Pregel计算框架会对这些值进行聚合操作产生一个值,在下一个超步(S+1)中,图中的所有顶点都可以看见这个值。

    Aggregator的聚合功能,允许在整型和字符串类型上执行最大值、最小值、求和操作,比如,可以定义一个“Sum”Aggregator来统计每个顶点的出射边数量,最后相加可以得到整个图的边的数量。

    Aggregator还可以实现全局协同的功能,比如,可以设计“and” Aggregator来决定在某个超步中Compute()函数是否执行某些逻辑分支,只有当“and” Aggregator显示所有顶点都满足了某条件时,才去执行这些逻辑分支。

    拓扑改变:

    Pregel计算框架允许用户在自定义函数Compute()中定义操作,修改图的拓扑结构,比如在图中增加(或删除)边或顶点。

    对于全局拓扑改变,Pregel采用了惰性协调机制。

    对于本地的局部拓扑改变,是不会引发冲突的,顶点或边的本地增减能够立即生效,很大程度上简化了分布式编程。

    输入和输出:

    在Pregel计算框架中,图的保存格式多种多样,包括文本文件、关系数据库或键值数据库等。

    在Pregel中,“从输入文件生成得到图结构”和“执行图计算”这两个过程是分离的,从而不会限制输入文件的格式。

    对于输出,Pregel也采用了灵活的方式,可以以多种方式进行输出。

    Pregel的体系结构

    Pregel的执行过程:

    这里写图片描述

    图:图的划分图
    • 在Pregel计算框架中,一个大型图会被划分成许多个分区,每个分区都包含了一部分顶点以及以其为起点的边。
    • 一个顶点应该被分配到哪个分区上,是由一个函数决定的,系统默认函数为hash(ID) mod N,其中,N为所有分区总数,ID是这个顶点的标识符;当然,用户也可以自己定义这个函数。
    • 这样,无论在哪台机器上,都可以简单根据顶点ID判断出该顶点属于哪个分区,即使该顶点可能已经不存在了。

    这里写图片描述

    图:Pregel的执行过程

    在理想的情况下(不发生任何错误),一个Pregel用户程序的执行过程如下:

    1. 选择集群中的多台机器执行图计算任务,有一台机器会被选为Master,其他机器作为Worker。
    2. Master把一个图分成多个分区,并把分区分配到多个Worker。一个Worker会领到一个或多个分区,每个Worker知道所有其他Worker所分配到的分区情况。
    3. Master会把用户输入划分成多个部分。然后,Master会
      为每个Worker分配用户输入的一部分。如果一个Worker从输入内容中加载到的顶点,刚好是自己所分配到的分区中的顶点,就会立即更新相应的数据结构。否则,该Worker会根据加载到的顶点的ID,把它发送到其所属的分区所在的Worker上。当所有的输入都被加载后,图中的所有顶点都会被标记为“活跃”状态。
    4. Master向每个Worker发送指令,Worker收到指令后,开始运行一个超步。当一个超步中的所有工作都完成以后,Worker会通知Master,并把自己在下一个超步还处于“活跃”状态的顶点的数量报告给Master。上述步骤会被不断重复,直到所有顶点都不再活跃并且系统中不会有任何消息在传输,这时,执行过程才会结束。
    5. 计算过程结束后,Master会给所有的Worker发送指令,通知每个Worker对自己的计算结果进行持久化存储。

    容错性:

    Pregel采用检查点机制来实现容错。在每个超步的开始,Master会通知所有的Worker把自己管辖的分区的状态写入到持久化存储设备。

    Master会周期性地向每个Worker发送ping消息,Worker收到ping消息后会给Master发送反馈消息。

    每个Worker上都保存了一个或多个分区的状态信息,当一个Worker发生故障时,它所负责维护的分区的当前状态信息就会丢失。Master监测到一个Worker发生故障“失效”后,会把失效Worker所分配到的分区,重新分配到其他处于正常工作状态的Worker集合上,然后,所有这些分区会从最近的某超步S开始时写出的检查点中,重新加载状态信息。

    Worker:

    在一个Worker中,它所管辖的分区的状态信息是保存在内存中的。分区中的顶点的状态信息包括:

    • 顶点的当前值。
    • 以该顶点为起点的出射边列表,每条出射边包含了目标顶点ID和边的值。
    • 消息队列,包含了所有接收到的、发送给该顶点的消息。
    • 标志位,用来标记顶点是否处于活跃状态。

    在每个超步中,Worker会对自己所管辖的分区中的每个顶点进行遍历,并调用顶点上的Compute()函数,在调用时,会把以下三个参数传递进去:

    • 该顶点的当前值
    • 一个接收到的消息的迭代器
    • 一个出射边的迭代器

    在Pregel中,为了获得更好的性能,“标志位”和输入消息队列是分开保存的。

    对于每个顶点而言,Pregel只保存一份顶点值和边值,但是,会保存两份“标志位”和输入消息队列,分别用于当前超步和下一个超步。

    如果一个顶点V在超步S接收到消息,那么,它表示V将会在下一个超步S+1中(而不是当前超步S中)处于“活跃”状态。

    当一个Worker上的一个顶点V需要发送消息到其他顶点U时,该Worker会首先判断目标顶点U是否位于自己机器上。

    如果目标顶点U在自己的机器上,就直接把消息放入到与目标顶点U对应的输入消息队列中。

    如果发现目标顶点U在远程机器上,这个消息就会被暂时缓存到本地,当缓存中的消息数目达到一个事先设定的阈值时,这些缓存消息会被批量异步发送出去,传输到目标顶点所在的Worker上。

    Master:

    Master的主要作用:

    • Master主要负责协调各个Worker执行任务,每个Worker会借助于名称服务系统定位到Master的位置,并向Master发送自己的注册信息,Master会为每个Worker分配一个唯一的ID。
    • Master维护着关于当前处于“有效”状态的所有Worker的各种信息,包括每个Worker的ID和地址信息,以及每个Worker被分配到的分区信息。
    • Master中保存这些信息的数据结构的大小,只与分区的数量有关,而与顶点和边的数量无关。

    Master与Worker的交互:

    • 一个大规模图计算任务会被Master分解到多个Worker去执行,在每个超步开始时,Master都会向所有处于“有效”状态的Worker发送相同的指令,然后等待这些Worker的回应。
    • 如果在指定时间内收不到某个Worker的反馈,Master就认为这个Worker失效。
    • 如果参与任务执行的多个Worker中的任意一个发生了故障失效,Master就会进入恢复模式。
    • 在每个超步中,图计算的各种工作,比如输入、输出、计算、保存和从检查点中恢复,都会在“路障(barrier)”之前结束。

    Master在内部运行了一个HTTP服务器来显示图计算过程的各种信息。用户可以通过网页随时监控图计算执行过程各个细节:

    • 图的大小
    • 关于出度分布的柱状图
    • 处于活跃状态的顶点数量
    • 在当前超步的时间信息和消息流量
    • 所有用户自定义Aggregator的值

    Aggregator:

    每个用户自定义的Aggregator都会采用聚合函数对一个值集合进行聚合计算得到一个全局值。

    每个Worker都保存了一个Aggregator的实例集,其中的每个实例都是由类型名称和实例名称来标识的。

    在执行图计算过程的某个超步S中,每个Worker会利用一个Aggregator对当前本地分区中包含的所有顶点的值进行归约,得到一个本地的局部归约值。

    在超步S结束时,所有Worker会将所有包含局部归约值的Aggregator的值进行最后的汇总,得到全局值,然后提交给Master。

    在下一个超步S+1开始时,Master就会将Aggregator的全局值发送给每个Worker。

    Pregel的应用实例—单源最短路径

    这里写图片描述

    图:Dijkstra算法是解决单源最短路径问题的贪婪算法

    Pregel非常适合用来解决单源最短路径问题,实现代码如下:

    class ShortestPathVertex
    	: public Vertex<int, int, int> {
    	 void Compute(MessageIterator* msgs) {
    	 int mindist = IsSource(vertex_id()) ? 0 : INF;
    	 for (; !msgs->Done(); msgs->Next())
    	 	mindist = min(mindist, msgs->Value());
    	 if (mindist < GetValue()) {
    		 *MutableValue() = mindist;
    	 	OutEdgeIterator iter = 	GetOutEdgeIterator();
     		for (; !iter.Done(); iter.Next())
     		SendMessageTo(iter.Target(),
     		mindist + iter.GetValue());
     	}
    	VoteToHalt();
    	}
    };
    

    Hama简介

    Hama概述:

    • Hama是Google Pregel的开源实现。
    • 与Hadoop适合于分布式大数据处理不同,Hama主要用于分布式的矩阵、graph、网络算法的计算。
    • Hama是在HDFS上实现的BSP(Bulk Synchronous Parallel)计算框架,弥补Hadoop在计算能力上的不足。

    Hama是基于BSP(BulkSynchronous Parallel)计算技术的并行计算框架,用于大量的科学计算(比如矩阵、图论、网络等)。BSP计算技术最大的优势是加快迭代,在解决最小路径等问题中可以快速得到可行解。同时,Hama提供简单的编程,比如flexible模型、传统的消息传递模型,而且兼容很多分布式文件系统,比如HDFS、Hbase等。用户可以使用现有的Hadoop集群进行Hama BSP.

    现在Hama最新的版本为2012年6月31号发行的0.5.0.这是 Hama 做为 Apache 顶级项目后首次发布的版本,该版本包含两个显著的新特性,分别是消息压缩器和完整的 Google Pregel 克隆,另外在计算系统性能和可持续性上都得以提升。

    Hama结构:

    Hama主要有三部分构成:BSPMaster、GroomServers 和Zookeeper。与Hadoop结构很相似,但没有通信和同步机制的部分。

    Hama的集群由一个BSPMaster和多个互不关联的GroomServer作计算结点组成,HDFS和Zookeeper都可以是独立的集群。启动从BSPMaster开始,如果是master会启动BSPMaster、GroomServer两个进程,如果只是计算结点则只会启动GroomServer,启动/关闭脚本都是Master机器远程在GroomServer机器上执行。

    这里写图片描述

    图:Hama体系结构

    BSPMaster:

    BSPMaster 即集群的主,负责了集群各GroomServer结点的管理与作业的调度,就我所知它还存在单点的问题。相当于Hadoop的JobTracker或HDFS的NameNode。其基本作用如下:

    1. 维持Groom服务器状态。
    2. 维护supersteps和集群中的计数器。
    3. 维护Job的进度信息。
    4. 调度作业和任务分配给Groom服务器
    5. 分配执行的类和配置,整个Groom服务器。
    6. 为用户提供集群控制接口(Web和基于控制台)。

    GroomServer:

    GroomServer是一个process,通过BSPMaster启动BSP任务。每一个Groom都有BSPMaster通信,可以通过BSPMaster获取任务,报告状态。GroomServer在HDFS或者其他文件系统上运行,通常,GroomServer与与数据结点在一个物理结点上运行,以保证获得最佳性能。

    Zookeeper:

    Zookeeper用来管理BSPPeer的同步,用于实现BarrierSynchronisation机制。在ZK上,进入BSPPeer主要有进入Barrier和离开Barrier操作,所有进入Barrier的Peer会在zk上创建一个EPHEMERAL的node(/bsp/JobID/Superstep NO./TaskID),最后一个进入Barrier的Peer同时还会创建一个readynode(/bsp/JobID/Superstep NO./ready),Peer进入阻塞状态等待zk上所有task的node都删除后退出Barrier。

    BSP Programming Model:

    BSP(BulkSynchronous Parallel,整体同步并行计算模型)是英国计算机科学家Viliant在上世纪80年代提出的一种并行计算模型。Google发布的一往篇论文(《Pregel: A System for Large-Scale Graph Processing》)使得这一概念被更多人所认识,据说在Google 80%的程序运行在MapReduce上,20%的程序运行在Pregel上。和MapReduce一样,Google并没有开源Pregel,Apache按Pregel的思想提供了类似框架Hama。


    以上内容为听华为大数据培训课程和大学MOOC上厦门大学 林子雨的《大数据技术原理与应用》课程而整理的笔记。

    大数据技术原理与应用https://www.icourse163.org/course/XMU-1002335004


    展开全文
  • 直方图计算

    千次阅读 2013-08-02 18:53:18
    接下来,我们介绍如何用(C语言版和C++语言版的)OpenCV来计算一维直方图计算,然后,给合python开发工具和NumPy计算和绘制直方图。在数字图像处理中,灰度直方图是一种最简单、最有用的工具之一,它概括了一幅图像的...
  • 图计算的作用2. 本专题的写作目的3. Flink Gelly引擎总览3.1. Gelly的源码结构1. Graph的存储数据结构2. 图的分类3. 图的验证以及指标4. 图的生成器5. Library6.图的迭代操作7. examples案例4. 后记 1. 图计算的...
  • 基于图查询系统的图计算引擎

    千次阅读 2019-08-28 16:28:41
    基于图查询系统的图计算引擎柯学翰, 陈榕上海交通大学软件学院并行与分布式系统研究所,上海 200240摘要:在目前的研究中,图查询和图计算系统是相互独立的,但在实际应用中...
  • 1.2 图处理的难点:1.3 图储存方式:(1) 邻接矩阵:(2) 邻接表:(3) 十字链表(有向图):(4) 邻接多重表(无向图):(5) 边集数组(权重图):二、图计算概论:2.1 基本概念:2.2 开源框架:Ligra:Gemini:Plato:...
  • 本文介绍了图计算中的核心概念与算法,了解这些基本知识可以帮助我们更好更快的探索一个图,找到相应的解决方案,同时也是更深层次研究的基础。
  • 软考—必考考点之网络图计算专题

    千人学习 2016-04-06 11:00:27
    软考教程,软考考点网络图计算专题分析,进度管理中的工期和关键路径的计算是每年的必考题目,又是一个难点。该课程内容包括1.双代号网络图的绘制、最早开始时间、最早结束时间、最晚开始时间、最晚结束时间、自由...
  • OpenCV视差图计算

    千次阅读 2018-05-14 21:43:52
    OpenCV视差图计算 如今立体视觉越来越多的被应用到工业检测、机器人、自动驾驶、AR/VR领域,因为目前自己也在一个产品研发期,自己倒腾了几天做了一些通过双目进行避障的小实验,把一些比较流程化的代码以及相应...
  • 2019 年 11 月,腾讯一口气宣布开源五个重磅项目,其中就包括图计算框架 Plato。图计算火了有一段时间了,随着 5G、IoT 等技术的发展,图计算的热度预计将只增不减。
  • Spark GraphX图计算框架原理概述

    千次阅读 2018-08-24 13:38:59
    言之易而为之难,学习大数据之图计算,就是从“浊”中找出“静”的规律,达到“清”的境界;从“安”中找出“生”的状态。 概述 GraphX是Spark中用于图和图计算的组件,GraphX通过扩展Spark RDD引入了一个新...
  • /* 版权声明:可以任意转载,转载时请务必标明文章原始出处和作者信息 .*/ CopyMiddle: 张俊林 节选自《大数据...使用Mapreduce进行图计算 使用MapReduce框架来针对大规模图数据进行计算的研究工作相对较少,这主
  • SparkGraphX图计算(一)

    千次阅读 2019-09-04 15:28:07
    SparkGraphX图计算(一)一、什么是图二、什么是SparkGraphX三、常见的图算法1、PageRank算法2、最短路径算法3、社群发现4、推荐算法ALS和SVD++四、GraphX数据抽象RDPG五、图基本结构1、GraphX的底层设计2、图数据...
  • 如何在图数据库上实现图计算框架

    千次阅读 2015-04-02 16:35:24
    图数据库解决的是图数据的查询问题,图计算框架解决的是图计算的问题,首先我们要搞清楚二者如何区分,再讨论如何结合。 图查询:主要面向的是路径查询。比如从一点出发的两跳邻居;再如从点A出发3跳内和B点的路径...
  • Kinect 获取深度图计算距离,并进行彩色图和深度图之间的映射 最近所进行的项目需要利用KINECT获取深度距离,需要得到彩色图中某一点的位置,在网上找了很多资料,都不是很好,碰了很多坑,这里我整理了一下发给...
  • 图计算的表示中: 1.节点表示某种运算,一般都是二元运算 2.有向边,表示数据和数据的流向比如 上面的图中 有三个节点u=bc,v=a+u,J=3v 它们都在做运算。 而那些边就表示数据的流动。什么意思嘞? 比如 节点u=...
  • 图计算简介和Pregel简介

    千次阅读 2018-04-13 21:27:43
    一、图计算简介1、图结构数据许多大数据都是以大规模图或网络的形式呈现,如社交网络、传染病传播途径、交通事故对路网的影响许多非图结构的大数据,也常常会被转换为图模型后进行分析图数据结构很好地表达了数据...
  • 图计算系统进展和展望

    千次阅读 2016-11-16 14:44:06
    文 / 成杰峰,刘勤,李震国 本文为《程序员》原创文章,未经允许不得转载,更多精彩文章请订阅2017年《程序员》...本文先展开叙述图计算技术的几个核心层面,进而介绍华为诺亚方舟实验室的VENUS图计算系统,最后对...
  • 高德地图计算两坐标之间距离

    万次阅读 多人点赞 2017-06-01 17:48:29
    最近在做与地图相关的应用,使用了高德地图,研究了下高德地图计算两坐标距离的方法,官网上提供的开发包中有相关的方法,但是我的产品中比较特殊,无法直接使用提供的方法,所以就自己封装了相关计算方法,供大家...
  • 直方图计算(续)

    千次阅读 2013-08-03 17:41:09
    在直方图计算一节中,介绍了相关图像直方图计算。本节进行回顾一下相关知识,同时加深一步了解图像直方图相关步骤,以及实践一维和二维直方图计算。thresh是一个二维数据,里面存储每个bin的上下边界,对于非均匀...
  • 简介:随着大数据的爆发,图数据的应用规模不断增长,现有的图计算系统仍然存在一定的局限。阿里巴巴拥有全球最大的商品知识图谱,在丰富的图场景和真实应用的驱动下,阿里巴巴达摩院智能计算实验室研发并开源了全球...
  • 图像显著图计算

    千次阅读 2017-01-23 15:38:44
     因为需求原因,看了下显著这块,本篇主要是对论文:Saliency Filters: Contrast Based Filtering for Salient Region Detection的实现和总结。 基本原理  主要涉及超像素和一些基本假设:1、超像素分割和滤波...
  • 图计算的种类和应用场景

    千次阅读 2018-08-20 16:03:55
    图计算主要将客观世界中事物间关系完整地刻画、计算和分析的一门技术。它根据人工智能三个基本特点运作:理解、推理和学习。它可以用于银行对于不良贷款的预测,也可以用于网站大数据分析推荐等功能。图算法有很多种...
  • 直方能够描述一幅图像中颜色的全局分布,而且容易理解和实现,所以入门级的图像相似度计算都是使用它的。 直方算法是对源图像与要筛选的图像进行直方数据采集,对采集的各自图像直方进行归一化再使用巴氏...
  • 图计算 专门针对图结构数据的处理 社交网络数据 传染病 交通事故等 非图结构的大数据,也可以转换成为图模型 很好的表达了数据之间的关联性 大数据计算核心:关联计算 图计算软件 基于遍历算法的、实时...
  • Spark图计算GraphX介绍及实例

    千次阅读 2017-09-29 17:08:17
    1、GraphX介绍 ...众所周知·,社交网络中人与人之间有很多关系链,例如Twitter、Facebook、微博和微信等,这些都是大数据产生的地方都需要图计算,现在的图处理基本都是分布式的图处理,而并非单机处理。Sp
  • 图计算中aggregateMessages方法的使用

    千次阅读 2016-11-17 21:19:40
    今天刚刚学习的 spark图计算已经使用aggregateMessages方法替代之前版本的mapReduceTriplets对图聚合的计算。  aggregateMessages具有triptsendTODst的优点,当数据的维数过多时候 ,我们只选择需要处理的数据...
  • 本文从计算机领域的“祖师爷”艾伦·图灵提出的图灵机概念开始,介绍了图形计算的概念,并以示例介绍了apache storm,基于apache storm如何进行分布式图形计算。apache storm是一个免费开源的分布式实时计算系统,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 219,695
精华内容 87,878
关键字:

图计算