MapReduce框架完全是对<key,value>对的操作。所有你输入的一组数据会被MapReduce框架转化成一批<key,value>对后参与Maper,Reducer过程,最后得到的结果也是一批键值对。下面是一个Hadoop例子来说明这个过程。
wordcount是Hadoop自带的一个例子,实现了统计文本文件中单词出现的个数,价格有两个文本文件如下:
文本1:Hello World Bye Word
文本2:Hello Hadoop GoodBye Hadoop
(一):在进行Map过程之前。MapReduce框架会对文本文件进行处理,转化成<key,value>对,默认情况下是实现每一行文本一个<key,value>对,其中key为该行首字符相对于文本文件首地址的偏移量,value则是文本文件每一行的内容。所以经过MapReduce框架处理后的到的第一批<key,value>对为:
文本1:
key1 value1
0 Hello World Bye Word
文本2:
key1 value1
0 Hello Hadoop GoodBye Hadoop
(二):经过MapReduce框架处理后的<key1,value1>将作为Map过程的输入,经过重写map函数处理后得到的第二批键值对如下(wordcount例子是map方法为分解每一行的单词,省略排序过程):
文本一:
key2 value2
Hello 1
World 1
Bye 1
World 1
文本二:
key2 value2
Hello 1
Hadoop 1
GoodBye 1
Hadoop 1
(三)map方法完成对键值对的操作后将执行combiner过程,即对拥有相同的key值的value合并起来,其实是一个reducer的实现,所以得到第三批<key,value>对:
文本一:
key3 value3
Hello 1
World 2
Bye 1
文本二:
key3 value3
Hello 1
Hadoop 2
GoodBye 1
(四)将以上的第三批键值对交给Reducer处理后输出最后的结果(合并文件,得到结果):
key4 value4
Hello 2
World 2
Bye 1
Hadoop 2
GoodBye 1
注:个人学习分析,纯属自我理解。个人认为利用MapReduce思想可以在信息搜索等技术上得到应用。