目录
第十三章 图计算
一、 图计算简介
1.1 图结构数据
许多大数据都是以大规模图或网络的形式呈现,如社交网络、传染病传播途径、交通事故对路网的影响
许多非图结构的大数据,也常常会被转换为图模型后进行分析
图数据结构很好地表达了数据之间的关联性。关联性计算是大数据计算的核心——通过获得数据的关联性,可以从噪音很多的海量数据中抽取有用的信息
1.2 图计算解决方案
针对大型图计算问题(社交网络、网络图),可能的解决方案及不足之处:
为特定的图应用定制相应的分布式实现:通用性不好
基于现有分布式计算平台进行图计算:在性能和易用性方面往往无法达到最优。现有的并行计算框架,像 MapReduce 还无法满足复杂的关联性计算。MapReduce作为单输入、两阶段、粗粒度数据并行的分布式计算框架,在表达多迭代、稀疏结构和细粒度数据时,力不从心。如:利用MapReduce进行社交用户推荐,对于5000万注册用户,50亿关系对,利用10台机器的集群,需要超过10个小时的计算
使用单机的图算法库:比如BGL、LEAD、NetworkX、JDSL、Standford GraphBase和FGL等,在可解决问题的规模方面具有很大局限性
使用已有的并行图计算系统:Parallel BGL和CGM Graph等,对大规模分布式系统非常重要的一些方面(比如容错),无法提供较好支持
针对大型图的计算,目前通用的图计算软件主要包括两种:
第一种主要是基于遍历算法的、实时的图数据库,如Neo4j、OrientDB、DEX 和 Infinite Graph
第二种则是以图顶点为中心的、基于消息传递批处理的并行引擎,如GoldenOrb、Giraph、Pregel 和 Hama,主要是基于BSP模型实现的并行图处理系统
1.3 BSP大同步模型
BSP(又称“大同步”模型)计算过程包括一系列全局超步(迭代),每个超步主要包括三个组件:
局部计算:每个参与的处理器都有自身的计算任务,它们只读取存储在本地内存中的值,不同处理器的计算任务都是异步并且独立的
通讯:处理器群相互交换数据,交换的形式是由一方发起推送和获取操作
栅栏同步:当一个处理器遇到“路障”(或栅栏),会等到其他所有处理器完成各自计算步骤;
每次同步也是一个超步的完成和下一个超步的开始
二、 Pregel图计算模型
2.1 有向图和顶点
有向图:
Pregel计算模型以有向图作为输入
有向图的每个顶点都有一个String类型的顶点ID
每个顶点都有一个可修改的用户自定义值
与之关联每条有向边都和其源顶点关联,并记录了其目标顶点ID
边上有一个可修改的用户自定义值与之关联
计算过程:
在每个超步S中,图中的所有顶点都会并行执行相同的用户自定义函数
每个顶点可以接收超步(S-1)中发送给它的消息,修改其自身及其出射边的状态,并发送消息给其他顶点,甚至是修改整个图的拓扑结构
在这种计算模式中,“边”并不是核心对象,在边上面不会运行相应的计算,只有顶点才会执行用户自定义函数进行相应计算
2.2 顶点间的消息传递
采用消息传递模型主要基于两个原因:
(1)消息传递具有足够的表达能力,不必要使用远程读取或共享内存方式
(2)有助于提升系统整体性能。大型图计算通常是由一个集群完成的,集群环境中执行远程数据读取会有较高的延迟;Pregel的消息模式采用异步和批量的方式传递消息,因此可以缓解远程读取的延迟
2.3 Pregel的计算过程
Pregel的计算过程由一系列“超步” 组成
(1)开始:在第0个超步,所有顶点处于活跃状态,都会参与该超步的计算过程
(2)在每个超步中,各顶点并行执行用户自定义函数,其描述了顶点V在超步S中需执行的操作。该函数可以读取超步(S-1)中其他顶点发送给顶点V的消息,执行相应计算后,修改顶点V及其出射边的状态,沿着顶点V的出射边发送消息给其他顶点,且消息可能经多条边的传递后被发送到任意已知ID的目标顶点上去
(3)消息将在超步(S+1)中被目标顶点接收,再像上述过程一样开始超步(S+1)的迭代
(4)当一个顶点不需要继续执行进一步的计算时,将其状态设置为“停机”,进入非活跃状态一个顶点进入非活跃状态,后续超步中就不会再在该顶点上执行计算,除非其他顶点给该顶点发送消息把它再次激活
(5)当一个处于非活跃状态的顶点收到来自其他顶点的消息时,Pregel计算框架必须根据条件判断来决定是否将其显式唤醒进入活跃状态
(5)结束:算法何时结束是由所有顶点的状态决定。当图中所有的顶点都已经标识其自身达到“非活跃(inactive)”状态,并且没有消息在传送的时候,算法就可以停止运行
三、 消息传递机制
3.1 消息传递机制简介
顶点间的通讯借助于消息传递机制来实现,消息都包含了消息值和需要到达的目标顶点ID。可通过Vertex类的模板参数来设定消息值的数据类型
在超步S中,一个顶点可以发送任意数量的消息,这些消息将在超步(S+1)中被其他顶点接收
在超步(S+1)中,在顶点V上执行Compute()方法时,所有在超步S中发送给顶点V的消息,都可通过一个迭代器来访问。迭代器不保证消息的顺序,但保证一定会被传送并且不会被重复传送
P.S
一个顶点V通过与之关联的出射边向外发送消息,并且,消息要到达的目标顶点并不一定是与顶点V相邻的顶点,一个消息可以连续经过多条连通的边到达某个与顶点V不相邻的顶点U,U可以从接收的消息中获取到与其不相邻的顶点V的ID
3.2 Combiner
Pregel计算框架在消息发出去之前,Combiner可以将发往同一个顶点的多个整型值进行求和得到一个值,只需向外发送这个“求和结果”,从而实现了由多个消息合并成一个消息,大大减少了传输和缓存的开销
在默认情况下,Pregel计算框架并不会开启Combiner功能,因为通常很难找到一种对所有顶点的Compute()函数都合适的Combiner
3.3 Aggregator
Aggregator提供了一种全局通信、监控和数据查看的机制
在超步S中,各顶点都可向一个Aggregator提供一个数据,Pregel计算框架会对这些值进行聚合操作产生一个值,在超步(S+1)中,图中所有顶点都可以看见这个值
Aggregator的聚合功能,允许在整型和字符串类型上执行最大值、最小值、求和操作,比如可定义一个“Sum”Aggregator来统计各顶点的出射边数量,最后相加可得到整个图的边的数量
Aggregator还可以实现全局协同的功能,比如设计“and” Aggregator来决定在某个超步中Compute()函数是否执行某些逻辑分支,仅当“and” Aggregator显示所有顶点都满足了某条件时,才去执行这些逻辑分支
3.4 拓扑改变
修改:Pregel计算框架允许用户在自定义函数Compute()中定义操作,修改图的拓扑结构,比如在图中增加(或删除)边或顶点
解决冲突的机制:
(1)局部有序:拓扑改变会在调用Compute之前完成。删除时先删除边再删除点,增加时先增加点在增加边。局部有序性保证了多数冲突的结果确定
(2)Handler:可在Vertex中自定义Handler解决冲突,否则随机选择
对于全局拓扑改变,Pregel采用惰性协调机制,在改变请求发出时,Pregel不会对这些操作进行协调,只有当这些改变请求的消息到达目标顶点并被执行时,Pregel才会对这些操作进行协调,这样所有针对某个顶点V的拓扑修改操作所引发的冲突,都会由V自己来处理
对于本地的局部拓扑改变,是不会引发冲突的,顶点或边的本地增减能够立即生效,很大程度上简化了分布式编程
3.5 输入和输出
在Pregel中,“从输入文件生成得到图结构”和“执行图计算”这两个过程是分离的,从而不会限制输入文件的格式
对于输出,Pregel也采用了灵活的方式,可以以多种方式进行输出
第十四章 数据可视化
一、 可视化概述
1.1 可视化概念
数据可视化是指将大型数据集中的数据以图形图像形式表示,并利用数据分析和开发工具发现其中未知信息的处理过程
数据可视化技术的基本思想是将数据库中每一个数据项作为单个图元素表示,大量的数据集构成数据图像,同时将数据的各个属性值以多维数据的形式表示,可以从不同的维度观察数据,从而对数据进行更深入的观察和分析
1.2 可视化作用
(1)观测、跟踪数据
(2)分析数据
(3)辅助理解数据
(4)增强数据吸引力