hadoop二次排序怎么理解
这篇文章主要讲解了"hadoop二次排序怎么理解",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"hadoop二次排序怎么理解"吧!
1.流程 各个阶段;
input ---> split --> recordreader --> 形成复合键值对textpair --> 分区(setGroupingComparatorClass设置的分区方法)输出 --> 对每个分区进行排序setSortComparatorClass(按照设定的排序方式对textpair进行排序,其实这已经进行了一次二次排序了) --> shuffle阶段 --> 内部排序(用setSortComparatorClass设定的排序方式,进行第二次排序) -->分组(setGroupingComparatorClass设定的分组函数) --> 执行reduce -->输出
2.各个流程详解
Map阶段:
(1) 输入的数据,安装inputformat进行输入,同时生成相应的键值对
(2) 在Map函数中,对键值对key,value进行处理形成新的TextPair键值对 key1=key + value,value1=value,同时对TextPair的排序是先对key1的key排序,然后对value排序。
(3) 在Spill输出阶段,用新定义的partion方法决定对应的reducer。分区是依据TextPair键的第一个字段(key)进行分区。
(4) 对map输出的分块进行内部排序,排序方式采用我们定义的哦规则,实际上对其进行了一次二次排序(首先按照key1的第一个字段排序,然后按照第二个字段排序)
(5)对一个分区的多个文件进行merge操作
Reduce阶段:
(1) Shuffle Reducer根据jobtracker查找到要读取的文件,传输到Reducer,并进行merge操作。
(2) 因为从不同节点读取了相应的map输出文件,所以在此处进行第二次排序,排序依然是根据我们定义的排序规则(TextPair的排序方法)进行排序,重新进行了一次二次排序。
(3) 在reduce阶段,会对键值相同的项进行分组操作,其默认操作的键。对于我们生产的键值对
(4)reduce 对分组进行处理。
我们现在以Hadoop权威指南中的例子进行推演
在这个例子中,输入的文件是这样格式,第一列是时间,第二列是温度
1990 31
1991 20
1991 18
1991 33
1990 22
1990 17
我们想要得到的结果如下(先按照年份排序,然后按照温度排序)
1990 17
1990 22
1990 31
1991 18
1991 20
1991 33
过程如下:
(1)在map阶段,将将输入文件形成复合键值对
<<1990 31> 31>
<<1991 20> 20>
<<1991 18> 18>
<<1991 33> 33>
<<1990 22> 22>
<<1990 17> 17>
(2)利用partion函数,对复合键的键值的第一列作为键进行分片,并进行内部排序
<<1990 17> 17>
<<1990 22> 22>
<<1990 31> 31>
<<1991 18> 18>
<<1991 20> 20>
<<1991 33> 33>
这个文件分别映射到不同的reducer,Reducer从jobtracker中读到要读的文件
(3)reducer通过shuffle将不同节点上的内容加载进来,并重新进行二次排序(因为不同节点上的相应部分被加载进来后,各个部分的内容不相同,需要重新进行二次排序)
<<1990 17> 17>
<<1990 22> 22>
<<1990 31> 31>
<<1991 18> 18>
<<1991 20> 20>
<<1991 33> 33>
(4)分组
reduce阶段重新排序过后,还需要分组,分组所依据的键值是默认键,而我们穿过来的是复合键,其分组的时候,不一定按照年份来,所以我们重新实现分组函数,使得其以复合键的第一列作为键值进行分组
reducer1:
<<1990 17> <17 22 31>>
reducer2:
<<1991 18> <18 20 33>>
(4)由reduce处理形成的分组,键值为复合键的第一列,value值为依次从valueList中取出的值
reducer1输出:
1990 17
1990 22
1990 31
reducer2输出:
1991 18
1991 20
1991 33
感谢各位的阅读,以上就是"hadoop二次排序怎么理解"的内容了,经过本文的学习后,相信大家对hadoop二次排序怎么理解这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!