排序大概分為以下幾類
- MapReducer自帶排序就可以滿足
- 自定義sort規(guī)則,只設(shè)置1個Reducer Task
- 自定義Partition實現(xiàn)區(qū)內(nèi)有序
- 啟用多個Reducer Task 并實現(xiàn)全局有序,MapReducer提供了TotalSortPartitioner
-
為了滿足速度快的要求,對不同的key采用不一樣的查找方法,分別是
- 如果key是BinaryComparable(可以認(rèn)為是字符串類型)的話會構(gòu)建trie,時間復(fù)雜度是O(n), n是樹的深度.
- 如果是非BinaryComparable類型就構(gòu)建BinarySearchNode,用二分查找,時間復(fù)雜度O(log(n)),n是reduce數(shù)。
-
為了滿足負(fù)載均衡,提供了三個采樣類,分別是
- IntervalSampler:以一定間隔從分片中選擇鍵,適合排好序的文件
- RandomSampler:以指定的采樣率均勻地從一個數(shù)據(jù)集中選擇樣本。
- SplitSampler:取一片數(shù)據(jù),把這些片數(shù)據(jù)進(jìn)行處理,選出分區(qū)用的臨界點,進(jìn)行分區(qū)