天天看點

MapReduce架構排序和分組前言:一、分區二、排序三、分組

        Mapreduce架構就是map->reduce,其中Map中的<key,value>是偏移量和行值,在其之前會使用job.setInputFormatClass定義的InputFormat将輸入的資料集分割成小資料塊splites,同時InputFormat提供一個RecordReder的實作。本例子中使用的是TextInputFormat,他提供的RecordReder會将文本的一行的行号作為key,這一行的文本作為value。這就是自定義Map的輸入是<LongWritable,

Text>的原因。

       之後調用Map類進行split,将其寫入環形記憶體中,待其達到閥值時,對其的80%進行排序排序和分組,這都是在Map和Reduce之間完成,那麼下面我們來看看這些函數類

按照Key進行排序,其實在每一個Map函數裡就已經預設調用了job.setSortComparatorClass(Comparator.class)類進行了排序,但此時隻不過對每一個Map函數接受的value(行值)的排序,這裡所說的是map和reduce之間的排序,實作的是對所有的key進行排序

job.setGroupingComparatorClass(GroupComparator.class);

如果使用者想自定義排序方式,首先需要實作兩個Comparator并将其按照上面的格式進行配置。每一個Comparator需要繼承WritableComparator基類。如下所示:

繼續閱讀