hadoop入門

hadoop入門(面試須要)

 MapReduce簡介:(參考)

  1. MapReduce是一種分佈式計算模型,主要應用於搜索領域,解決海量數據的計算問題。
  2. 有兩個階段map(),reduce(),實現這兩個階段便可實現分佈式計算。

MapReduce執行過程:


 

MapReduce原理:

 

 

MapReduce執行步驟:

map過程

  1. 讀取hdfs中的文件,逐行解析成key-value鍵值對,並對每一個key-value鍵值對調用一次map函數。
    eg.<hadoop hello \n hadoop bigdata>====》<1,hadoop hello><2,hadoop bigdata>
  2. 覆蓋上一次的map(),對執行的結果(<k,v>)繼續進行處理,轉換成新的<k,v>
    eg.<hadoop,1><hello,1><hadoop,1><bigdata,1>
  3. 對輸出的<k,v>進行分區,默認分爲一個區(partitioner)
  4. 對不一樣分區中的數據進行排序(按照k)、分組。分組指的是相同key的value放到一個集合中。 
    排序後:<bigdata,1> <hadoop,1> <hadoop,1> <hello,1>  分組後:<bigdata,{1}><hadoop,{1,1}><hello,{1}>
  5. 對分組後的數據進行規約(可有)
    combiner
    • 每個map可能會產生大量的輸出,combiner的做用就是在map端對輸出先作一次合併,以減小傳輸到reducer的數據量。
    • combiner最基本是實現本地key的歸併,combiner具備相似本地的reduce功能。 若是不用combiner,那麼,全部的結果都是reduce完成,效率會相對低下。使用combiner,先完成的map會在本地聚合,提高速度。
    • 注意:Combiner的輸出是Reducer的輸入,Combiner毫不能改變最終的計算結果。因此從個人想法來看,Combiner只應該用於那種Reduce的輸入key/value與輸出key/value類型徹底一致,且不影響最終結果的場景。好比累加,最大值等。
    爲何使用Combiner?Combiner發生在Map端,對數據進行規約處理,數據量變小了,傳送到reduce端的數據量變小了,傳輸時間變短,做業的總體時間變短。
    爲何Combiner不做爲MR運行的標配,而是可選步驟呢?由於不是全部的算法都適合使用Combiner處理,例如求平均數。
    Combiner自己已經執行了reduce操做,爲何在Reducer階段還要執行reduce操做呢?combiner操做發生在map端的,處理一個任務所接收的文件中的數據,不能跨map任務執行;只有reduce能夠接收多個map任務處理的數據。

Reduce過程

  1. 多個map任務的輸出,按照不一樣的分區,經過網絡將輸出複製到不一樣的節點上,shuffle過程

  2. 對多個map的輸出進行合併,排序。覆蓋Reduce函數,接收的是分組後的數組,實現本身的業務邏輯。
    <bigdata,1><hadoop,2><hello,1>
  3. 將Reduce產生的結果輸出到hdfs中。
相關文章
相關標籤/搜索