文章目录
Abstract & Introduction
交互式图流分析的挑战性问题是如何快速响应来自终端用户的tb或tb以上的图流数据的查询。本文设计了一种简洁高效的双索引数据结构来构建图流sketch,以满足一般查询。建立了包含通用sketch构建、基于分布式sketch的分析算法和基于回归的近似解生成的单遍流模型,并实现了一个典型的图算法——三角形计数来评价所提出的方法。所有提出的方法都集成到一个开源框架Arkouda中,这项工作为规模庞大且快速增长的Python社区提供了一种强大的方法,可以使用笔记本电脑处理tb甚至更大的图流数据。
1. Related Work
处理图流主要有确切方法和近似方法。确切方法对于空间资源要求大,而近似方法只需要次线性空间,但结果不精确。
1.1 Graph Stream Sketch
大部分的sketch将流元素独立开,没有保持元素的关系。且它们大多只针对特定的问题,不够通用。而TCM虽然通用,但在一些实际的数据集上(例如实际的稀疏图流),不如DI sketch。
1.2 Complete Graph Stream Processing Method
(这些是精确的处理方法,在大型图流中并不可行)诸如LLAMA、Aspen和GraphOne等系统专注于设计高效的动态图形数据结构,它们的处理单元不支持增量计算。支持增量计算的有KickStarter,GraphBolt和DZiG。
1.3 Triangle Counting Algorithm
一种是基于静态图的准确三角计数,一种是基于动态图的近似三角计数。本文主要针对静态图,分为三个平台:使用快速并行包的共享内存方法,使用GPU大规模并行细粒度硬件线程方法,使用启发式,优化通信库和图结构的分布式内存方法。
图流分析的基本思想是根据采样结果估计图流的准确查询结果。接着本文介绍了几种三角形计数方法,并分析了各自的优劣。
2. Arkouda Framework
Arkouda是一个开源框架,旨在支持灵活、高效、高性能的大规模数据分析。主要有前端、后端和通信部分构成。它将数据分为两部分,一部分是元数据(只包括属性信息),另一部分是原始数据。如果待处理的数据是元数据,可以在本地被快速处理。如果是原始数据,则传递信息从前端到通信区再到后端,再将结果返回。
3 Succinct Data Structure
3.1 Edge Index and Vertex Index
3.2 Time and Space Complexity Analysis
给定M条边和N个顶点,则需要2(M+N)个整数(64位),如果是无向图,则再乘2,再加上权重,则还需要M,N个整数。
3.3 Edge Oriented Sparse Graph Partition
将边均匀划分到每个处理单元,以均衡负载。同时NEI和STR数组的顶点项分配给与边数组对应的处理器,达到提高局部性的目的。
3.4 Comparison with CSR
基本和CSR一样,只不过比CSR多了从给定边查询相关联顶点的功能,还有DI使用NEI数组记录顶点的邻居数量,使得STR数组具有清晰的语义。
4. Single Pass Regression Analysis Stream Model
模型框架主要分为三部分
- 将图流映射为sketch,并划分为多个子sketch
- 设计在子sketch上的算法求出部分解
- 基于不同的部分解,设计回归模型求出近似解
4.1 Building the Sketch as a Multi-Partition Graph
-
Sliding Window Stream
边(点)映射过程
-
Insert-Only and Insert-Delete Streams
维护一个权重数组,记录原始图中有多少边映射到sketch中的该条边。
4.2. Edge-Vertex Iterator Based Triangle Counting Algorithm
对DI sketch边进行均等划分,并使连接同一顶点的边放在一块,提高局部性。再按照点去迭代,称作edge-vertex迭代法。
具体计算步骤为:
- 将DI中的数据按照边划分到各个计算节点
- 每个计算节点按照顶点计算三角形
- 再将所有的三角形数目累加
具体算法如下:
在第7行,我们将确保所有的区间将覆盖所有的顶点而不重叠。
4.3 Real-World Graph Distribution Based Regression Model
正态分布回归模型
幂律分布(无序)
幂律分布(有序)
5. Integration with Arkouda
主要工作是在Python和Chapel包中实现图数据结构和相应的分析函数
- Graph Classes Definition in Python and Chapel
在Python和Chapel端各自定义了有向图、有向权图、无向图和无向权图。 - Triangle Counting Benchmark
一种是提出的三角计数算法返回的精确解,另一种是回归模型下的近似解(在幂律分布下具有更高的准确性)
6. Experiments
- 实验设置
- 数据集描述和分析
- 实验结果-准确度
- 针对不同的分布采用不同的回归模型,效果都挺好。
- 同时有序回归比无序回归准确率更好。
- 幂律分布对于收缩因子变化不敏感。
- 实验结果(表现)
由于本文提出的三角计数方法负载均衡且局部性较好,性能得到较高提升。实验结果还表明,加速程度随收缩系数的增大几乎呈线性增加。
7. Conclusions
-
开源框架Arkouda
-
双索引数据结构,减少稀疏图内存占用
-
多划分sketch,收缩因子控制大小
-
两个回归模型(正态分布和幂律分布)
-
基于DI数据结构的多区域分布式三角形计数算法
原图G->多划分sketch - >对每个sketch建立一个DI - >每个DI分给多个区域计算节点处理 -
算法整合到开源框架里,用户可以便捷去驱动