有关Map-Reduce的基础理论

来源:互联网 发布:图像矩阵有负值 编辑:程序博客网 时间:2024/05/12 00:25

一、背景

Map-Reduce是一种计算模型,能够实现多个大规模并行计算过程,并能够保障对硬件故障的容错性;google在计算pagerank中遇到难题后,将其发扬光大,并进行简化。当前在很多框架下,我们只需要编写Map-Reduce函数,系统能够管理Map或者Reduce并行任务的执行及任务间的协调,计算过程如下:

1、多个Map任务,每个任务的输入是DFS的一个或者多个文件块,Map任务将文件块转化为一个键值对(key-value),从输入数据产生键值对的具体方式由用户编写的Map函数代码决定

--注:

1)map任务的输入文件看成由多个元素构成,元素可以是任何类型,比如一个元组、或者一篇文档;通常输入元素的键无关紧要,之所坚持输入输出都是键值对的模式,主要对考虑多个map-reduce过程组合需要;

2)Map函数将输入元素转换成键值对,其中的键、值可以是任何类型,且此处的键非一般意义上的键,既不需要唯一性,恰恰相反,一个Map任务可以生成多个具备相同键的键值对,即使键来自同一元素;

思考:某些情况下,为了生成键值对而生成键值对;

如关系代数计算中的选择运算生成【t,t】;

投影运算生成【t,t】;

自然链接运算【b,(R,a)】,【b,(S,c)】等(元组形式,R(a,b),S(b,c));

分组与聚合计算【a,b】(元组形式(a,b,b));

矩阵乘法,需要组合两个Map-Reduce过程进行处理;



2、主控制器从每个Map任务中收集一系列键值对,并将其按照键大小进行排序,又被分到所有的Reduce任务中,所有具备相同键的键值对归到同一Reduce任务中;

--注:

主控进程知道Reduce任务的数目,比如说r个,该数目可有用户确定;主控进程通常选择一个hash函数作用于键,并产生一个0到r-1的budget编号;Map任务的输出的每个键被hash函数作用,根据结果分配到r个本地文件中的一个;每个文件都会被指派给一个Reduce任务;主控进程将Map输出结果合并,形成key-list-of-value pair(键--值表);对个每个键看,处理k的Reduce任务的输入形式是【k,(v1,v2,v3,.....Vx)】,其中,【k,v1】...【k,vx】来自Map产生的同样键的键值对。


3、Reduce任务每次作用于一个键,并将于此键关联的所有值以某种方式组合起来,具体取决于Reduce函数代码





思考:常见的关系代数计算包括和、差、并、交、选择、投影、及矩阵乘法都可以通过Map-Reduce任务完成,出乎意料,而且其中键值对的设置有些意思如:

1)如关系代数计算中的选择运算,对于关系R中的某个元组t,生成【t,t】;

2)投影运算,对于关系R中的某个元组t,通过剔除t中属性不再S中的字段得到原则tx,生成【tx,tx】;

3)自然链接运算,例如对于关系R(a,b),S(b,c)),生成【b,(R,a)】,【b,(S,c)】等

4)分组与聚合计算,例如对于关系R(元组形式(a,b,c)),生成【a,b】;Reduce函数【a,(b1,b2,b3....)】,按照Reduce的逻辑运算,得到【a,x】

5)矩阵乘法,需要组合两个Map-Reduce过程进行处理;Map函数产生【(i,k),(M,j,mij)】、【(i,k),(N,j,njk)】......


0 0