blog.programfan.info
新网站即将启用

[小心得]MapReduce理解

我最近应聘时,遇到的一个面试题:请试写一段mapreduce代码。

于是开始学习它的相关知识,英文的资料我看的比较慢,中文的没有多少,而且很多翻译的不好,看完也不明白重点为在哪,但在这过程中,还是学到了不少东西,保存起来以后用的时候查起来方便:

Map/Reduce算法的过程是:
1、Partition(划分数据)
把数据划N份
2、Map
除了划分数据,还需要把运算该数据的代码也Map到每个运算节点上面去并发执行。这N个节点各自执行自己的任务,执行完毕以后把执行结果返回
3、Partition
这N份执行结果需要归并,于是我们再次划分数据,比方说划分为M份
4、Reduce
把Reduce代码和Reduce数据分发到N个节点执行,每个节点执行完毕返回数据。如果需要再次Reduce可以再次执行。最终Reduce为一个总共的结果

我现在的理解是这样的

 

代码
1 var[] return = new var[N];
2  for(int i=0; i<N; i++)
3 {
4 var rtn = spawn(fun() ->nodeRun());
5 return[i] = rtn;
6 }
7 var[] return 2 = partitionValue(return);//return2中元素个数为M,M<N(远小于)
8  for(int i=0; i<M; i++){
9 var rtn2 = spawn(fun() ->nodeRun2());
10 return2[i]=rtn2;
11 }
12 ....
13 一直到return数组元素个数为1,处理得到最后结果
posted @ 2010-06-24 23:06  Gordon Chao  Views(305)  Comments(0Edit  收藏  举报
www.programfan.info
新网站即将启用