Hadoop的架構知識
Hadoop是一個能夠對大量數據進行分布式處理的軟件框架,實現了Google的MapReduce編程模型和框架,能夠把應用程序分割成許多小的工作單元,並把這些單元放到任何集群節點上執行。在MapReduce中,一個準備提交執行的應用程序成為“作業job”,而從一個作業換分出的、運行於個計算節點的工作單元成為“任務task”。此外,Hadoop提供的分布式文件系統HDFS主要負責各個節點上的數據的存儲,並實現了高吞吐率的數據讀寫。
在分布式存儲和分布式計算方面,Hadoop都使用主/從(Master/Slave)架構。在一個配置完整的集群上想讓Hadoop跑起來,需要在集群中運行一系列後臺(daemon)程序。不同的禍胎程序扮演著不同的角色,這些角色由NameNode,DataNode,Secondary NameNode,JobTracker,TaskTracker組成,其中NameNode,Secondary NameNode,JobTracker運行在Master幾點上,而在每個Slave節點上,部署著一個DataNode和TaskTracker,一邊這個Slave服務器上運行的數據處理程序能盡可能直接處理本機的數據。對Master節點需要特別說明的是,在小集群中,Secondary NameNode可以屬於某個從節點;在大型集群匯中,NameNode和JobTracker被分別部署在兩臺服務器上。
NameNode
NameNode是HDFS的守護程序,負責記錄文件是如何分割成數據塊的,以及數據塊被存儲到哪些數據節點上。它的主要功能是對內存及I/O進行集中管理。
一般來說,NameNode所在的服務器不存儲任何用戶信息或執行計算任務,以避免這些程序降低服務器的性能。如果其他從服務器因出現軟硬件的問題而宕機,Hadoop集群仍舊可以繼續運行,或者快速重啟。但是由於NameNode是Hadoop集群中的一個單一節點,一旦NameNode服務器宕機,整個系統將無法運行。
DataNode
集群中的每個從服務器都運行著一個DataNode後臺程序,它負責把HDFS數據塊讀寫到本地的文件系統。當需要通過客戶端讀/寫某個數據時,先由NameNode告訴客戶端去哪個DataNode進行具體的讀/寫操作,然後,客戶端直接與這個DataNode服務器的後臺程序進行通信,並且對相應的數據塊進行讀/寫操作。
Secondary NameNode
Secondary NameNode是一個用來監控HDFS狀態的輔助後臺程序。就像NameNode一樣,每個集群都有一個Secondary NameNode,並且部署在一臺單獨的服務器上。Secondary NameNode不同於NameNode,它不接收或記錄任何實時的數據變化,但是,它會與NameNode進行通信,以便定期地保存HDFS元數據的快照。由於NameNode是單點的,通過Secondary NameNode的快照功能,可以講NameNode的宕機事件和數據損失降低到最小。同時,如果NameNode發生問題時,Secondary NameNode可以及時地作為備用NameNode繼續使用。
JobTracker
JobTracker後臺程序用來連接應用程序與Hadoop。用戶代碼提交到集群以後,由JobTracker決定哪個文件將被處理,並且為不同的task分配節點。同時,它還監控所有運行的task,一旦某個task失敗了,JobTracker就會自動重新開啟這個task,在大多數情況下這個task會被放在不同的節點上,當然,具體運行情況取決於重啟的預設值。每個Hadoop集群只有一個JobTracker,一般運行在集群的Master節點上。
TaskTracker
TaskTracker與負責存儲數據的DataNode相結合,其處理結構上也遵循主/從架構。JobTracker位於主節點,統領MapReduce工作,而TaskTracker位於從節點,獨立管理各自的task。每個TaskTracker負責獨立執行具體的task,而JobTracker負責分配task。雖然每個從節點上僅有唯一的一個TaskTracker,但是每個TaskTracker可以產生多個Java虛擬機(JVM),用於並行處理多個map以及reduce任務。TaskTracker的一個重要職責就是與JobTracker交互。如果IobTaskTracker無法準時地獲取TaskTracker提交的信息,JobTracker就判定TaskTracker已經崩潰,並將任務分配給其他的節點處理。
Hadoop的架構知識