一、Hadoop是什麼?
Hadoop是一個能夠對大量數據進行分佈式處理的軟件框架,實現了Google的MapReduce編程模型和框架,能夠把應用程序分割成許多的小的工作單元,並把這些單元放到任何集羣節點上執行。在MapReduce中,一個準備提交執行的應用程序稱爲“作業(job)”,而從一個作業劃分出 得、運行於各個計算節點的工作單元稱爲“任務(task)”。此外,Hadoop提供的分佈式文件系統(HDFS)主要負責各個節點的數據存儲,並實現了高吞吐率的數據讀寫。
二、Hadoop的主要模塊:
Hadoop框架的主要模塊包括如下:
- Hadoop Common
- Hadoop分佈式文件系統(HDFS)
- Hadoop YARN
- Hadoop MapReduce
雖然上述四個模塊構成了Hadoop的核心,不過還有其他幾個模塊。這些模塊包括:Ambari、Avro、Cassandra、Hive、 Pig、Oozie、Flume和Sqoop,它們進一步增強和擴展了Hadoop的功能。
三、(Master/Slave)主從架構:
Hadoop使用(Master/Slave)主從架構進行分佈式儲存和分佈式計算。Master負責分配和管理任務,Slave負責實際執行任務。
在分佈式存儲和分佈式計算方面,Hadoop都是用從/從(Master/Slave)架構。在一個配置完整的集羣上,想讓Hadoop這頭大象奔跑起來,需要在集羣中運行一系列後臺(deamon)程序。不同的後臺程序扮演不用的角色,這些角色由NameNode、DataNode、Secondary NameNode、JobTracker、TaskTracker組成。其中NameNode、Secondary NameNode、JobTracker運行在Master節點上,而在每個Slave節點上,部署一個DataNode和TaskTracker,以便 這個Slave服務器運行的數據處理程序能儘可能直接處理本機的數據。對Master節點需要特別說明的是,在小集羣中,Secondary NameNode可以屬於某個從節點;在大型集羣中,NameNode和JobTracker被分別部署在兩臺服務器上。
數據存取 - HDFS架構:
Master / Slave(主從結構) - 節點可以理解爲物理機器
- 主節點,只有一個: Namenode
- 從節點,有很多個: Datanodes
數據運算 - MapReduce架構:
主從結構
- 主節點,只有一個: JobTracker
- 從節點,有很多個: TaskTrackers
Hadoop集羣示意圖:
四、HDFS與MapReduce的設計思路:
HDFS:
將文件進行切塊處理,再通過文件信息服務器Namenode存放切塊的文件信息存放地址,實際存放數據的服務器Datanode存放切塊後的數據。
系統默認:每個片塊大小爲64M,以保證尋址速度;數據會寫入3個Datanode中,以保證更高的容錯性。
HDFS還設計了Secondary Namenode來更新Namenode,以避免日誌文件過大。
HDFS Client幫助Namenode對寫入讀取數據進行預處理,進行文件的分塊與發送讀取操作。Namenode負責爲數據任務尋址。
MapReduce:
通過JobClient生成任務運行文件,並在JobTracker進行調度指派TaskTracker完成任務。
JobTracker分爲把任務文件進行分解並派送到TaskTracker的程序JobinProgress和執行調度器的TaskScheduler。
JobinProgress把作業分解成Map計算和Reduce計算並放置到TaskTracker服務器中。
數據在Hadoop中的流程處理示意圖:
五、HDFS與MapReduce組件介紹:
HDFS:
HDFS Client:進行文件的分塊與文件的發送讀取。
Namespace image:記錄每個文件的存在位置信息。
Edit log:記錄每個文件的位置移動信息。
Namenode(Master):管理着每個文件中各個塊所在的數據節點的位置信息。
Secondary Namenode:更新並備份Namenode。
Datanode(Slave):記錄着服務器內所儲存的數據塊的列表。
Secondary Namenode:更新並備份Namenode。
MapReduce:
JobClient:用於把用戶的作業任務生成Job的運行包,並存放到HDFS中。
JobinProgress:把Job運行包分解成MapTask和ReduceTask並存放於TaskTracker中。
JobTracker(Master):進行調度管理TaskTracker執行任務。
TaskTracker(Slave):執行分配下來的Map計算或Reduce計算任務。