關於Hadoop
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來完成同樣的工作,哪個執行的快用哪個。
推薦閱讀: