首页 > 编程知识 正文

flink 计算,flink 代码

时间:2023-05-05 16:28:48 阅读:228044 作者:1788

文章目录 1. 图计算的作用2. 本专题的写作目的3. Flink Gelly引擎总览3.1. Gelly的源码结构1. Graph的存储数据结构2. 图的类别3. 图的验证以及指标4. 图的生成器5. Library6.图的迭代计算7. examples案例 4. 后记

1. 图计算的作用

哲学上说事物之间普遍存在联系的,通常来说可以将事物看作图的顶点,事物间的联系看作图的边,典型的场景:

对应于学术界的文献来说,每篇论文可以看作顶点,文献之间的引用关系可以看作边。对应于互联网来说,web页面可以看作顶点,页面之间的超链接关系可以看作边。对应于社交网络来说用户可以看作顶点,用户之间建立的关系可以看作边,关系的类别可以看作权重。对应于大型电商来说,用户和商品可以看作顶点(二部图),它们之间的购买关系可以看作边,购买次数可以看作权重。则抽象出来的图数据就构成了研究和商用的基础。

可以探究很多有趣的问题如:“权威节点(中心)”,“小圈子”,“世界上任意两个人之间的人脉距离”,“消息是如何传播的”等。而将这些有意思的现象用到商业领域,则底层的运算常常是图相关的算法。例如图的最短路径算法可以做好友推荐,计算关系紧密程度;最小连通图可以识别洗钱或虚假交易;Key person可以找到意见领袖,防止客户流失的群体效应;对图做PageRank可以做传播影响力分析,找出问题的中心,做搜索引擎的网页排名。所以图的场景在生活中无处不在。

图计算就是研究在大规模图数据下,如何高效计算,存储和管理图数据等相关问题的领域。

相比之下,Spark的图引擎GraphX发展要完善点。Flink的图计算引擎Gelly发展时间相对要晚点,所以目前的功能还没有Spark那么全面。但是Flink作为一个流计算理论如此完美的数据计算框架,在发展图计算的道路上有独到的优势,相信在不久的未来,Flink的Gelly引擎一定还会发展得越来越好。

2. 本专题的写作目的

目前市场上有关Flink Gelly的资料还比较少,所以对于认清目前Flink已有的图计算相关工作很不利。笔者对Flink的研究有较浓的兴趣, 所以工作之余,主要从研究源码和研读图计算相关论文出发,对Flink的Gelly模块做了一番较全面的认识。

其实,也不仅仅是兴趣啦,因为工作场景里有相关的图应用,主要是挖掘出人员关系,建立关系图谱等。这种场景更加迫使我要加强对图理论和应用的学习。

所以在此,想把自己在Flink图计算方面的学习心得积累下来,一方面作为巩固自己的知识体系吧;一方面,我很相信分享的力量,希望在分享过程中交流心得,相得益彰,互相弥补。

3. Flink Gelly引擎总览

我相信,目前Flink Gelly已有的功能肯定是在实际应用场景中激发出来的。虽然我现在还完全摸不清Flink的Gelly整体发展脉络,但是我会尽量结合自己的理解,以我们容易理解的角度去分析Gelly的源码结构,对于一些较复杂的知识点,我会结合Flink提供的参考论文来做解读。

3.1. Gelly的源码结构

图1. Flink Gelly模块知识架构图

整体代码架构如图1所示。我们从下面往上面看,简单地介绍下各层将要讲解的内容。

1. Graph的存储数据结构

把生活中抽象的图模型转化为计算机语言可以理解和存储的数据结构,这一步是基础。较优的图存储方式对我们后续对图开展相关计算将影响深远。

2. 图的类别

从大类来看,根据图是否有方向,可以将图分为有向图(directed Graph)和无向图(undirected Graph)。这两类图的数据结构以及操作方式,将会在源码上做深入地对比和分析。

3. 图的验证以及指标

从最开始读取进来的图数据源出发,有必要先对图数据的有效性做一些校验,那么Graph的validation模块就是提供相关的校验功能。

任何数据结构是有其特定的量化衡量指标的。比如数组有长度等指标,链表有容量等指标。那么对于图,由顶点和边组成的一种较特殊的数据结构,其自然有自己的量化指标,这一块在Graph的metrics模块将做深入的分析。

图的asm模块,介绍的是对图进行标注的方法。比如标出图的所有顶点的度,出度和入度等。然后还定义了一些跟图相关的转移函数等。

4. 图的生成器

图从细类来看是有很多类别的,比如:

空图(EmptyGraph):就是不含边的图完全图(CompleteGraph) : 也就是两两顶点都互相联通的图。循环图(CycleGraph)星型图(StarGraph)

等等。

这些图将构成图的大家族。所以这部分主要是提供了不同细类图的生成器。

另外源码重点提供了一种图的相关代码模块 ,这就是二部图(biparite)。

5. Library

这个模块重点定义了一些工具依赖包。具体来说就是图的一些最常见的算法实现。

比如:图的聚类算法,图的顶点连接性算法,图的相似度算法等等。

6.图的迭代计算

这部分重点介绍一种图的迭代操作模式,简称gsa操作。实际上就是定义了一种图的迭代操作范式。这种范式具体由三步(gather,scatter和apply)组成。

然后还实现了两种基于BSP(Bulk Synchronous Parallel)模式的图迭代计算方法:pregel和spargel。这两种方法主要是从不同的视角来实现对图的迭代计算。

7. examples案例

最后会结合源码里提供的实际案例,来讲解具体的Gelly用法,这样会进一步加深我们对图的认识。、

4. 后记

路漫漫其修远兮,吾将上下而求索。知识的探索是充满挑战和乐趣的。知识的认识也是不断慢慢加深的。 笔者写此专栏,对于理解错误的知识,希望同仁能够积极指出,我们要相信开源和分享的力量。

margin

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。