▕ 作者:王钊,美国德克萨斯州达拉斯分校硕士毕业。现任普适智能算法工程师,目前专注于图计算算法研究。
导读
图计算就是研究如何高效计算、存储和管理大规模图数据。图是由顶点和边组成的,它可以对事物以及事物之间的关系建模,比如文章是点,文章与文章之间的超链接是边;或者顾客和商品是点,购买或者喜欢是边,购买的次数喜欢的程度是边的权重;再如银行卡持卡人是点,交易是边,交易频率交易金额是属性。
针对这些关系模型,我们可以用最短路径算法做好友推荐,计算关系紧密程度;最小连通图可以识别洗钱或虚假交易;Keyperson可以找到社区领袖,防止客户流失的群体效应;对图做PageRank可以做传播影响力分析,找出问题的中心,做搜索引擎的网页排名等。
▐ 图的存储方式:
图之所以复杂在于每个顶点的逻辑位置都是相对的,顶点之间的关联依赖也是不确定的,所以无法以数据元素在内存中的物理位置来表示元素之间的关系,即无法用简单的顺序存储结构来表示。所以将图的顶点和边分别使用两种结构来存储表示会相对容易。
图的邻接矩阵是一种常见的图存储结构,它将n个顶点存储在一维数组中,用n*n的矩阵来表示任意两点之间的关系。则主对角线全是无用空间,顶点的行向与列向边的数量之和分别表示它的出度和入度。显然对于边数量相对于顶点较少的稀疏矩阵会极大的浪费存储空间。
邻接表用一个线性表存储顶点,与之邻接的顶点会另外构成一个线性表,由于邻接点的数量不确定,故常使用链表存储。
▐ 图的切分方式:
正态分布是我们最为熟悉的在自然界常见的一种数据分布形式,它具有中间多,两头少的特点,比如我们身高,大家的身高多集中在平均身高区域,极矮或极高的人属于少数。
其实幂律分布(Power-law distribution)也同样常见,它是一个不断下降的曲线,从最高的峰值开始极速下降,后面拖了一个长长的尾巴,比如微博大V拥有百万粉丝,而普通人的关注度则寥寥无几。
为什么要介绍幂律分布呢?因为在图计算中数据倾斜的情况非常常见,一个点与图中大多数的点有联系,我们应该如何将这些点分开储存在不同的节点上,是尽量减少跨分块的边,牺牲内存减少节点与 节点这间的通讯开销;还是减少内存消耗,转而增加通讯开销,都是一个值得权衡思考的问题。
图的切分方式有两种,边切分和点切分。
边切分每个顶点都存储一次,但有的边会被打断分到两台机器上。这样做的好处是节省存储空间;坏处是对图进行基于边的计算时,对于一条两个顶点被分到不同机器上的边来说,要跨机器通信传输数据,内网通信流量大。
点切分每条边只存储一次,都只会出现在一台机器上。邻居多的点会被复制到多台机器上,增加了存储开销,同时会引发数据同步问题。好处是可以大幅减少内网通信量。
▐ 图数据划分:
图数据划分是指在分布式计算中,将数据分发到集群中不同节点上。尽量做到分发到各节点上的数据量大小均匀,避免大量数据倾斜在某些节点所导致的负载不均衡的现象出现。
负载不均衡会使得数据量少的节点CPU利用不饱和而数据量多的节点计算速度缓慢,如果我们使用整体同步并行计算模型(BSP),每一轮迭代都要等到上一轮超步全部执行完后才会进行,在负载不均衡的情况下,需要浪费大量时间等待数据倾斜节点完成本轮任务。
因此,图数据划分是分布式图计算系统中的一个核心内容。
这里我们介绍一种较为简单的普通哈希划分。
普通哈希划分是对每个点的hash结果取余数,即Hash(Key)%M,假设对机器编号从0到N-1,按照自定义的 hash()算法,对每个请求的hash()值按M取模,得到余数i,然后将点分发到编号为i的机器上。这样我们就可以把点均匀的分发到M个机器上了。
▐ 图计算框架:
1. 单机内存图处理系统
此类图计算系统单机运行,可直接将图完全加载到内存中进行计算。但是单机的计算能力和内存空间总是有限,故只能解决较小规模的图计算问题。
2. 单机核外图处理系统
此类图计算系统单机运行,但是将存储层次由RAM拓展到外部存储器如SSD,Flash,SAS,HDD等,使其所能处理的图规模增大。但受限于单机计算能力和核外存储系统的数据交换的带宽限制也无法在可接受的情形下处理超大规模的图数据。
3. 分布式内存图处理系统
此类图计算系统将图数据全部加载到集群中的内存中计算,理论上随着集群规模的增大其计算性能和内存容量都线性增大,能处理的图数据也按线性扩大。图分割的挑战在分布式系统愈加明显,再加上集群网络总带宽的限制,所以整体性能和所能处理的图规模也存在一定的缺陷。
4. 分布式核外图处理系统
此类图计算系统将单机核外图处理系统拓展为集群,能够处理边数量级为trillion的图。
总结:
在这一篇专题中我们介绍了大规模图计算的基础,在现实应用中我们应该选择哪一种切分方式,计算框架都需要根据实际数据特征来定夺。
在下一期图计算专栏中,我们着重介绍Flink,感兴趣的小伙伴记得关注我们哦~
【参考】
https://www.docin.com/p-1833675343.html
https://blog.csdn.net/qq_21125183/article/details/80671547
关于我们
▼
普适智能科技有限公司(简称:普适智能PUSHI AI)是一家专注于数据处理和知识图谱技术的人工智能高科技公司,致力于为企业提供一站式认知智能服务。
普适智能专注于技术创新型人才提供技术分享和学习内容,使创新成为持续的核心竞争力。
如果您感兴趣,欢迎加入PUSHI AI社群,共同探索AI。关注普适智能并发消息即可加入我们~