溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

hadoop二次排序怎么理解

發(fā)布時間:2021-12-10 09:35:13 來源:億速云 閱讀:142 作者:iii 欄目:云計算

這篇文章主要講解了“hadoop二次排序怎么理解”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“hadoop二次排序怎么理解”吧!

1.流程 各個階段;
input ---> split ——> recordreader ——> 形成復(fù)合鍵值對textpair  ——> 分區(qū)(setGroupingComparatorClass設(shè)置的分區(qū)方法)輸出  ——> 對每個分區(qū)進行排序setSortComparatorClass(按照設(shè)定的排序方式對textpair進行排序,其實這已經(jīng)進行了一次二次排序了)  ——> shuffle階段  ——> 內(nèi)部排序(用setSortComparatorClass設(shè)定的排序方式,進行第二次排序) ——>分組(setGroupingComparatorClass設(shè)定的分組函數(shù)) ——> 執(zhí)行reduce ——>輸出
2.各個流程詳解
Map階段:
 (1) 輸入的數(shù)據(jù),安裝inputformat進行輸入,同時生成相應(yīng)的鍵值對<key,value>;
 (2) 在Map函數(shù)中,對鍵值對key,value進行處理形成新的TextPair鍵值對 key1=key + value,value1=value,同時對TextPair的排序是先對key1的key排序,然后對value排序。
 (3) 在Spill輸出階段,用新定義的partion方法決定對應(yīng)的reducer。分區(qū)是依據(jù)TextPair鍵的第一個字段(key)進行分區(qū)。
 (4) 對map輸出的分塊進行內(nèi)部排序,排序方式采用我們定義的哦規(guī)則,實際上對其進行了一次二次排序(首先按照key1的第一個字段排序,然后按照第二個字段排序)
 (5)對一個分區(qū)的多個文件進行merge操作
Reduce階段:
 (1) Shuffle Reducer根據(jù)jobtracker查找到要讀取的文件,傳輸?shù)絉educer,并進行merge操作。
 (2) 因為從不同節(jié)點讀取了相應(yīng)的map輸出文件,所以在此處進行第二次排序,排序依然是根據(jù)我們定義的排序規(guī)則(TextPair的排序方法)進行排序,重新進行了一次二次排序。
 (3) 在reduce階段,會對鍵值相同的項進行分組操作,其默認操作的鍵。對于我們生產(chǎn)的鍵值對<key1,value1>,key1是一個復(fù)合鍵值對,我們對他的操作是針對key1的第一個值為準的。生成新的分組<key1,valueList<value1,value2........>>
 (4)reduce 對分組進行處理。
我們現(xiàn)在以Hadoop權(quán)威指南中的例子進行推演
在這個例子中,輸入的文件是這樣格式,第一列是時間,第二列是溫度
 1990 31
 1991 20
 1991 18
 1991 33
 1990 22
 1990 17
我們想要得到的結(jié)果如下(先按照年份排序,然后按照溫度排序)
 1990 17
 1990 22
 1990 31
 
 1991 18
 1991 20
 1991 33
 過程如下:
 (1)在map階段,將將輸入文件形成復(fù)合鍵值對
  <<1990 31> 31>
  <<1991 20> 20>
  <<1991 18> 18>
  <<1991 33> 33>
  <<1990 22> 22>
  <<1990 17> 17>
 (2)利用partion函數(shù),對復(fù)合鍵的鍵值的第一列作為鍵進行分片,并進行內(nèi)部排序
  
  <<1990 17> 17>
  <<1990 22> 22>
  <<1990 31> 31>
  
  <<1991 18> 18>
  <<1991 20> 20>
  <<1991 33> 33>
  這個文件分別映射到不同的reducer,Reducer從jobtracker中讀到要讀的文件
 (3)reducer通過shuffle將不同節(jié)點上的內(nèi)容加載進來,并重新進行二次排序(因為不同節(jié)點上的相應(yīng)部分被加載進來后,各個部分的內(nèi)容不相同,需要重新進行二次排序)
  <<1990 17> 17>
  <<1990 22> 22>
  <<1990 31> 31>
  
  <<1991 18> 18>
  <<1991 20> 20>
  <<1991 33> 33>
 (4)分組
  reduce階段重新排序過后,還需要分組,分組所依據(jù)的鍵值是默認鍵,而我們穿過來的是復(fù)合鍵,其分組的時候,不一定按照年份來,所以我們重新實現(xiàn)分組函數(shù),使得其以復(fù)合鍵的第一列作為鍵值進行分組
  reducer1:
   <<1990 17> <17 22 31>>
  reducer2:
   <<1991 18> <18 20 33>>
 (4)由reduce處理形成的分組,鍵值為復(fù)合鍵的第一列,value值為依次從valueList中取出的值
  reducer1輸出:
   1990 17
   1990 22
   1990 31
  reducer2輸出:
   1991 18
   1991 20
   1991 33

感謝各位的閱讀,以上就是“hadoop二次排序怎么理解”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對hadoop二次排序怎么理解這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI