hadoop的mapreduce原理解析

来源:互联网 发布:淘宝拍摄布光 编辑:程序博客网 时间:2024/04/29 17:45

      随着大数据的不断深入,人们正从信息时代向数据时代转型。可想而知,要向数据时代转型,就需要对数据进行处理,这种数据的处理是基于大量数据的基础之上的。所以hadoop这项技术就应运而生了。

      hadoop的数据处理主要分为map和reduce两个阶段。下面我就来好好分析,hadoop的这两个阶段是怎么处理数据的。比如:在hdfs上有这样的两行数据,我们进行单词出现次数的统计。

hello you

hello me

map阶段

1、在map阶段开始后,先要读取hdfs上的文件,将文件上的每一行解析成一个<key,value>,每一个键值对都调用一个map()函数。(key:每行的起始位置,即:偏移量。value:每一行的值。我们可以看到这样的两个<0,hello you><10,hello me>键值对)

2、我们的map函数继承覆盖map()接受读取的<key,value>,然后进行处理,转换为新的<key1,value1>并输出。输出后的数据是:<hello,1><you,1><hello,1><me,1>.

3、下面要对输出的<key1,value1>进行分区,默认分区为一个区。

4.对不同分区中的数据进行排序(按照key1)分组。这里分组的意思是指相同key的value放到一个集合中。分组后:<hello,{1,1}><me,{1}><you,{1}>。

5、然后对分组后的数据进行规约

reduce阶段

1、多个map任务的输出,按照不同的分区,通过网络copy到不同的reduce节点上。

2、对多个map的输出进行合并、排序。覆盖reduce函数,接收的是分组后的数据,实现自己的业务逻辑处理后,产生新的<key2,value2>输出。这里产生的数据是<hello,2><me,1><you,1>

3、对reduce输出<key2,value2>写到hdfs中。

0 0