Hadoop分布式文件系統(tǒng)(HDFS)被設計成適合運行在通用硬件(commodity hardware)上的分布式文件系統(tǒng)。它和現(xiàn)有的分布式文件系統(tǒng)有很多共同點。但同時,它和其他的分布式文件系統(tǒng)的區(qū)別也是很明顯的。HDFS是一個高度容錯性的系統(tǒng),適合部署在廉價的機器上。HDFS能提供高吞吐量的數(shù)據(jù)訪問,非常適合大規(guī)模數(shù)據(jù)集上的應用。HDFS放寬了一部分POSIX約束,來實現(xiàn)流式讀取文件系統(tǒng)數(shù)據(jù)的目的。HDFS在最開始是作為Apache Nutch搜索引擎項目的基礎架構(gòu)而開發(fā)的。HDFS是Apache Hadoop Core項目的一部分。
HDFS有著高容錯性(fault-tolerant)的特點,并且設計用來部署在低廉的(low-cost)硬件上。而且它提供高吞吐量(high throughput)來訪問應用程序的數(shù)據(jù),適合那些有著超大數(shù)據(jù)集(large data set)的應用程序。HDFS放寬了(relax)POSIX的要求(requirements)這樣可以實現(xiàn)流的形式訪問(streaming access)文件系統(tǒng)中的數(shù)據(jù)。
全稱 | Hadoop Distributed File System | 簡稱 | hdfs |
---|---|---|---|
實質(zhì) | 分布式文件系統(tǒng) | 作用 | 作為Apache Nutch的基礎架構(gòu) |
特點 | 高容錯性 | 適用 | 大規(guī)模數(shù)據(jù)集 |
HDFS是什么?
HDFS 全稱 Hadoop Distributed File System ,簡稱HDFS,是一個分布式文件系統(tǒng)。它是谷歌的GFS提出之后出現(xiàn)的另外一種文件系統(tǒng)。它有一定高度的容錯性,而且提供了高吞吐量的數(shù)據(jù)訪問,非常適合大規(guī)模數(shù)據(jù)集上的應用。HDFS 提供了一個高度容錯性和高吞吐量的海量數(shù)據(jù)存儲解決方案。
優(yōu)點
1、存儲超大文件
2、標準流式訪問:“一次寫入,多次讀取”
3、運行在廉價的商用機器集群上
不足
1、不能滿足低延遲的數(shù)據(jù)訪問
2、無法高效存儲大量小文件
3、暫時不支持多用戶寫入及隨意修改文件
HDFS概念理解
hdfs架構(gòu)圖如下:
1、文件塊(圖中1、2、3、4帶顏色的小正方形)
文件分成塊存儲(默認64M,如今版本是128是M),多臺計算機存儲。DateNode中存儲以數(shù)字編號的方塊(見上圖)用于備份,每個塊都會復制到幾臺機器上(默認3臺),如果一個塊不可用,可從其它地方讀取副本。副本是3,表示一共3處有該塊。如果配置文件中副本設置為 4 ,但是結(jié)果只有2臺datanode,最后副本還是2
1000個1M的小文件會占用1024個塊和1024個 inode,但是他只是占用1個塊中的1M,不會占用整個空間,不過由于inode存儲在NameNode的內(nèi)存里,如果NameNode內(nèi)存不足以存儲inode,那么就不能再存儲文件了、所以說HDFS并不適合存儲小文件,有時候還要將小文件合并為大文件。
顯示塊信息命令:
hdfs fsck / -files –blocks //列出根目錄下各個文件由哪些塊存儲。
//它只是從NameNode獲取信息,不與DateNode交互。
2、 NameNode和DataNode
NameNode(名字節(jié)點): 管理文件系統(tǒng)命名空間;維護文件系統(tǒng)樹內(nèi)所有文件和目錄,記錄每個文件在哪個DateNode的位置和副本信息,協(xié)調(diào)客戶端對文件的訪問。 以兩種文件格式存在:
fsimage_*:元數(shù)據(jù)鏡像文件,即系統(tǒng)的目錄樹,包括文件目錄和inodes元信息(文件名,文件大小,創(chuàng)建時間,備份級別,訪問權(quán)限,block的size,所有block的構(gòu)成),每個inode是hdfs的一個代表文件或者目錄的元數(shù)據(jù)。這個鏡像文件相當于hdfs的元數(shù)據(jù)額數(shù)據(jù)庫文件。
edits_*:編輯日志文件,也就是事務日志文件,也就是針對文件系統(tǒng)做的修改操作記錄,記錄元數(shù)據(jù)的變化,相當于操作日志文件。一個文件的創(chuàng)建,追加,移動等。 NameNode內(nèi)存中存儲的是=fsimage+edits 檢查點:NameNode啟動時,從磁盤中讀取上面兩種文件,然后把edits_*里面記錄的事務全部刷新到 fsimage_*中,這樣就截去了舊的edits_*事務日志,這個過程叫checkpoint。
上面文件在~/hadoop-2.6/dfs/name/current目錄下(在hdfs-site.xml) ,除此之外,還有VERSION(版本信息,包含文件系統(tǒng)唯一標識符)和seen_txid(事務管理,里面保存一個整數(shù),表示edits_*的尾數(shù))兩個文件。
DataNode(數(shù)據(jù)節(jié)點):存儲,檢索數(shù)據(jù)塊。定期向NameNode發(fā)送所存儲的塊的列表。存儲的塊大小是64M,并且盡量把數(shù)據(jù)塊分布不同的DateNode節(jié)點上。
上圖某文件被分成4塊,在多個DataNode中存儲,而且每塊都復制兩個備份,存儲在其它DataNode中。這些數(shù)據(jù)的存儲目錄/home/hduser/hadoop-2.6/dfs/data(dfs-site.xml中指定)。例如下面文件:/home/hduser/hadoop-2.6/dfs/data/current/BP-1111-ip-2222/current/finalized/subbdir0/sudir0,該目錄下的文件包括blk_{id}和blk_{id}.meta,前者是二進制格式的數(shù)據(jù)塊,后者是數(shù)據(jù)塊的元信息(版本信息,類型信息 )
DataNode負責處理文件系統(tǒng)客戶端的文件讀寫請求,并在NameNode的統(tǒng)一調(diào)度下進行數(shù)據(jù)的創(chuàng)建,刪除和復制工作。如果NameNode數(shù)據(jù)損壞,HDFS所有文件都不能訪問,為了保證高可用性,Hadoop對NameNode進行了補充,即Sencondary NameNode。
3、 Secondary NameNode結(jié)點
系統(tǒng)同步運行一個Secondary NameNode,也稱二級NameNode,周期的備份NameNode,它可以用來恢復NameNode。由于有一定的滯后,所以會帶來數(shù)據(jù)的損失。為了防止宕機,一般我們會把它放在另外一臺計算機。使用hdfs-site.xml中dfs.namenode.secondary.http-address屬性可以通過瀏覽器查看Secondary NameNode的運行狀態(tài)。 默認是1小時,從NameNode獲取fsimage和edits進行合并,然后再發(fā)送給namenode,減少namenode的工作量。
HDFS體系架構(gòu)
HDFS采用master/slave架構(gòu)。一個HDFS集群是由一個Namenode和一定數(shù)目的Datanodes組成。Namenode是一個中心服務器,負責管理文件系統(tǒng)的名字空間(namespace)以及客戶端對文件的訪問。集群中的Datanode一般是一個節(jié)點一個,負責管理它所在節(jié)點上的存儲。HDFS暴露了文件系統(tǒng)的名字空間,用戶能夠以文件的形式在上面存儲數(shù)據(jù)。從內(nèi)部看,一個文件其實被分成一個或多個數(shù)據(jù)塊,這些塊存儲在一組Datanode上。Namenode執(zhí)行文件系統(tǒng)的名字空間操作,比如打開、關閉、重命名文件或目錄。它也負責確定數(shù)據(jù)塊到具體Datanode節(jié)點的映射。Datanode負責處理文件系統(tǒng)客戶端的讀寫請求。在Namenode的統(tǒng)一調(diào)度下進行數(shù)據(jù)塊的創(chuàng)建、刪除和復制。 一次寫,多次讀取:一個文件一旦創(chuàng)建,寫入,關閉之后就不需要修改了。
讀寫流程如下: 讀流程:客戶端向NameNode請求訪問某個文件,NameNode返回該文件位置在哪個DataNode上,然后客戶端從DataNode上讀取數(shù)據(jù)。 寫流程:客戶端向NameNode發(fā)出寫文件寫請求,NameNode告訴客戶端向哪個DataNode寫文件,然后客戶端將文件寫入該DataNode節(jié)點,隨后該 DataNode將該文件自動復制到其它DataNode節(jié)點上,默認三份備份。
HDFS常見節(jié)點管理:1 節(jié)點添加 可擴展性是一個重要特征,往HDFS集群中添加一個節(jié)點步驟如下:
1) 對新節(jié)點進行系統(tǒng)配置(hostname,hosts,jdk,防火墻等)
2) 對新節(jié)點進行hadoop的安裝和配置,和其它DataNode一樣。
3) 在NameNode中修改~/hadoop-2.6/etc/hadoop/Slaves文件,加入新節(jié)點名稱。
4) 啟動(start-all.sh,或者start-dfs.sh,start-yarn.sh)
2 負載均衡 HDFS的數(shù)據(jù)在各個DataNode中的分布可能不均勻,尤其是DataNode出現(xiàn)故障或者新增節(jié)點時,采用下面命令可以重新平衡DataNode的數(shù)據(jù)塊分布: $start-balancer.sh
3 安全機制 由于NameNode統(tǒng)一調(diào)度,沒有它文件系統(tǒng)無法使用,采用下面兩種機制確保其安全:
1) 把NameNode存儲的元數(shù)據(jù)轉(zhuǎn)移到其它文件系統(tǒng)上。
2) 使用Secondary NameNode同步備份。
加米谷大數(shù)據(jù)是一家專注于大數(shù)據(jù)培訓的機構(gòu),提供個人培訓和企業(yè)內(nèi)訓;如果您是0基礎學習大數(shù)據(jù)或者轉(zhuǎn)行大數(shù)據(jù)行業(yè),歡迎實地了解考察!
本書以云計算與大數(shù)據(jù)基礎開篇,簡單介紹了分布式文件系統(tǒng)HDFS與NoSQL數(shù)據(jù)庫技術,重點對分布式計算框架MapReduce、Hadoop技術、云數(shù)據(jù)中心、大數(shù)據(jù)與數(shù)據(jù)挖掘技術進行了闡述。 2100433B