- Hadoop 2.X HDFS源碼剖析
- 徐鵬
- 1779字
- 2024-01-05 17:29:19
1.1.2 HDFS基本概念
了解了HDFS整體架構(gòu)后,我們再介紹HDFS中幾個(gè)比較重要的概念。
1.?dāng)?shù)據(jù)塊(Block)
HDFS中數(shù)據(jù)塊的概念與大部分Linux文件系統(tǒng)(ext2、ext3)的數(shù)據(jù)塊概念相同,HDFS文件是以數(shù)據(jù)塊的形式存儲的,數(shù)據(jù)塊是HDFS文件處理的最小單元。由于HDFS文件往往比較大,同時(shí)為了最小化尋址開銷,所以HDFS數(shù)據(jù)塊也更大,默認(rèn)是128MB。HDFS數(shù)據(jù)塊會以文件的形式存儲在數(shù)據(jù)節(jié)點(diǎn)的磁盤上。
在HDFS中,所有文件都會被切分成若干個(gè)數(shù)據(jù)塊分布在數(shù)據(jù)節(jié)點(diǎn)上存儲。同時(shí)由于HDFS會將同一個(gè)數(shù)據(jù)塊冗余備份保存到不同的數(shù)據(jù)節(jié)點(diǎn)上(一個(gè)數(shù)據(jù)塊默認(rèn)保存3份),所以數(shù)據(jù)塊的一個(gè)副本丟失了并不會影響這個(gè)數(shù)據(jù)塊的訪問。
在HDFS的讀和寫操作中,數(shù)據(jù)塊都是最小單元。在讀操作中,HDFS客戶端會首先到名字節(jié)點(diǎn)查找HDFS文件包含的數(shù)據(jù)塊的位置信息,然后根據(jù)數(shù)據(jù)塊的位置信息從數(shù)據(jù)節(jié)點(diǎn)讀取數(shù)據(jù)。而在寫操作中,HDFS客戶端也會首先從名字節(jié)點(diǎn)申請新的數(shù)據(jù)塊,然后根據(jù)新申請數(shù)據(jù)塊的位置信息建立數(shù)據(jù)流管道寫數(shù)據(jù)。
2.名字節(jié)點(diǎn)(Namenode)
HDFS是一個(gè)典型的Master/Slave結(jié)構(gòu)的分布式系統(tǒng),名字節(jié)點(diǎn)是HDFS主/從結(jié)構(gòu)中的主節(jié)點(diǎn)。名字節(jié)點(diǎn)管理著文件系統(tǒng)的命名空間(namespace),包括文件系統(tǒng)目錄樹、文件/目錄信息以及文件的數(shù)據(jù)塊索引,這些信息以兩個(gè)文件的形式永久保存在名字節(jié)點(diǎn)的本地磁盤上,即命名空間鏡像文件和編輯日志文件。同時(shí)名字節(jié)點(diǎn)還保存著數(shù)據(jù)塊與數(shù)據(jù)節(jié)點(diǎn)的對應(yīng)關(guān)系,這部分?jǐn)?shù)據(jù)并不保存在名字節(jié)點(diǎn)的本地磁盤上,而是在名字節(jié)點(diǎn)啟動時(shí)動態(tài)構(gòu)建的。HDFS客戶端會通過名字節(jié)點(diǎn)獲取上述信息,之后讀寫文件數(shù)據(jù)。
名字節(jié)點(diǎn)是HDFS中的單一故障點(diǎn),如果名字節(jié)點(diǎn)丟失元數(shù)據(jù)或者損壞,文件系統(tǒng)將出現(xiàn)錯(cuò)誤,甚至無法使用。為了解決名字節(jié)點(diǎn)的單點(diǎn)問題,Hadoop 2.X版本引入了名字節(jié)點(diǎn)高可用性(HA)的支持。在HA實(shí)現(xiàn)中,同一個(gè)HDFS集群中會配置兩個(gè)名字節(jié)點(diǎn)——活動名字節(jié)點(diǎn)和備用名字節(jié)點(diǎn)。活動名字節(jié)點(diǎn)的內(nèi)存元數(shù)據(jù)與備用名字節(jié)點(diǎn)是完全同步的,那么在活動名字節(jié)點(diǎn)發(fā)生故障而停止服務(wù)時(shí),備用名字節(jié)點(diǎn)可以立即切換為活動狀態(tài),而不影響HDFS集群的服務(wù)。
名字節(jié)點(diǎn)的內(nèi)存除了保存文件系統(tǒng)的命名空間外,還保存了文件系統(tǒng)中所有數(shù)據(jù)塊與數(shù)據(jù)節(jié)點(diǎn)的對應(yīng)關(guān)系,這意味著如果集群中文件數(shù)量過多時(shí),名字節(jié)點(diǎn)的內(nèi)存將成為限制系統(tǒng)橫向擴(kuò)展的瓶頸。為了解決這個(gè)問題,Hadoop 2.X版本引入了聯(lián)邦HDFS機(jī)制(HDFS Federation)。聯(lián)邦HDFS機(jī)制允許添加名字節(jié)點(diǎn)以實(shí)現(xiàn)命名空間的擴(kuò)展,其中每個(gè)名字節(jié)點(diǎn)都管理文件系統(tǒng)命名空間中的一部分,是一個(gè)獨(dú)立的命名空間卷(namespace volume)。命名空間卷之間是相互獨(dú)立的,兩兩之間并不相互通信,甚至其中一個(gè)名字節(jié)點(diǎn)失效了也不會影響由其他名字節(jié)點(diǎn)維護(hù)的命名空間的可用性。例如,一個(gè)名字節(jié)點(diǎn)可能管理/user目錄下的所有文件,而另一個(gè)名字節(jié)點(diǎn)可能管理/share目錄下的所有文件,這兩個(gè)名字節(jié)點(diǎn)獨(dú)立運(yùn)行,互不影響。
HDFS名字節(jié)點(diǎn)的相關(guān)內(nèi)容我們會在第3章中介紹,包括HDFS元數(shù)據(jù)的管理,以及名字節(jié)點(diǎn)的HA機(jī)制等內(nèi)容。而對于聯(lián)邦HDFS機(jī)制,由于更改較多的是Datanode部分的代碼,所以這部分內(nèi)容我們會在第4章中介紹,請讀者參考對應(yīng)章節(jié)學(xué)習(xí)名字節(jié)點(diǎn)的實(shí)現(xiàn)。
3.?dāng)?shù)據(jù)節(jié)點(diǎn)(Datanode)
數(shù)據(jù)節(jié)點(diǎn)是HDFS中的從節(jié)點(diǎn),數(shù)據(jù)節(jié)點(diǎn)會根據(jù)HDFS客戶端請求或者Namenode調(diào)度將新的數(shù)據(jù)塊寫入本地存儲,或者讀出本地存儲上保存的數(shù)據(jù)塊。
數(shù)據(jù)節(jié)點(diǎn)作為HDFS中的從節(jié)點(diǎn),會不斷地向名字節(jié)點(diǎn)發(fā)送心跳、數(shù)據(jù)塊匯報(bào)以及緩存匯報(bào),名字節(jié)點(diǎn)會通過心跳、數(shù)據(jù)塊匯報(bào)以及緩存匯報(bào)的響應(yīng)向數(shù)據(jù)節(jié)點(diǎn)發(fā)送指令,數(shù)據(jù)節(jié)點(diǎn)會執(zhí)行這些指令,例如創(chuàng)建、刪除或者復(fù)制數(shù)據(jù)等。
HDFS數(shù)據(jù)節(jié)點(diǎn)的相關(guān)內(nèi)容我們會在第4章中介紹。
4.客戶端
HDFS提供了多種客戶端接口供應(yīng)用程序以及用戶使用,包括命令行接口、瀏覽器接口以及代碼API接口。用戶通過這些接口可以很方便地使用HDFS,而不需要考慮HDFS的實(shí)現(xiàn)細(xì)節(jié)。
而這些HDFS客戶端接口的實(shí)現(xiàn)都是建立在DFSClient類的基礎(chǔ)上的,DFSClient類封裝了客戶端與HDFS其他節(jié)點(diǎn)間的復(fù)雜交互,我們會在第5章中介紹HDFS客戶端的相關(guān)內(nèi)容。
5.HDFS通信協(xié)議
HDFS作為一個(gè)分布式文件系統(tǒng),它的某些流程是非常復(fù)雜的(例如讀、寫文件等典型流程),常常涉及數(shù)據(jù)節(jié)點(diǎn)、名字節(jié)點(diǎn)和客戶端三者之間的配合、相互調(diào)用才能實(shí)現(xiàn)。為了降低節(jié)點(diǎn)間代碼的耦合性,提高單個(gè)節(jié)點(diǎn)代碼的內(nèi)聚性,HDFS將這些節(jié)點(diǎn)間的調(diào)用抽象成不同的接口。
HDFS節(jié)點(diǎn)間的接口主要有兩種類型。
■ Hadoop RPC接口:HDFS中基于Hadoop RPC框架實(shí)現(xiàn)的接口。
■ 流式接口:HDFS中基于TCP或者HTTP實(shí)現(xiàn)的接口。
由于HDFS通信協(xié)議部分內(nèi)容比較多,我們會單獨(dú)在本章的HDFS通信協(xié)議小節(jié)中介紹這兩部分內(nèi)容。
- 計(jì)算機(jī)網(wǎng)絡(luò)
- Learning Real-time Processing with Spark Streaming
- Flink SQL與DataStream入門、進(jìn)階與實(shí)戰(zhàn)
- 面向?qū)ο蟪绦蛟O(shè)計(jì)(Java版)
- Python High Performance Programming
- OpenCV 4計(jì)算機(jī)視覺項(xiàng)目實(shí)戰(zhàn)(原書第2版)
- Statistical Application Development with R and Python(Second Edition)
- Spring MVC+MyBatis開發(fā)從入門到項(xiàng)目實(shí)踐(超值版)
- 大話Java:程序設(shè)計(jì)從入門到精通
- Ext JS 4 Plugin and Extension Development
- Visual C++程序設(shè)計(jì)與項(xiàng)目實(shí)踐
- Java EE 8 and Angular
- PHP項(xiàng)目開發(fā)全程實(shí)錄(第4版)
- Spark技術(shù)內(nèi)幕:深入解析Spark內(nèi)核架構(gòu)設(shè)計(jì)與實(shí)現(xiàn)原理
- VMware vSphere 5.5 Cookbook