一.典型高性能计算机软件栈
二.大数据处理平台与应用的特性
MPI要求所有资源都可用才能正常运行,容错困难,MPI在系统同构时才能发挥效率。
大数据平台需要支持廉价的硬件,软件需要支持自动容错和自动负载平衡—即支持扩展性。
1.MapReduce编程模型
a.借用了函数语言的概念
b.用户只需要写串行的Map和Reduce函数
map(in key, in_value) -> (out_key, intermediate_value) list reduce(out_key, intermediate_value list) -> out_value list
c.较容易实现容错,只要重算该任务;容易实现负载平衡,支持异构系统
d.主流大数据平台Apache Hadoop Ecosystem
e.MapReduce中用文件传递数据,由于数据复制、序列化和磁盘I/O使得性能较差
如果能用内存保存数据,比采用硬盘的方案快10-100倍。
2.基于内存的大数据分析平台-Spark
1).Spark对内存的抽象
a.RDD(Resilient Distributed Datasets)
-基于数据集合,而不是单个数据
-由确定性的粗粒度操作产生(map,filter,join等)
-数据一旦产生,就不能修改(immutable)
-如果要修改数据,要通过数据集的变换来产生新的数据集
b.RDD支持高效的容错
数据一旦是确定性的产生,并且产生后不会变化
-就可以通过“重复计算”的方法来恢复数据
-只要记住rdd的生成过程就可以了,这样一次log可以用于很多数据,在不出错的时候几乎没有开销
2).Spark的局限性-数据模型层面
大数据应用:部分数据更新
Spark:只读数据对象
每次细粒度的数据更新,由于Spark基于粗粒度RDD只读的数据对象模型,需要RDD变换,即有大量数据的复制,导致处理效率不高。
3).Spark的局限性-实现层面
a.Spark基于Scala语言,运行在JVM上
b.内存表示冗余,占用内存大
c.内存分配与回收开销大
三.大数据系统的设计理念
四.问题
大数据系统,性能还是扩展性优先?
1.性能的重要性
a.为什么容错是重要的?
很多结点,长运行时间
b.如果性能可以显著提高
更少的结点(可能是1个结点),更短的运行时间
可以使用更大开销的容错技术,例如检查点,因为遇到故障的概率更低
性能优先的大数据平台:性能与容错可以兼得(如果性能可以好很多)
2.许多大数据问题的规模有限
a.人口数
100亿,社交网络的大小约10TB
b.产品数
100万
c.摩尔定律在驱动计算能力、内存大小和I/O带宽以指数速度增长
今天的规模有限的大数据问题,会成为明天的小数据问题。
3.图数据的重要意义
图能够表达丰富的数据和关系
-网络连接
-网页链接
-社交关系
-蛋白质交互
-人与人、人与公司、人与产品
4.图的计算与分析
-PageRank
-最短路径
-连通分支
-极大独立集
-最小代价生成树
-Bayesian Belief Propagation
5.基于图抽象的编程模型
-图的基本元素是结点和边
-最直观的编程抽象可以基于结点和边进行
-结点上计算
-沿着边通信
五.图计算-折衷的大数据分析平台
GraphLab在某些任务上比Spark快10倍。
六.GraphLab的问题
1.内存占用大
所需内存是原始数据的10倍以上,需要过多结点计算,引入了不必要的通信和并行开销
2.访存局部性差
计算性能低,处理小图时8台处理性能还不如单机系统。
七.清华大学研究院的性能优先的大数据系统GridGraph
1.数据模型:可读写数据
2.数据结构:基于二维shuffle的数据结构,局部性好,紧凑
3.编程抽象:基于点和边的集合,同时支持单机和多机
4.执行平台:单机内存->Out of core->分布式系统
5.性能优化:NUMA,调度,自适应数据格式等
先从局部性和调度的角度优化单机性能,再扩展到多机。
6.多机扩展与优化
-Sparse-dense双计算引擎
-基于chunk的图划分机制
-通信和计算的协同调度
来自清华大学的教授分享。