MapReduce的排序与分区

一、排序:按照key2进行排序
1、数字的排序
2、字符串的排序
3、对象的排序: 实现WritableComparable接口 (1)序列化 (2)可被排序

    员工数据 Employee.java  ----> 作为key2输出
	复习SQL:order by 后面 +  列名、表达式、别名、序号  desc
	         desc 只作用于离他最近的一个列
			      order by a desc,b desc
				  
	(1)一个列的排序
	(2)多个列的排序

二、分区:Partition: 根据Map的输出(k2 v2)进行分区
1、默认情况下,MapReduce只有一个分区(只有一个输出文件)
2、什么是分区?(重要)
3、举例:Demo: 按照员工的部门号进行分区,相同部门号的员工输出到一个分区中
日志:
17/12/18 21:47:24 INFO mapreduce.Job: map 100% reduce 0%
17/12/18 21:47:49 INFO mapreduce.Job: map 100% reduce 33%
17/12/18 21:47:55 INFO mapreduce.Job: map 100% reduce 67%
17/12/18 21:47:56 INFO mapreduce.Job: map 100% reduce 100%

三、合并:Combiner
1、MapReduce的任务中,可以没有Combiner
2、Combiner是一种特殊的Reducer,是在Mapper端先做一次Reducer,用来减少Map的输出,从而提高的效率。
3、注意事项:
(1)有些情况,不能使用Combiner -----> 求平均值

	(2)引入Combiner,不引人Combiner,一定不能改变原理的逻辑。(MapReduce编程案例:实现倒排索引)

错误:
Error: java.io.IOException: wrong value class: class org.apache.hadoop.io.DoubleWritable is not class org.apache.hadoop.io.IntWritable
posted @ 2018-02-09 15:41  好奇的小码农  阅读(468)  评论(0编辑  收藏  举报