您好,登錄后才能下訂單哦!
這篇文章主要講解了“hadoop二次排序怎么理解”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“hadoop二次排序怎么理解”吧!
1.流程 各個階段;
input ---> split ——> recordreader ——> 形成復合鍵值對textpair ——> 分區(setGroupingComparatorClass設置的分區方法)輸出 ——> 對每個分區進行排序setSortComparatorClass(按照設定的排序方式對textpair進行排序,其實這已經進行了一次二次排序了) ——> shuffle階段 ——> 內部排序(用setSortComparatorClass設定的排序方式,進行第二次排序) ——>分組(setGroupingComparatorClass設定的分組函數) ——> 執行reduce ——>輸出
2.各個流程詳解
Map階段:
(1) 輸入的數據,安裝inputformat進行輸入,同時生成相應的鍵值對<key,value>;
(2) 在Map函數中,對鍵值對key,value進行處理形成新的TextPair鍵值對 key1=key + value,value1=value,同時對TextPair的排序是先對key1的key排序,然后對value排序。
(3) 在Spill輸出階段,用新定義的partion方法決定對應的reducer。分區是依據TextPair鍵的第一個字段(key)進行分區。
(4) 對map輸出的分塊進行內部排序,排序方式采用我們定義的哦規則,實際上對其進行了一次二次排序(首先按照key1的第一個字段排序,然后按照第二個字段排序)
(5)對一個分區的多個文件進行merge操作
Reduce階段:
(1) Shuffle Reducer根據jobtracker查找到要讀取的文件,傳輸到Reducer,并進行merge操作。
(2) 因為從不同節點讀取了相應的map輸出文件,所以在此處進行第二次排序,排序依然是根據我們定義的排序規則(TextPair的排序方法)進行排序,重新進行了一次二次排序。
(3) 在reduce階段,會對鍵值相同的項進行分組操作,其默認操作的鍵。對于我們生產的鍵值對<key1,value1>,key1是一個復合鍵值對,我們對他的操作是針對key1的第一個值為準的。生成新的分組<key1,valueList<value1,value2........>>
(4)reduce 對分組進行處理。
我們現在以Hadoop權威指南中的例子進行推演
在這個例子中,輸入的文件是這樣格式,第一列是時間,第二列是溫度
1990 31
1991 20
1991 18
1991 33
1990 22
1990 17
我們想要得到的結果如下(先按照年份排序,然后按照溫度排序)
1990 17
1990 22
1990 31
1991 18
1991 20
1991 33
過程如下:
(1)在map階段,將將輸入文件形成復合鍵值對
<<1990 31> 31>
<<1991 20> 20>
<<1991 18> 18>
<<1991 33> 33>
<<1990 22> 22>
<<1990 17> 17>
(2)利用partion函數,對復合鍵的鍵值的第一列作為鍵進行分片,并進行內部排序
<<1990 17> 17>
<<1990 22> 22>
<<1990 31> 31>
<<1991 18> 18>
<<1991 20> 20>
<<1991 33> 33>
這個文件分別映射到不同的reducer,Reducer從jobtracker中讀到要讀的文件
(3)reducer通過shuffle將不同節點上的內容加載進來,并重新進行二次排序(因為不同節點上的相應部分被加載進來后,各個部分的內容不相同,需要重新進行二次排序)
<<1990 17> 17>
<<1990 22> 22>
<<1990 31> 31>
<<1991 18> 18>
<<1991 20> 20>
<<1991 33> 33>
(4)分組
reduce階段重新排序過后,還需要分組,分組所依據的鍵值是默認鍵,而我們穿過來的是復合鍵,其分組的時候,不一定按照年份來,所以我們重新實現分組函數,使得其以復合鍵的第一列作為鍵值進行分組
reducer1:
<<1990 17> <17 22 31>>
reducer2:
<<1991 18> <18 20 33>>
(4)由reduce處理形成的分組,鍵值為復合鍵的第一列,value值為依次從valueList中取出的值
reducer1輸出:
1990 17
1990 22
1990 31
reducer2輸出:
1991 18
1991 20
1991 33
感謝各位的閱讀,以上就是“hadoop二次排序怎么理解”的內容了,經過本文的學習后,相信大家對hadoop二次排序怎么理解這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。