董的博客:《迭代式mapreduce框架介绍》网址:http://dongxicheng.org/mapreduce/iterative-mapreduce-intro/
小e的分享:《迭代式MapReduce解决方案》:http://www.wikieno.com/2012/02/iterative-mapred-summary-haloop/
1.概述
对于传统的MapReduce框架,每个map task读取一个block,结果会写回到本地磁盘。每个reduce task会从map task所在节点读取数据,最终结果写到HDFS。这个过程虽然会降低性能,但提高了可靠性。
传统MapReduce不支持显示迭代,所以又许多改进型MapReduce,用于支持迭代开发。如Twister, Haloop. 更多迭代式作业以及在Hadoop上的实现方法,请参见Apache开源项目Mahout 以及它的论坛。
2.迭代式作业
在数据挖掘,信息检索等领域,有很多算法需要多次迭代,本节介绍两个常见的作业,一个是PageRank,另一个是SSSP(Single Source Shortest Path)。PageRank是一个非常有名的网页重要性衡量因素,它是一个多次迭代的过程,如下图所示,每次迭代,PageRank由两个作业MR1和MR2完成,这样迭代多次,直到相邻的两次迭代中PR之差小于某一个阈值。
单源最短路径问题实际上也是多次迭代的过程,主要思想是:设G=(V,E)是一个带权有向图,R是G的邻接矩阵。整个算法始终把图中顶点集合V分成两组,第一组为已求出最短路径的顶点集合(用S表示,初始时S中只有一个源点,在每次迭代中求得一条最短路径 , 并将该路径的另一顶点加入到集合S中,直到全部顶点都加入到S中,算法就结束了),第二组为其余未确定最短路径的顶点集合(用U表示)。在每次迭代中,从U中选择一个当前路径最短的顶点,转存到S中,直到U为空。
3、 技术难点
从PageRank和SSSP的整个计算过程可以看出:
(1) 输入数据都动态数据和静态数据两部分组成。对于PageRank, L属于静态数据,而R属于动态数据;对于SSSP,R属于静态数据,S和U属于动态数据。传输动态数据是不可避免的,而静态数据可以采用某种策略避免重复传输。怎样避免传输静态数据?
(2) 每次迭代,如果所有task重复重新创建,代价将非常高。怎样重用task以提高效率(task pool)?
(3) 每次迭代,数据怎么样存储?如果总是写磁盘,代价将非常高。
(4) 何时迭代终止,怎样改变编程模型,允许用户指定合适终止迭代.
4.迭代式MapReduce框架
Haloop是在Hadoop基础上扩展而来的,其架构如下:
Haloop进行的改进有:
(1) 提供了一套新的编程接口,以方便用户进行迭代式程序开发。
(2) master node(jobtracker)包含一个循环控制模块,它不断的启动map-reduce计算知道满足迭代终止条件。
(3) 设计了新的Task scheduler,以便更好的利用data locality特性。
(4) 数据在各个task tracker会被缓存(cache)和建索引(index)。
下面介绍技术创新点:
(1) Hadoop 将所有迭代式任务抽象为:,其中R0是初始输入,L是每次迭代不变的数据,Ri是第i次迭代产生的结果。主要编程接口是:
SetFixedPointThreshold:设置两次迭代的终止条件,即距离差是否达到某一个阈值
setMaxNumOfIterations:设置迭代次数
setIterationInput:设置变化的输入数据
AddInvariantTable:设置不变的输入数据
(2) Loop-aware 任务调度。Haloop在第一次迭代时会将不变的输入数据保存到该计算节点上,以后每次调度task,尽量放在固定的那些节点上(locality)。这样,每次迭代,不变的数据就不必重复传输了。
(3) Cache和Index。Map task的输入与输出,Reduce task的输出都会被建索引和缓存,以加快数据处理速度。其中,缓存是指数据被写到本次磁盘,以供下一轮循环迭代时直接使用。
总体上说,Haloop比Twister抽象度更高,支持更多的计算,同时,由于是在Hadoop基础上修改上,因而继承了Hadoop的很多优点。
5、 总结
目前在迭代式MapReduce研究方面,还处于发展阶段。Twister和Haloop的模型抽象度不够高,支持的计算有限。
6、 参考资料
(1) Twister主页:http://www.iterativemapreduce.org/
(2) Twister论文:Twister: A Runtime for Iterative MapReduce
(http://www.iterativemapreduce.org/hpdc-camera-ready-submission.pdf)
(3) Haloop主页:http://code.google.com/p/haloop/
(4) Haloop论文:HaLoop: Efficient Iterative Data Processing on Large Clusters(http://www.ics.uci.edu/~yingyib/papers/HaLoop_camera_ready.pdf)
原创文章,转载请注明: 转载自董的博客
本文链接地址: http://dongxicheng.org/mapreduce/iterative-mapreduce-intro/