1. 程式人生 > >Hadoop架構的初略總結(1)

Hadoop架構的初略總結(1)

安全 use 請求 參考 內存 文件系統 href 獲得 監控

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上課時聽得我一臉懵逼。

參考文獻:

http://blog.csdn.net/a2011480169/article/details/53647012

http://book.51cto.com/art/201504/473015.htm

Hadoop架構的初略總結(1)