1.Mapreduce的排序和分组的过程详解:
排序过程:在map和reduce阶段进行排序时,比较的是k2。v2是不参与排序比较的。如果要想让v2也进行排序,需要把k2和v2组装成新的类,作为k2,才能参与比较。
分组过程:分组时也是按照k2进行比较的。
2. 排序和分组案例:
(1)需求讲解:
将一下两排数字进行排序:
5 3
5 2
4 1
2 2
1 1
排序的规则是:
1)先按第一列从小到大排序,
2)如果第一列相同,按第二列从小到大排序
(2)以上需求的解决方案是:
因为hadoop默认的排序方式,只能比较key,也就是第一列,而value是无法参与排序的。因此我们采用的解决方案是自定义排序规则。具体来讲即:
1)自定义数据类型,将原来的key和value进行封装
2)将封装的数据类型当做key,同时调用封装的key的对比方法。
3. 排序和分组案例的编码步骤:
第一步:自定义数据类型:DoubleData。对原始的key,value进行封装
第二步:编写mapper类,调用封装的数据类型的对比方法
第三步:编写reduce类,将排序后的数据输出
第四步:编写main方法执行该mapreduce方法
第五步:执行该mapreduce程序,具体步骤如下:
1)编译并打成jar包
2)上传到hadoop所在机器文件夹下。比如:放在hadoop的根目录的code文件夹下。(code是自己创建的)
3)在hadoop上创建输入文件夹和文件,
创建文件夹:/user/root/input. 核心命令是:hadoop fs –mkdir
将linux本地的文件挪动到hadoop的上述文件夹下。核心命令是:hadoop fs -put
文件名是sort.txt 里边的内容是:
5 3
5 2
4 1
2 2
1 1
4)在hadoop的bin目录下,执行以下命令:
hadoop jar ../code/hadoopst.jar com/gongyunit/hadoop/hdfsst/TestSortGroup /user/root/input/sort.txt /user/root/output
领取专属 10元无门槛券
私享最新 技术干货