技术01期:大规模图计算【基础篇】
导读
图计算就是研究如何高效计算、存储和管理大规模图数据。图是由顶点和边组成的,它可以对事物以及事物之间的关系建模,比如文章是点,文章与文章之间的超链接是边;或者顾客和商品是点,购买或者喜欢是边,购买的次数喜欢的程度是边的权重;再如银行卡持卡人是点,交易是边,交易频率交易金额是属性。
针对这些关系模型,我们可以用最短路径算法做好友推荐,计算关系紧密程度;最小连通图可以识别洗钱或虚假交易;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的图。
总结:
在这一篇专题中我们介绍了大规模图计算的基础,在现实应用中我们应该选择哪一种切分方式,计算框架都需要根据实际数据特征来定夺。
【参考】
https://www.docin.com/p-1833675343.html
https://blog.csdn.net/qq_21125183/article/details/80671547
作者:王钊,美国德克萨斯州达拉斯分校硕士毕业。现任普适智能算法工程师,目前专注于图计算算法研究。
- 完 -
技术01期:大规模图计算【基础篇】相关推荐
- 技术07期:图计算,让数据间的关系无处可藏【社区分切篇】
社区,即一群拥有相似特征的点,社区内的点连接紧密,社区间稀疏连接. 我们可以把同一公司的同事看作是一个社区内的点,他们从事同一行业,可能有相似的教育背景,由于 工作需要,他们之间要进行频繁的沟通. 而 ...
- 区块链技术与应用视频课程【基础篇】-夏杰-专题视频课程
区块链技术与应用视频课程[基础篇]-279人已学习 课程介绍 结合案例,通俗易懂为大家剖析什么是比特币,什么是区块链. 比特币和区块链究竟有哪些价值,有着怎样的发展趋势,各国态度如何, ...
- 实现大规模图计算的算法思路
分享嘉宾:徐潇然 Hulu 研究员 编辑整理:莫高鼎 出品平台:DataFunTalk 导读:2017年我以深度学习研究员的身份加入Hulu,研究领域包括了图神经网络及NLP中的知识图谱推理,其中我们 ...
- 由美团技术文章整理---spark性能优化基础篇--开发调优与资源参数调优
文章地址1:Spark性能优化指南--基础篇 - 美团技术团队 文章地址2:Spark性能优化指南--高级篇 - 美团技术团队 目录 一.关于性能优化基础篇--开发调优 1.避免创建重复RDD (1) ...
- Python科学计算基础篇
关于Numpy Numpy是Python的一个矩阵类型,提供大量矩阵处理函数,内部通过C实现. 包含两种数据结构,数组array和矩阵matrix,其实就是array而已 构建数组array 通过tu ...
- python 01列表异或_python基础篇三
python基础篇二所介绍的列表是基本的数据类型之一,元组.集合.字典也是基本的数据类型之一.熟练运用这些基本的数据类型很重要,就像是一座高楼大厦,把地基打扎实了,这栋高楼大厦才能在狂风暴雨中岿然不动 ...
- 前沿资讯:索尼展现裸眼3D显示技术,阿里推出图计算平台……
大连一批进口非冷链货物外表面检出核酸检测阳性 1月13日大连卫生健康委发布,大连市在大连机场增加建设了进口非冷链货物首站监管仓,对所有空港口岸进口货物实施批批检.件件消.1月12日,在对进口非冷链货物 ...
- opencv 叠加两张图_OpenCV基础篇之图片叠加
OpenCV基础篇之图片叠加 程序及分析 /* * FileName : blend.cpp * Author : xiahouzuoxin @163.com * Version : v1.0 * ...
- RAID技术详细解答之一:入门基础篇
本文所要讲解的RAID技术起初主要应用于服务器高端市场,但是随着个人用户市场的成熟和发展,正不断向低端市场靠拢,从而为用户提供了一种既可以提升硬盘速度,又能够确保数据安全性的良好的解决方案.IDE 磁 ...
最新文章
- java菜单动态加载功能_Javascript实现动态菜单添加
- 【bzoj1486】[HNOI2009]最小圈 分数规划+Spfa
- web前端----JavaScript的DOM(二)
- 聊一聊Android 6.0的运行时权限
- 把普通的git库变成bare库
- python中用于标识字符串的定界符_Python 基本数据类型
- java 外卖订餐系统_java外卖订餐系统小项目
- VirtualBox 扩展虚拟硬盘容量
- td之间的间距怎么改_论文的一级标题、二级标题格式怎么弄?
- Golang错误和异常处理的正确姿势
- SQL Server数据库被置疑的解决方案
- VB连接数据库SQL sever
- 我是如何同时在字节和微信成功拿到实习转正offer!
- 41-【JS编程接口】DOM事件与事件委托
- 双十一数码产品选什么好?双十一数码好物推荐
- 计算机远程操作之后怎么保护,电脑远程控制怎么操作 两种方法介绍
- 前台请求报:ERR_EMPTY_RESPONSE错误
- webkit-scrollbar应用
- 一行代码调节屏幕亮度
- OpenCV计算机图像处理 —— 凸性缺陷 + 点多边形测试 + 形状匹配 + 轮廓分层与cv.findContours()
热门文章
- 如何画出高级酷炫的神经网络图?优秀程序员都用了这几个工具
- 覆盖10亿设备,月活2亿,快应用要取代App?
- 倒计时1天!「2019 Python开发者日」报名即将关闭(附参会提醒)
- 关于CVPR 2019投稿的一些感想
- 跨界 | 隐形AI与设计
- 面了一个 32 岁的程序员,一看就是“卷”出来的
- SpringBoot集成Swagger-Bootstrap-UI,页面更清爽!
- JDK9,像Unix脚本一样执行Java代码
- 网络常见的 9 大命令,非常实用!
- 报名即将截止,中国移动“梧桐杯”大数据应用创新大赛,寻找大数据敢想者!...