java二次排序_java mapreduce二次排序

原标题:java mapreduce二次排序

目的:

二次排序就是有下面的数据

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项目

41585c4fc8773ccef9d6172fdb3870d0.png

配置POM文件

48224407bdb3f19013f150a7a4a9f137.png

a335a958c4cd899d188085f2e9d2e7f4.png

968c9c5f0415c11347e808641828697b.png

我们

61db6da9c3dc623cdd7f74f0c38f013b.png

我们自定义Writable类,方便我们序列化

5689c26205a8d0a7df1f67088771ad22.png

添加属性 代表key-value的两个部分

f848594b9b13f6a2ff4a6bb3fa22f247.png

编写构造方法

7e51961d4418e4d1cfc4ec2e2c8135b4.png

编写一个set方法,方便我们使用

2a18b27a4eac44ab2dc90d6b978e6f6b.png

编写序列化和反序列化方法

ee3c26a426fe8fd6dccf303568bf9a8c.png

编写比较方法

f5cfd6eb4c3f3affd92a90c1516f081e.png

创建Mapper,注意输出的部分是自己创建的数据类型

da2bba977c02ff4ffcc8c7d4b8c8a77f.png

编写内容

76feae282af9527e318c72c97ef04595.png

创建Comparator类,自定义分组

16064abea9d8a6ce5beea45f2b13bd19.png

编写代码

7fba9c6c1105448941d4210ba90a108b.png

创建Partition类,自定义分区类

6960ac55c72fca3ca3c9c309d899b7a2.png

创建Reduce类

62db40f001c0ff477d325b0e4d826526.png

编写内容

982bf413674b63dc27ee51ff5ee75bb0.png

创建主类,完成主类的编写

1d22a9483f817739e17bd27dd1237139.png

其中自定义部分的类,我们放入到主方法中

自定义分区类和自定义分组类

36e9185a6ea6613ecf5c3d37d5080f20.png

准备数据源

f93fd26c74929e3f72894af12859274b.png

我们将项目打包上传到Linux上

cab8374ea19c2e80f19741e785dcfde4.png

启动Hadoop

388356ba23abce1bd308cc3d6d8b4307.png

将数据上传到HDFS上

hdfs dfs -mkdir /secondSort

hdfs dfs -put /data/secondSort/data.txt /secondSort/

hdfs dfs -ls /secondSort/

bec738a4904d09f283253f0245813ac1.png

我们执行我们的jar

yarn jar /data/secondSort/secondSort.jar com.xlglvc.xxx.mapredece.secondSort.SecondSortDriver /secondSort/data.txt /secondSortoutput

出现问题:

ecac55c6bb9c4ae0c29409c0dcd7cd84.png

经过排查,发现是我的数据不是用\t隔开的,于是重新处理数据

af5b4d10e48c8512bfc09784130b216a.png

然后删除HDFS上的data.txt,将新的data.txt文件上传,重新执行jar文件,我们观看结果

fd543e7d284b23fd6054c6fe03220bdb.png

然后我们查看生成的文件,是按照我们预想的结果完成了二次排序

责任编辑:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值