hadoop的terasort排序總結

zcc_0015發表於2013-11-24

hadoop傳統的排序是各個map任務對每個資料塊進行區域性排序,然後由一個reduce任務對所有資料進行全域性排序,這樣雖然map的並行度高,但reduce的單行化操作卻是排序的瓶頸,terasort排序利用trie樹(詞典查詢樹)的相關性質,讓reduce任務同樣並行化大大提高了大資料的排序效率。

    (1)trie樹介紹

     Trie,是一種樹形結構,是一種根節點不包含字元,除根節點外每一個節點都只包含一個字元; 從根節點到某一節點,路徑上經過的字元連線起來,為該節點對應的字串; 每個節點的所有子節點包含的字元都不相同。雜湊樹的變種。典型應用是用於統計,排序和儲存大量的字串(但不僅限於字串),所以經常被搜尋引擎系統用於文字詞頻統計。它的優點是:利用字串的公共字首來減少查詢時間,最大限度地減少無謂的字串比較,查詢效率比雜湊表高。

    根節點不包含字元,除根節點外每一個節點都只包含一個字元; 從根節點到某一節點,路徑上經過的字元連線起來,為該節點對應的字串; 每個節點的所有子節點包含的字元都不相同。

用trie樹排序原理:採用陣列的方式建立字典樹,這棵樹的每個結點的所有兒子很顯然地按照其字母大小排序。對這棵樹進行先序遍歷即可

(2)terasort排序原理

Terasort排序要經過:取樣->map對資料記錄做標記(標識出所屬的reduce編號)-》各個reduce區域性排序,再順序輸出。

a、 取樣

由jobclient對源資料進行全域性取樣,抽取部分資料然後排序,按reduce的個數對排序的資料進行分割,並將分割點暫存於分散式快取中。

 b、每個map從快取中讀取出分割點,以陣列形式建立trie樹,並按先根遍歷標記出每條記錄所屬的reduce編號,此過程結束後,每個split將被map task分成r個塊,並且第i塊總是比第i+1塊大。

c、每個reduce進行區域性排序後,順序輸出即為最終的排序結果。

例子參照:http://dongxicheng.org/mapreduce/hadoop-terasort-analyse/

相關文章