Hadoop架構的初略總結(1)
Hadoop是一個開源的分散式系統基礎架構,此架構可以幫助使用者可以在不瞭解分散式底層細節的情況下開發分散式程式。
首先我們要理清楚幾個問題。
1.我們為什麼需要Hadoop?
解:
簡單來說,我們每天上網瀏覽,上街購物,都會產生資料。我們處於一個資料量呈爆發式增長的時代。我們需要對這些資料進行分析處理,以獲得更多有價值的東西。而Hadoop應時代而生。其次我們應該比較瞭解傳統型關聯式資料庫跟Hadoop之間有何區別。這些在前面的Hadoop第二課我們都有所提到。
2.不難知道,現階段有Hadoop1.0和Hadoop2.0,那Hadoop2.0生態系統是有哪些組成的呢?
Hadoop2.0作為Hadoop1.0的升級版本,可以先大致瞭解下。
解:
用百度腦圖畫了個圖,便於更直觀的記憶瞭解。
3.在前面的問題中,我們瞭解了Hadoop2.0大致是由哪些組成的,那麼我們由此作為鋪墊來探究Hadoop1.0的大致工作流程。
解:
用ppt繪畫了個流程圖,如圖所示:
通過觀察流程圖,我們不難知道以下三點:
• 第一代Hadoop,由分散式檔案系統HDFS和分散式計算框架MapReduce組成
• HDFS由一個NameNode和多個DataNode 組成
• MapReduce由一個JobTracker和多個TaskTracker組成
引用某位前輩部落格中的話。即Hadoop通過HDFS既能夠儲存海量的資料,又能夠通過MapReduce實現分散式的一個計算,用一句話來概括Hadoop就是:Hadoop是適合大資料的分散式儲存與計算的一個平臺。
有了對整體結構的大致瞭解。下面介紹一下HDFS的體系結構。首先我們要知道HDFS採用了主從(Master/Slave)結構模型。何為主從結構?經查閱資料,有以下解釋:
HDFS採用的是基於Master/Slave主從架構的分散式檔案系統,一個HDFS叢集包含一個單獨的Master節點和多個Slave節點伺服器。這裡的一個單獨的Master節點的含義是HDFS系統中只存在一個邏輯上的Master元件。一個邏輯的Master節點可以包括兩臺物理主機,即兩臺Master伺服器、多臺Slave伺服器。一臺Master伺服器組成單NameNode叢集,兩臺Master伺服器組成雙NameNode叢集,並且同時被多個客戶端訪問,所有的這些機器通常都是普通的Linux機器,執行著使用者級別(user-level)的服務程式。
這裡需要提到的是 叢集的概念在Hadoop第二課中有所解釋。我的理解就是一個叢集是由若干計算機通過某種方式成為了一個整體!
簡單來說,一個HDFS叢集是有由一個NameNode和若干個DateNode組成,其中NameNode是主節點(Master節點),DateNode是從節點(Slave節點),每一個節點都是一臺普通的計算機。只不過在Hadoop2.0中,一個邏輯的Master節點是包含上面跑NameNode程式的兩臺伺服器。
這裡引入Client(客戶端),顧名思義,就是為客戶提供本地服務的程式。具體的我也不清楚。而HDFS是通過三個重要的角色來進行檔案系統的管理,NameNode,DateNode,Client。
接下來我們先進一步瞭解HDFS中NameNode,DateNode,SecondearyNameNode的作用。
(在Hadoop第二課中有相關講解,這裡進行一定歸納補充)
NameNode:
作為主伺服器,可以看作是分散式檔案系統中的管理者。
1) 主要負責管理檔案的名稱空間操作,比如開啟、關閉、重新命名檔案或目錄。叢集配置資訊和儲存塊的複製和客戶端對檔案的訪問操作等;
2) 它會將檔案系統的Metadata儲存到記憶體中,這些資訊包括檔案資訊、每一個檔案對應的檔案塊的資訊和每一個檔案塊在DataNode中的資訊等,也可以說,它負責檔案塊到具體DateNode的對映。
Ps:也就是說,NameNode管理著整個檔案系統的Metadata(後設資料),所謂後設資料資訊指定是除了資料本身之外涉及到檔案自身的相關資訊 ;其次,NameNode保管著檔案與Block塊(檔案塊)序列之間的對應關係以及Block塊與DataNode節點之間的對應關係 。檔案塊後面會進行解釋。
DateNode:
HDFS允許使用者以檔案的形式儲存資料。而檔案在HDFS底層被分割成了Block。DataNode是檔案儲存的基本單位,它將被分割的檔案塊儲存到本地檔案系統中,保留了所有Block的Metadata,同時週期性地將所有存在的Block資訊傳送給NameNode(心跳檢測 有問題的話用資料備份的方式來保證資料的安全性)。
值得注意的一點:在HDFS中,我們真實的資料是由DataNode來負責來儲存的,但是資料具體被儲存到了哪個DataNode節點等後設資料資訊則是由我們的NameNode來儲存的。
SecondearyNameNode:不是太瞭解,就是一個冷備份。具體的我相信後面的部落格中我會寫到。
最後,我們通過三個具體的操作來說明一下HDFS對資料是如何進行管理的。檔案寫入,檔案讀取,檔案塊複製。(吐槽一下這部分是書上的內容,有了前面知識點的鋪墊,可以有個理解。好難得打字…)
(1) 檔案寫入
1) Client向NameNode傳送檔案寫入的請求
2) NameNode根據檔案大小和檔案塊配置情況,返回給Client所管理的DateNode的資訊
3) Client將檔案劃分為多個Block,根據DataNode的地址資訊,按順序將其寫入到一個DataNode中
(2) 檔案讀取
1) Client向NameNode發起檔案讀取請求
2) NameNode返回檔案儲存的DataNode資訊
3) Client讀取檔案資訊
(3) 檔案塊複製
1) NameNode發現部分檔案的Block不符合最小複製數這一要求,或部分DataNode失效
2) 通知DataNode相互複製Block
3) DataNode開始直接相互複製
值得一提的是,檔案在內部被分為多個檔案塊,這些Block分散儲存在不同的DateNode上,每個Block還可以進行復制,一個Block會有三個備份,進而達到容錯容災的目的。
總結完HDFS後,我們下面介紹一下MapReduce的體系結構。
MapReduce的體系結構也是一個主從式的結構,主節點JobTracker只有一個,從節點TaskTracker有很多個。也就是說,MapReduce在Hadoop體系中,這一簡單易用的軟體框架(Map/Reduce框架)是有一個單獨執行在主節點的JobTracker和執行在每個叢集從節點的TackTracker共同組成的。
那麼JobTracker和TackTracker這兩個程式有何作用呢?
Hadoop中有一個作為主控的JobTracker,負責排程構成一個作業的所有任務。當一個Job被提交時,JobTracker接收到提交作業和其配置資訊後,就會將Map任務和Reduce任務分發給空閒的TaskTracker,讓這些任務併發執行,並負責監控任務的執行情況。而TaskTracker它必須執行於DataNode上,也就是說DataNode即是資料儲存點,也是計算節點。如果某一個TaskTracker出了故障,JobTracker會將其負責的任務交給另一個空閒的TaskTracker重新執行。
最後,我們來說說MapReduce程式設計模型的原理(先了解一下,有個印象):利用一個key/value對集合產生一個輸出的key/value對集合。MapReduce庫的使用者用兩個函式來表達這個計算:Map和Reduce。
好了,不早了。Hadoop架構的初略總結(2)會講解Hadoop2.0的框架,1.0和2.0的區別,儘可能的學習下YARN.YARN上課時聽得我一臉懵逼。
參考文獻: