Hadoop入門之HDFS與MapReduce
Hadoop的核心就是HDFS與MapReduce
1. HDFS
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
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、
2、
3、
4、
5、
6、
7、
8、
所以,總的流程應該是這樣的:
*
由此我們也可以看出,執行reduce的代價還是有些的,所以如果我們的應用只使用map就能搞定的話,那就盡量不要再有reduce操作在其中。
3. Hadoop調度流程

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