Hadoop入門之HDFS與MapReduce

fmms 12年前發布 | 60K 次閱讀 Hadoop 分布式/云計算/大數據

Hadoop的核心就是HDFS與MapReduce

1. HDFS

Hadoop入門之HDFS與MapReduce

master/slave : Namenode,Datanode
Namenode:Namenode執行文件系統的名字空間操作,比如打開、關閉、重命名文件或目錄。它也負責確定數據塊到具體Datanode節點的映射。
Datanode:Datanode負責處理文件系統客戶端的讀寫請求。在Namenode的統一調度下進行數據塊的創建、刪除和復制。


文件怎么存的?
文件分塊,存到Datanode里。分塊的原則:除了最后一個數據塊,其它數據塊的大小相同,一般為64MB or 128MB。
每個數據塊有副本(一般為3):副本多了浪費空間。
副本存儲:在大多數情況下,副本系數是3,HDFS的存放策略是將一個副本存放在本地機架的節點上,一個副本放在同一機架的另一個節點上,
          最后一個副本放在不同機架的節點上。這種策略減少了機架間的數據傳輸,這就提高了寫操作的效率。
副本目的:可靠性+性能


集群中單一Namenode的結構大大簡化了系統的架構。Namenode是所有HDFS元數據的仲裁者和管理者,這樣,用戶數據永遠不會流過Namenode。


client讀數據:為了降低整體的帶寬消耗和讀取延時,HDFS會盡量讓讀取程序讀取離它最近的副本。如果在讀取程序的同一個機架上有一個副本,
              那么就讀取該副本。如果一個HDFS集群跨越多個數據中心,那么客戶端也將首先讀本地數據中心的副本。
client寫數據:一次性寫入,多次讀取,數據訪問會高效。


通訊協議:tcp/ip 


2. MapReduce

Hadoop入門之HDFS與MapReduce

流程:
Inputformat——》map——》(combine)——》partition——》copy&merge——》sort——》reduce——》outputformat
優化措施:合理設計MapReduce, 代碼級別

轉載一篇講的比較好的文章:

我 們以wordcount為例,假設有個6400M的文件,100臺hadoop機器(準確地說應該是tasktracker機),默認block大小為 64M,這樣每臺執行map的文件剛好是一個64M的block文件(假設這個分發過程已經完成,同時忽略備份數之類的細節),并且我們使用10個 reduce任務來歸并文件。Hadoop的mapreducer的執行過程如下:

這100臺機器上面的map都是并發、獨立的執行,以wordcount為例,步驟如下:

1、  每個map任務使用默認的textinputformat類的LineRecordReader方法按行讀取文件,這個讀取的行數據就 被交給map函數去執行,wordcount的map做的就是提取里面的單詞,并以單詞為key,1為value作為輸出,格式為:

2、  如果有combine,先對第一步的輸出結果就行combine操作。Combine就是個小reduce操作,作用就是對某個map 自己的輸出結果先進行一次歸并,把相同word的計數累加,這樣假設某個map輸出結果做如果有50%的重復word,那combine后的中間結果大小 可以減少一半,可減少后續的patition、copy、sort等的開銷,提高性能。

3、  每個map對自己的輸出文件進行patition操作。上面提到有10個reducer任務,那默認的patition操作就是對 map的輸出kay進行hash,并對10求余(hash(key)),并提供10個文件(內存足夠的話可以是鏈表等內存數據結構),假設是r1、 r2….r10這10個文件,把不同key的放到不同的文件,這次操作就可以把相同key聚合到同一個文件。由于算法一樣,保證了每個map的輸出結果經 過這個操作后,相同key的肯定在同一個聚合文件里,比如某個單詞word肯定都在r1文件里。

4、  接下來就是copy文件的過程了,10個reducer任務各自從所有map機器上取到屬于自己的文件,比如reducer1會從100臺map機器上取到所有r1文件,reducer2取所有r2的文件,這樣同一類word已經到了同一臺reducer機器上了。

5、  每個reducer合并(meger)自己取到的文件,reducer1就是合并100個r1文件(實際過程是在上面第4步操作中會邊copy邊meger,在內存中)。

6、  合并好后進行下sort(排序)操作,再次把不同小文件中的同一個單詞聚合在一起。作為提供給reduce操作的數據。

7、  進行reduce操作,對同一個單詞的value列表再次進行累加,最終得到某個單詞的詞頻數。

8、  Outputformat操作,把reduce結果寫到磁盤。

所以,總的流程應該是這樣的:

  Inputformat——》map——》(combine)——》partition——》copy&merge——》sort——》reduce——》outputformat

由此我們也可以看出,執行reduce的代價還是有些的,所以如果我們的應用只使用map就能搞定的話,那就盡量不要再有reduce操作在其中。


3. Hadoop調度流程


Hadoop入門之HDFS與MapReduce

轉自: http://blog.csdn.net/perfumekristy/article/details/7182323

 本文由用戶 fmms 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!