
HaLoop—适用于迭代计算的Hadoop
与Hadoop比较的四点改变:
2.HaLoop的master进行job内的循环控制,直到迭代计算结束;
如图所示,从整体来看我们可以这样简化过程:输入的是(data input)Ri和L,输出的是(data output)Ri+1.
发布日期:2021-05-27 02:54:41
浏览次数:5
分类:技术文章
本文共 1495 字,大约阅读时间需要 4 分钟。
对Hadoop进行修改,使之能够适用于迭代计算,将原生的Hadoop中每一个job中一个map-reduce对改成多个map-reduce对,这样job就可以复用(如果不复用,每一个job完成之后都会把reduce的结果写进Hdfs文件,同时启动新的job时会从Hdfs中读文件,造成I/O压力),实现了在job内就可以控制迭代,同时由于迭代计算本身的特性(不变的数据invariant data会多次复用,而且变的数据比不变的数据要小很多),将invariant data缓存(cache)起来,进一步减少了I/O,使得迭代的效率更高。
下面架构图:

1.提供了一套新的编程接口,更加适用于迭代计算;
HaLoop给迭代计算一个抽象的递归公式:

循环控制在Hadoop中是在job间的,因为Hadoop的一个job只能是一个map-reduce对,迭代计算需要多次map-reduce,因此需要启动多个job,而且每个job完成之后需要进行判断,而判断的时候需要从hdfs中读取reduce的结果文件,这样又要启动额外的任务,因此HaLoop将其做了修改,一个job中可以有多个map-reduce对,而且提供了判断接口,这样不需要再启动额外的任务来判断迭代是否结束,下图说明了Hadoop与HaLoop的不同:

判断结束有两种方法:
a.设置相邻两次迭代计算的差值门限(threshold)
b.设置迭代的最大次数
3.Task Scheduler也进行了修改,使得任务能够尽量满足data locality( 尽量本地计算对HaLoop来说非常重要,否则Cache没有任何用处,还是得耗费网络I/O),除此之外应该让两次迭代的任务尽量使用相同的数据。
下图很清楚地说明了如果能够满足任务使用相同数据时的好处:

该job一共有三个map任务,三个reduce任务,分布在三个节点上,对于map任务,在n2,n3中运行,数据都是邻接表(linkage table),这是静态数据(invariant data),而R也即迭代的中间数据则在n1上运行,这是动态数据(variant data)。上一次迭代完成后,进入下一个迭代环节,如果我们依然用n2,n3节点计算L邻接表的数据,而n1计算Ri中的数据,这样我们就不需要再将n2,n3的map结果传给reduce,因为跟上次的结果是一样的,只需要将n1的计算结果传到后面。
4.slave nodes对数据进行cache并index索引,索引也以文件的形式保存在 本地磁盘。
slave的cache有: a.Reduce input cache:这样cache之后,如果上次的Map output跟这次的一样,就不用网络I/O,直接从磁盘I/O进内存。
b.Reduce output cache:用于判断迭代的终止。
c.Map input cache:如果这一次的计算是网路I/O得到的数据,则将其cache起来方便下次使用。
总结HaLoop的缺点:
1.静态数据与动态数据不能完全分离;
2.迭代的终止条件不能准确判断;
3.抽象度不够高。
参考文献:
http://wuyanzan60688.blog.163.com/blog/static/127776163201211553756914/
转载地址:https://blog.csdn.net/leijie0322/article/details/46331831 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
关注你微信了!
[***.104.42.241]2023年11月27日 05时35分22秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
记一个scripty库在windows环境下无法运行问题
2019-03-25
docker之使用redis官方镜像
2019-03-25
php集成square功能(使用square/connect)
2019-03-25
记一个https下Laravel分页url为http问题
2019-03-25
原子颗粒特效动画库particles.js的使用
2019-03-25
vscode使用MinGW/GCC
2019-03-25
gcc/g++ -print-***选项打印编译器信息
2019-03-25
c++标准库实战之通用工具Pair
2019-03-25
c++标准库的宏__cplusplus
2019-03-25
cloudinary迁移以及前端上传
2019-03-25
记一个Laravel中AWS SNS服务HTTPS订阅确认问题
2019-03-25
记一个php导入大小写问题
2019-03-25
go命令文档
2019-03-25
GOPATH环境变量
2019-03-25
Go环境变量
2019-03-25
express上下文中间件express-http-context
2019-03-25
express会话中间件express-session
2019-03-25
express-validator入门
2019-03-25
express安全响应头中间件helmet
2019-03-25
express身份验证中间件passport入门
2019-03-25