MapReduce开发总结!

总所周知,一般的job,是需要Map阶段和Reduce阶段共同去处理一些相应的业务逻辑。下面是一些具体的总结。

Map阶段
1.输入形式:系统默认的输入是TextInputFormat。但在实际的业务需求中,需要结合其他相应的实现类处理业务逻辑。具体的是实现类有:KeyValueInputFormat:以文件个数设置切片,K为偏移量,V为行值。 NLineInputFormat:以行数决定切片个数。K为偏移量,V为N行值。CombinerTextInputFormat:将多个小文件合并成一个大文件设置一个切片切割。KV为默认方式。用户自定义实现类(主要业务逻辑在继承RecordReader类中实现read方法):切片个数由文件个数决定。K为文件所在路径名称+文件名。V为整个文件内容。
**2*分区。**默认排序方式是HashPatitioner。在方法getPatition中有3个参数,分别是key.hashCode,Interger.MaxValue,NumReduce(默认为1),前两个对第三个求模,所以默认的分区个数是1(分区号从0开始)。
3排序。通过Bean类去实现WritableComparable接口,实现compareTo方法,对数据进行排序。排序分为全排序(即对整个数据进行排序),部分排序(对输出的每个文件的数据进行排序)。
4.Combiner :在Reduce输出之前,利用Combiner可以对Map端数据进行提前归总,减少网络数据的传输量,减轻Reduce端的任务量,避免造成
数据倾斜。

Reduce阶段:
**1.输出形式:**默认输出为TextOutPutFormat,即按行输出(按照KV对)。显示类有sequenceOutputFormat(队列输出格式)即将一些小文件内的内容合并成到一个大的文件里面去。自定义输出类(主要逻辑在继承RecordWriter中实现write中方法):作用:将输出文件按照设置指定地点输出。
2.排序:分组排序:将Map阶段的数据按照自定义的key值进入Reduce阶段,在Reduce中进行排序。

猜你喜欢

转载自blog.csdn.net/qq_43151441/article/details/88647168