Google Map Reduce简介[翻译学习]
2011-05-28 16:52
176 查看
1. 并行计算简介
2. What is MapReduce?
3. MapReduce是如何运行的?
<1>.并行计算简介
计算机的早期阶段,程序都是serial(连续的),类似于批处理程序。并行计算的程序中,进程将一个任务分割成多个部分parts,每个“部分“都是能够并行处理的,每个“部分”可以同时运行在不同的cpu上,这些cpus可以是同一台机器上,也可以是通过网络运行在不同机器的cpu上。
如果一个程序想要通过并行来实现,第一步的工作是需要将待处理的工作分割成一系列的任务task,并且这些任务是能够并行的运行在处理器上,当然一些情况下,待处理的工作是没有办法分割成这样的一些列的任务的,例如对于计算Fibonacci这个工作:
Fk+2 = Fk + Fk+1
该工作是不能被分割为这样的一系列的任务的,因为每个计算的值是需要依赖上次计算的结果的。
下面给出一个能够被“并行”的例子:
如果有大量的数据需要被处理,如果这些数据能够被分割为等大小的小块(partitions)。更加具体话的说,对于下面的数组:
![](http://images.cnblogs.com/cnblogs_com/xuqiang/hadoop/subarray.png)
如果我们需要对于上面数组的每个元素都进行处理,并且每个计算是相对独立的话,任务之间不需要交互,这是一个使用master/worker的基本实现:
Master:
初始化该数组,并且将该数组分割成各个部分subarray
将每个subarray发送到各个worker
如果各个worker完成了对于数组元素的计算的话,master将接受各个worker的计算结果
Worker:
接受subarray
处理该subarray
将计算结构传递给master
<2>.What is MapReduce?
在lisp语言中,map作为一个输入函数接受一个序列,然后处理每个序列中value值,然后reduce将最终的map计算出来的结果整理成最终程序输出。这就是MapReduce最初的思想来源,通过用户定义的map函数将输入分割成key/value对,然后处理该数据,最终通过Reduce函数将处理完成的记过合并。下面是一个简单的示例程序:
map(String key, String value): // key: document name // value: document contents for each word w in value: EmitIntermediate(w, "1"); reduce(String key, Iterator values): // key: a word // values: a list of counts int result = 0; for each v in values: result += ParseInt(v); Emit(AsString(result));
.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }
<3>. MapReduce是如何运行的?
![](http://images.cnblogs.com/cnblogs_com/xuqiang/hadoop/mrfigure.png)
1. MapReduce Library首先将输入文件切割成多个小片的文件pieces,然后MapReduce Library将启动复制操作,将用户程序复制到各个a cluster of machines上。
2. 在这些a cluster of machines中,其中一个比较特殊称之为master,其他的machine被称之为worker,master选择空闲的worker并将任务(map任务或者是reduce任务)分配给这些空闲的worker任务。
3. 一个worker如果被master分配了map任务的话,该worker首先读取该key/value对,然后执行用户定义的map函数,这些处理完成的key/value对被缓存到内存中。
4. 然后,将这些key/value对写入本地磁盘,然后worker通知master。
5. 如果master接收到了worker在第4步的通知之后,master将这个信息传递给reduce worker,该reduce worker通过远程系统调用的形式读取该worker磁盘上存储的处理完的数据。
如果reduce worker读取完了所有的数据的话,然后该reduce worker将读取到的数据排序,如果数据量比较大的话,无法全部放在内存中,那么排序将使用外部排序来实现。
6. Reduce worker遍历已排序的数据,然后将数据传递到用户定义的Reduce函数。
7. 当所有的map和reduce完成之后,然后master唤醒用户程序。
通过整个程序的运行过程,我们可以看出用户程序仅仅需要编写Map函数和Reduce函数即可,MapReduce库首先通过调用用户自定义的Map函数,将输入文件分割,如果数据处理完成,将调用Reduce函数将结果合并起来。
//----------------------------------------------------------------
于2011-5-28下午
相关文章推荐
- Google Map Reduce简介[翻译学习]
- 【翻译作品】JavaScript DOM学习第一章:W3C DOM简介
- Guava学习笔记(4)--Ordering简介[翻译+学习笔记]
- 【翻译作品】JavaScript DOM学习第五章:表单简介
- day02_js学习笔记_01_js的简介、js的基本语法
- 【翻译】【Ionic】上传,FileTransfer学习
- Hadoop 学习总结之一:HDFS简介(转载)
- MongoDB学习(翻译2)
- Guava学习笔记:Google Guava 类库简介
- 微软企业库4.1学习笔记(四)主要的功能模块简介
- LUA学习第一课_初步简介和环境搭建
- Python学习:PyCharm 使用简介(转)
- 《Windows Via C/C++》边学习,边翻译(六)操作字符和字符串-5
- Zend Framework学习(1)简介
- 2015年12月03日 GitHub入门学习(五)Markdown语法简介
- [WPF学习资料] WPF简介
- Shell特殊变量大全: $0, $#, $*, $@, $?, $$,$!,$- 简介.$@ $*对比详解 -- shell学习
- 黑马程序员--C 语言学习笔记之简介
- 一步一步学习Spring(1)--Spring简介
- Java8新特性学习-Stream的Reduce及Collect方法详解