java mapreduce二次排序
原文链接:
https://www.toutiao.com/i6765808056191156748/
目的:
二次排序就是有下面的数据
a 3
a 1
a 100
c 1
b 2
如果只按照abc排序就会变成
a 3
a 1
a 100
b 2
c 1
我们希望是第二列也参与排序
a 1
a 3
a 100
b 2
c 1
创建Maven项目
配置POM文件
我们
我们自定义Writable类,方便我们序列化
添加属性 代表key-value的两个部分
编写构造方法
编写一个set方法,方便我们使用
编写序列化和反序列化方法
编写比较方法
创建Mapper,注意输出的部分是自己创建的数据类型
编写内容
创建Comparator类,自定义分组
编写代码
创建Partition类,自定义分区类
创建Reduce类
编写内容
创建主类,完成主类的编写
其中自定义部分的类,我们放入到主方法中
自定义分区类和自定义分组类
准备数据源
我们将项目打包上传到Linux上
启动Hadoop
将数据上传到HDFS上
hdfs dfs -mkdir /secondSort
hdfs dfs -put /data/secondSort/data.txt /secondSort/
hdfs dfs -ls /secondSort/
我们执行我们的jar
yarn jar /data/secondSort/secondSort.jar com.xlglvc.xxx.mapredece.secondSort.SecondSortDriver /secondSort/data.txt /secondSortoutput
出现问题:
经过排查,发现是我的数据不是用\t隔开的,于是重新处理数据
然后删除HDFS上的data.txt,将新的data.txt文件上传,重新执行jar文件,我们观看结果
然后我们查看生成的文件,是按照我们预想的结果完成了二次排序