关于MapReduce的理解?
2018-02-13 18:09
260 查看
其实我们可以从word count这个实例来理解MapReduce。
MapReduce大体上分为六个步骤:
input, split, map, shuffle, reduce, output。
细节描述如下:
输入(input):如给定一个文档,
包含如下四行:
Hello Java
Hello C
Hello Java
Hello C++
拆分(split):
将上述文档中每一行的内容转换为key-value对,
即:
0 - Hello Java
1 - Hello C
2 – Hello Java
3 - Hello C++
3. 映射(map):
将拆分之后的内容转换成新的key-value对,
即:
(Hello , 1)
(Java , 1)
(Hello , 1)
(C , 1)
(Hello , 1)
(Java , 1)
(Hello , 1)
(C++ , 1)
4. 派发(shuffle):
将key相同的扔到一起去,
即:
(Hello , 1)
(Hello , 1)
(Hello , 1)
(Hello , 1)
(Java , 1)
(Java , 1)
(C , 1)
(C++ , 1)
注意:这一步需要移动数据,原来的数据可能在不同的datanode上,这一步过后,相同key的数据会被移动到同一台机器上。
最终,它会返回一个list包含各种k-value对,
即:
{ Hello: 1,1,1,1}
{Java: 1,1}
{C: 1}
{C++: 1}
5. 缩减(reduce):
把同一个key的结果加在一起。
如:
(Hello , 4)
(Java , 2)
(C , 1)
(C++,1)
6. 输出(output): 输出缩减之后的所有结果。
MapReduce大体上分为六个步骤:
input, split, map, shuffle, reduce, output。
细节描述如下:
输入(input):如给定一个文档,
包含如下四行:
Hello Java
Hello C
Hello Java
Hello C++
拆分(split):
将上述文档中每一行的内容转换为key-value对,
即:
0 - Hello Java
1 - Hello C
2 – Hello Java
3 - Hello C++
3. 映射(map):
将拆分之后的内容转换成新的key-value对,
即:
(Hello , 1)
(Java , 1)
(Hello , 1)
(C , 1)
(Hello , 1)
(Java , 1)
(Hello , 1)
(C++ , 1)
4. 派发(shuffle):
将key相同的扔到一起去,
即:
(Hello , 1)
(Hello , 1)
(Hello , 1)
(Hello , 1)
(Java , 1)
(Java , 1)
(C , 1)
(C++ , 1)
注意:这一步需要移动数据,原来的数据可能在不同的datanode上,这一步过后,相同key的数据会被移动到同一台机器上。
最终,它会返回一个list包含各种k-value对,
即:
{ Hello: 1,1,1,1}
{Java: 1,1}
{C: 1}
{C++: 1}
5. 缩减(reduce):
把同一个key的结果加在一起。
如:
(Hello , 4)
(Java , 2)
(C , 1)
(C++,1)
6. 输出(output): 输出缩减之后的所有结果。
相关文章推荐
- 二、关于HDFS、YARN及MapReduce的理解
- 关于ARP的一些理解
- 关于位置相关码和位置无关码的理解(韦东山视频中mmu实验和串口实验)
- 关于JCT-VC的A033文档的理解(分块组成)
- 关于“java中静态内部类的设计意图”的理解
- 关于onTouch事件的一些归纳和理解
- 理解MapReduce
- 关于USB微帧与数据包包长与端点缓冲区的理解
- 关于numpy中cov(x)与cover(x,y)的一些理解
- 关于c++概念的一些理解
- 关于GridView的理解
- 关于DC和SelectObject()函数的理解
- 关于面向对象的几种模式和个人理解
- 关于如何理解三层结构
- 关于html标签的理解
- 关于数据库几种范式的理解
- 关于Spring父子容器的理解
- 关于AsyncTask<Params, Progress, Result>中三个参数的理解
- 为自己记----android中关于actionbar的一些简单理解
- MapReduce源码分析之Task中关于对应TaskAttempt存储Map方案的一些思考