hadoop mapreduce做数据排序
来源:互联网 发布:淘宝卖家最高级别店铺 编辑:程序博客网 时间:2024/04/29 04:42
由于hadoop在reduce之后就不能对结果做什么了,所以只能分为两个job完成,第一个job统计次数,第二个job对第一个job的结果排序。 第一个job的就是hadoop最简单的例子countwords,我要说的是用hadoop对结果排序。 假设第一个job的结果输出如下:
part-r-0000文件内容:
192.168.1.1 26
192.15.26.146 5
172.15.89.165 13
10.125.36.78 8
172.16.12.35 121
要做的就是按照每个词出现的次数降序排列
**********************************分割线*****************************************
首先可能会出现这样的问题:
1.可能上一个job为多个reduce,也就是会产生多个结果文件,因为一个reduce就会生成一个结果文件,结果存放在上一个job输出目录下类似part-r-00的文件里。
2.需要排序的文件内容很大,所以需要考虑多个reduce的情况。
*********************************分割线*******************************
在map阶段按照行读取文本,然后调用map方法时把上一个job的结果颠倒;然后map后,hadoop会对结果进行分组,因为hadoop对数据分组后默认是按照key升序排序的,所以需要自定义排序函数将分组数据降序排序。 4.然后按照reduce数目的大小自定义分区函数,让结果形成多个区间,比如我认为大于50的应该在一个区间,一共3个reduce,那么最后的数据应该是三个区间,大于50的直接分到第一个分区0,25到50之间的分到第二个分区1,小于25的分到第三个分区2.因为分区数和reduce数是相同的,所以不同的分区对应不同的reduce,因为分区是从0开始的,数据分区到分区0的会被分到第一个reduce处理,分区是1的会分到第2个reduce处理,依次类推。并且reduce对应着输出文件,所以,第一个reduce生成的文件就会是part-r-0000,第二个reduce对应的生成文件就会是part-r-0001,依次类推,所以reduce处理时只需要把key和value再倒过来直接输出。这样最后就会形成数目最大的字符串就会在第一个生成文件里,排好序的数据就是按照文件命名的顺序存放的。
**其实就是利用了hadoop分组的特点,会把key相同的字符串放到一个组里,然后我们把分组的数据用自己定义的排序函数按照key排序后,再按照分区函数分到不同的reduce,固然会是第一个reduce结果文件里面是最大数字的已排序集合,也就是说需要排好序的数据时只需要依次遍历reduce的结果文件part-r-0000,part-r0001,part-r-0002...。当然,如果只有一个reduce,那就正好是一个排好序的结果文件。**
0 0
- hadoop mapreduce做数据排序
- 利用hadoop mapreduce 做数据排序
- Hadoop MapReduce做大数据排序
- hadoop mapreduce数据排序
- Hadoop-MapReduce-TeraSort-大数据排序例子
- Hadoop mapreduce 数据去重 数据排序小例子
- 使用Hadoop MapReduce 排序
- hadoop mapreduce排序原理
- Hadoop MapReduce排序程序
- Hadoop MapReduce 二次排序
- hadoop mapreduce自定义排序
- hadoop--mapreduce排序
- 使用hadoop MapReduce进行排序
- 使用hadoop MapReduce进行排序
- 使用Hadoop MapReduce 进行排序
- 使用Hadoop MapReduce 进行排序
- Hadoop mapreduce自定义排序WritableComparable
- mapreduce(七):hadoop二次排序
- 自己写Java Web遇到的坑(2)——删除cookie时删不掉
- JavaWeb中浏览器URL编码,GET乱码问题方式乱码解决
- 新鲜的OkHttp
- 将元素添加进数组,再取得最大值和平均值
- JavaScript跑马灯
- hadoop mapreduce做数据排序
- 网页版直播和聊天室
- Starting MySQL...The server quit without updating PID file [FAILED]cal/mysql/data/sdzn-cdh02.zhiyoub
- Android中Rect和RectF的区别与联系
- cocopods使用
- 各种开源框架
- 安卓全局异常捕获
- JavaScript call()和apply()方法区别
- CocoaPods安装