Hadoop核心機制詳細解析
Hadoop的核心機制是通過HDFS文件系統和MapReduce算法進行存儲資源、內存和程序的有效利用與管理。在現實的實例中,通過Hadoop,可以輕易的將多臺普通的或低性能的服務器組合成分布式的運算-存儲集群,提供大數據量的存儲和處理能力。
知其然,知其所以然。要想深入學習和理解Hadoop的核心機制,還要從MapReduce和HDFS的原理入手。
MapReduce的“大事化小”
作為Google提出的架構,MapReduce通過Map(映射)和Reduce(化簡)來實現大規模數據(TB級)的并行計算。可以簡單理解為,通過Map(映射)函數,把一組鍵值對映射成一組新的鍵值對;指定并發的Reduce(化簡)函數,用來保證所有映射的鍵值對中的每一個共享相同的鍵組。
MapReduce是一種大數據計算的開發模式和思想方法。開發人員先分析需求所提出問題的解決流程,找出數據可以并發處理的部分(Reduce),也就是那些能夠分解為小段的可并行處理的數據,再將這些能夠采用并發處理的需求寫成Map程序(Map)。
然后就可以使用大量服務器來執行Map程序,并將待處理的龐大數據切割成很多的小份數據,由每臺服務器分別執行Map程序來處理分配到的那一小段數據,接著再將每一個Map程序分析出來的結果,透過Reduce程序進行合并,最后則匯整出完整的結果。
MapReduce的整個流程就像…
MapReduce是Hadoop分布式計算的關鍵技術,將要執行的問題,拆解成Map和Reduce的方式來執行,以達到分散運算的效果。例如要搜尋網頁中的“In Big Data”這個詞,可以先用Map程序,來計算出所有網頁中,每一個詞的位置。再使用Reduce程序,在每一個字的清單中,檢索出“In Big Data”所對應的URL,您就來到了這個博客。MapReduce程序的執行過程如下:
MapReduce運行流程
MapReduce的運作方式就像快遞公司一樣。物流部門會將發往各地的包裹先運送到各地的物流分站,再由分站派出進行派送;快遞員等每個包裹的用戶簽單后將數據反饋給系統匯總,完成整個快遞流程。在這里,每個快遞員都會負責配送,所執行的動作大致相同,且只負責少量的包裹,最后由物流公司的系統進行匯總(而不是從一個庫房一個快遞員直接發往各地;這樣的話估計順風、京東神馬的會被人罵死)。
在Hadoop集群架構中,服務器依據用途可分成Master節點和Worker節點,Master負責分配任務,而Worker負責執行任務。
Hadoop中的Master與Worker
Hadoop運算集群中的服務器依用途分成Master節點和Worker節點。Master節點中含有JobTracker、NameNode、TaskTracker和DataNode程序;Worker節點含有TaskTracker和DataNode。另外在系統的架構上,最簡單的Hadoop架構,可以分成上層的MapReduce運算層以及下層的HDFS數據層。
在Master節點的服務器中會執行兩套程序:一個是負責安排MapReduce運算層任務的JobTracker,以及負責管理HDFS數據層的NameNode程序。而在Worker節點的服務器中也有兩套程序,接受JobTracker指揮,負責執行運算層任務的是TaskTracker程序,與NameNode對應的則是DataNode程序,負責執行數據讀寫操作以及執行NameNode的副本策略。
在MapReduce運算層上,擔任Master節點的服務器負責分配運算任務,Master節點上的JobTracker程序會將Map和Reduce程序的執行工作指派給Worker服務器上的TaskTracker程序,由TaskTracker負責執行Map和Reduce工作,并將運算結果回復給Master節點上的JobTracker。
在HDFS數據層上,NameNode負責管理和維護HDFS的名稱空間、并且控制檔案的任何讀寫動作,同時NameNode會將要處理的數據切割成一個個檔案區塊(Block),每個區塊是64MB,例如1GB的數據就會切割成16個檔案區塊。NameNode還會決定每一份檔案區塊要建立多少個副本,一般來說,一個檔案區塊總共會復制成3份,并且會分散儲存到3個不同Worker服務器的DataNode程序中管理,只要其中任何一份檔案區塊遺失或損壞,NameNode會自動尋找位于其他DataNode上的副本來回復,維持3份的副本策略。
在一套Hadoop集群中,分配MapReduce任務的JobTracker只有1個,而TaskTracker可以有很多個。同樣地,負責管理HDFS文件系統的NameNode也只有一個,和JobTracker同樣位于Master節點中,而DataNode可以有很多個。
不過,Master節點中除了有JobTracker和NameNode以外,也會有TaskTracker和DataNode程序,也就是說Master節點的服務器也可以在本地端扮演Worker角色的工作。
在部署上,因為Hadoop采用Java開發,所以Master服務器除了安裝操作系統如Linux之外,還要安裝Java執行環境,然后再安裝Master需要的程序,包括了NameNode、JobTracker和DataNode與TaskTracker。而在Worker服務器上,則只需安裝Linux、Java環境、DataNode和TaskTracker。
在之后的文章中將詳細說明Hadoop安裝部署方面的問題。這里只針對Hadoop的運行機制及內部細節做了討論;在實際的應用中雖然還需要很多知識,但就理解Hadoop和MapReduce核心思想來說,以上的內容值得反復推敲。對技術,要知其然,知其所以然!