并行计算框架

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Art,但两者模式差别很大大
• 以PageRank为例,GraphLab的模型因为无无
同步、不一一致收敛,理论上比比Spark高高效
• Hama的3合1模式也有点意思
数据模型

系统实现 会根据负载动态迁移数据分区
BSP: Bulk Synchronous Parallel
• • •
系统模型: processers + communication channels 计算: superstep+ Superstep
• • •
• • •
并发本地计算 通讯 同步
数据完全不共享 类似与同步数据流 缺陷
SCOPE(Microsoft)

• • • •
extractor:从源文文件中解析出结构化数据 processor:行行级处理 reducer:分组处理 combiner:合并多个输入入
基于代价的优化器
Piccolo

编程模型

• • • • • •
用用户实现control fn(全局唯一一)和kernel fn,control fn创建kernel fn control fn用用barrier等待所有kernel fn完成 用用用用户定义的accumulation function来合并并发update 共享的KV存储 用用户定义分区策略,且支支持表(表指一一类KV数据,不是关系 表)之间的colocation

Haloop
• • •
静态数据不重复load 调度时考虑静态数据的本地性 Map/Reduce输入入输出缓存和索引
MapReduce衍生生系统
• Hive:并行行数据库OLAP • Pig:交互式陈述式操作语言言 • Mahout:机器学习
Spark(1)
• • •
Berkeley 开源 数据模型:RDD(Resilient Distributed Datasets)
并行行计算框架简述
汪源
⺫目目录
• • • • •
MPI 同步数据流: MapReduce, Spark, PrIter 数据流水水线: Dryad/DryadLINQ, SCOPE 共享存储: Piccolo 图计算
• •
BSP: Pregel, BPGL, Apache Giraph/Hama, GPS 异步: Distributed GraphLab
GPS
Giraph/Hama
Hama
Distributed GraphLab(1)

核心心设计
• • • • •
数据模型:图->(V,E,D),V,E都有数据,图结构静态,无无向;scope->节 点、它的边、它的邻居节点 操作模型:update fn->无无状态,处理节点scope并调度其它节点的 update fn;sync operation->全局数据 一一致性模型:full(scope不重叠,可串行行化)、edge(可写本节点及 边数据,只读邻居数据)、vertex 分区算法:先基于领域规则或通用用分区算法划分成很多个atom(atom 数远远大大于主机数),放到HDFS,第二二阶段用用普通的负载均衡还划 分(可能基于atom大大小小);边界节点作为ghost节点复制到相邻atom 执行行引擎:Chromatic->先给节点染色色(染色色规则由一一致性模型决 定),然后按颜色色串行行执行行;Locking->加读写锁(加锁策略由一一致性 模型决定)。通过预先加锁,等加锁成功再调度,防止止同步等待加锁
Spark(2)
Spark(3)
Spark(4)
PageRank
val links = spark.textFile(...).map(...).persist() var ranks = // RDD of (URL, rank) pairs for (i <- 1 to ITERATIONS) { // Build an RDD of (targetURL, float) pairs // with the contributions sent by each page val contribs = links.join(ranks).flatMap { (url, (links, rank)) => links.map(dest => (dest, rank/links.size)) } // Sum contributions by URL and get new ranks ranks = contribs.reduceByKey((x,y) => x+y) .mapValues(sum => a/N + (1-a)*sum) }
MPI
• • • • •
开源的基于消息传递的“裸”并行行编程模型
• •
库:MPI_Send/Recv/bcase/Alltoall 工工具:mpirun
通信模型:点对点、组 以不共享存储为主,后期MPI I/O增加了并行行操作共享 文文件功能 性能非非常好 主要用用于高高性能计算,⺫目目前的分布式机器学习算法实 现中也常用用

同步: 等待最慢的processor
BSP系统
• • •
Pregel
• • • • • •
上⻚页说的BSP模型+Aggregator(全局信息)+动态图结构 一一般一一个图vertex对应BSP的一一个processor 相对Pregel的优化:除了vertex-centric compuation还有global computation、动态调整分区、高高扇出的节点的adjacency list分区(后 两点为了减少⺴网网络通信) 都是基于Hadoop的Apache开源BSP项⺫目目,Giraph是Yahoo贡献的 Giraph还处于Incubator状态,Hama今年5.17刚升级为Apache正式项⺫目目 Hama除图计算外,还支支持矩阵计算;Giraph非非常类似Pregel
MapReduce(Google)

核心心过程
• • •
Map:相当与本地的 GROUP BY Shuffle+Merge:相当于全 局GROUP BY Reduce:相当于聚集函数
• •
无无共享存储 开源:Hadoop
迭代式MapReduce

Twister:开源
• • • •
静态数据不重复load(如PageRank中的结构信息) 假设内存足足够大大,MR之间的结果数据可通过⺴网网络传递,不用用save/ reload 缓存Mapper/Reducer,不用用每次重新生生成 增加Combine操作汇集所有Reducer的结果,方方便判断是否终止止循 环
PrIter
• 开源 • 改进MapReduce的迭代性能,Reduce结果
直接给下一一个Map
• 流水水线:Map输出一一到,Reduce即可开始
工工作,不用用收集⻬齐所有Map结果并排序 户程序制定)
• 优先调度高高优先级的任务(优先级由用用
Dryad(Microsoft)
• •
基于计算拓扑图的“通用用”并行行计算框架 程序=DAG(节点:计算,边:通信通道)
Distributed GraphLab(2)
• 系统优势 • 高高层次抽象,编程模型简洁 • 细粒度并发控制,没有全局同步 • 收敛速度可以不同,已收敛节点不需
在无无谓计算
• 可保证串行行化
小小结
• 没有统一一框架,不能直接对比比性能,还
需要花大大力力气气深入入理解
• Spark和GraphLab看起来是State of the
• • • •
RDD:不可变、分区的对象集合,通过对原始数据进行行一一系列 transformation得到 记录RDD的产生生规则,不需要象MR那样物化中间结果,但也能容错 RDD可被缓存起来重用用 适合迭代计算:无无需物化、RDD缓存重用用
• • •
性能比比Hadoop有几几十十倍提升 很通用用,基于Spark很容易实现BSP模型,很高高效计算PageRank 使用用Scala实现算法非非常简洁
Dryad衍生生系统
• •
DryadLINQ(Microsoft)
• • • ห้องสมุดไป่ตู้ •
类似与SQL的陈述式操作语言言或.Net类库 Structured Computations Optimized for Parallel Execution 数据模型:表格 并行行数据库:提供JOIN、GROUP BY/HAVING/AGG等算子子 允许自自定义算子子
相关文档
最新文档