Hadoop是一個由Apache基金會所開發的分散式系統基礎架構。用戶可以在不瞭解分散式底層細節的情況下,開發分散式程序,充分利用集羣的威力進行高速運算和存儲。

Hadoop的框架最核心的設計就是:HDFS和MapReduce。HDFS為海量的數據提供了存儲,相當於一個文件中轉站的功能,而MapReduce為海量的數據提供了計算。但兩者只是理論基礎,不是具體可使用的高級應用,Hadoop旗下有很多經典子項目,比如HBase、Hive等,這些都是基於HDFS和MapReduce發展出來的。要想了解Hadoop,就必須知道HDFS和MapReduce是什麼。

HDFS

HDFS是一個分散式文件系統,用來存儲和讀取數據的。

文件系統都有最小處理單元,而HDFS的處理單元是塊。HDFS保存的文件被分成塊進行存儲,默認的塊大小是64MB(Hadoop1.x), 128MB(Hadoop2.x)。

在HDFS中有兩類節點:

NameNode:

NameNode是管理節點,存放文件元數據。也就是存放著文件和數據塊的映射表,數據塊和數據節點的映射表。

DataNode:

DataNode是工作節點,用來存放數據塊,也就是文件實際存儲的地方。

DFS具有特點

1.數據冗餘,軟體容錯很高。

2.流失數據訪問,也就是HDFS一次寫入,多次讀寫,並且沒辦法進行修改,只能刪除之後重新創建

3.適合存儲大文件。如果是小文件,而且是很多小文件,連一個塊都裝不滿,並且還需要很多塊,就會極大浪費空間。

HDFS的適用性和侷限性:

1.數據批量讀寫,吞吐量高。

2.不適合互動式應用,延遲較高。

3.適合一次寫入多次讀取,順序讀取。

4.不支持多用戶並發讀寫文件。

MapReduc:

MapReduce是並行處理框架,實現任務分解和調度。

其實原理說通俗一點就是分而治之的思想,將一個大任務分解成多個小任務(map),小任務執行完了之後,合併計算結果(reduce)。

JobTracker拿到job之後,會把job分成很多個maptask和reducetask,交給他們執行。 MapTask、ReduceTask函數的輸入、輸出都是<key,value>的形式。HDFS存儲的輸入數據經過解析後,以鍵值對的形式,輸入到MapReduce()函數中進行處理,輸出一系列鍵值對作為中間結果,在Reduce階段,對擁有同樣Key值的中間數據進行合併形成最後結果。

job:在Hadoop內部,用Job來表示運行的MapReduce程序所需要用到的所有jar文件和類的集合,>這些文件最終都被整合到一個jar文件中,將此jar文件提交給JobTraker,MapReduce程序就會執行。

task:job會分成多個task。分為MapTask和ReduceTask。

jobTracker:管理節點。將job分解為多個map任務和reduce任務。

taskTracker:任務節點。一般和dataNode為同一個節點,這樣計算可以跟著數據走,開銷最小化。

作用:

1.作業調度

2.分配任務,監控任務執行進度

3.監控TaskTracker狀態

MapReduce容錯機制

1.重複執行。一個job最多被執行4次。

2.推測執行。因為Map全部算完之後才會執行Reduce,如果其中一個Map很慢,就會多使用一個task來完成同樣的工作,哪個執行的快用哪個。

推薦閱讀:

相關文章