Hadoop Partitioner&Combiner&Shuffle&OutputFormat解析
1 概述
我们在本节的目标是关注数据的归并过程,包括Partitioner、Combiner、Shuffle&Sort以及OutputFormat等组件合过程。
对于Partioner,我们将讨论什么是Hadoop Partitioner。MapReduce中的Partitioner操作mapper输出的中间数据,对它们的key进行分区。通过哈希函数,使用key或者key的子集得到分区。总分区数取决于reduce task(任务)的数量。我们还将学习为什么需要Hadoop partitioner,默认Hadoop partitioner是什么,在Hadoop中,什么是分区不均,如何克服。
Hadoop Combiner也称为“Mini-Reducer”,它在将数据传递给Reducer之前,对Mapper输出记录中同一个key的数据进行合并处理。我们将介绍什么是Hadoop combiner,带有以及不带有combiner的MapReduce程序的区别,Hadoop combiner的优缺点。
在Hadoop中,将mapper输出的中间数据传输到reducer的过程叫做shuffle。Reducer的实质就是将一个或者多个key和value相关联。mapper生成的中间键值对自动按key排序。我们在本节将讨论Hadoop MapReduce有关shuffle和Sort(排序)的细节。
在这里,我们也将会讨论什么是Sort(排序),什么是shuffle,在MapReduce中Shuffle和sort阶段的目的,Shuffle是如何工作的,sort是如何工作的,我们还会了解MapReduce中的次排序。
Hadoop输出格式会检查作业的输出规范。它决定如何实现RecordWriter,向输出文件写入输出内容。在本节,我们将了解Hadoop输出格式,了解什么是RecordWriter,如何使用RecordWriter。我们也将讨论Hadoop的各种输出格式类型,比如:textOutputFormat、sequenceFileOutputFormat、mapFileOutputFormat、sequenceFileAsBinaryOutputFormat、DBOutputFormat、LazyOutputFormat以及 MultipleOutputs等。
2 Hadoop Partitioner
在我们开始介绍MapReduce partitioner之前,我们先理解什么是Hadoop mapper,Hadoop Reducer以及Hadoop combiner。
map输出的中间数据其key的分区是由Partitioner控制的。通过哈希函数,使用key或者key的子集得到分区。每个mapper的输出,将根据键值对进行分区,key相同的记录会分到同一个分区,然后每个分区发送到一个