HDFS前言
HDFS:Hadoop Distributed File System ,Hadoop分散式檔案系統,主要用來解決海量資料的儲存問題
設計思想
1、分散均勻儲存 dfs.blocksize = 128M
2、備份冗餘儲存 dfs.replication = 3
在大資料系統中作用
為各類分散式運算框架(如:mapreduce,spark,tez,……)提供資料儲存服務。
重點概念
檔案切塊,副本存放,後設資料
HDFS的概念和特性
概念
首先,它是一個檔案系統,用於儲存檔案,通過統一的名稱空間——目錄樹來定位檔案
其次,它是分散式的,由很多伺服器聯合起來實現其功能,叢集中的伺服器有各自的角色;
重要特性
(1)HDFS中的檔案在物理上是分塊儲存(block),塊的大小可以通過配置引數( dfs.blocksize)來規定,預設大小在hadoop2.x版本中是128M,老版本中是64M
(2)HDFS檔案系統會給客戶端提供一個統一的抽象目錄樹,客戶端通過路徑來訪問檔案,形如:hdfs://namenode:port/dir-a/dir-b/dir-c/file.data
(3)目錄結構及檔案分塊資訊(後設資料)的管理由namenode節點承擔
——namenode是HDFS叢集主節點,負責維護整個hdfs檔案系統的目錄樹,以及每一個路徑(檔案)所對應的block塊資訊(block的id,及所在的datanode伺服器)
(4)檔案的各個block的儲存管理由datanode節點承擔
---- datanode是HDFS叢集從節點,每一個block都可以在多個datanode上儲存多個副本(副本數量也可以通過引數設定dfs.replication)
(5)HDFS是設計成適應一次寫入,多次讀出的場景,且不支援檔案的修改
圖解HDFS
通過上面的描述我們知道,hdfs很多特點:
儲存多個副本,且提供容錯機制,副本丟失或當機自動恢復(預設存3份)。
執行在廉價的機器上
適合大資料的處理。HDFS預設會將檔案分割成block,,在hadoop2.x以上版本預設128M為1個block。然後將block按鍵值對儲存在HDFS上,並將鍵值對的對映存到記憶體中。如果小檔案太多,那記憶體的負擔會很重。
如上圖所示,HDFS也是按照Master和Slave的結構。分NameNode、SecondaryNameNode、DataNode這幾個角色。
NameNode:是Master節點,是大領導。管理資料塊對映;處理客戶端的讀寫請求;配置副本策略;管理HDFS的名稱空間;
SecondaryNameNode:是一個小弟,分擔大哥namenode的工作量;是NameNode的冷備份;合併fsimage和fsedits然後再發給namenode。
DataNode:Slave節點,奴隸,幹活的。負責儲存client發來的資料塊block;執行資料塊的讀寫操作。
熱備份:b是a的熱備份,如果a壞掉。那麼b馬上執行代替a的工作。
冷備份:b是a的冷備份,如果a壞掉。那麼b不能馬上代替a工作。但是b上儲存a的一些資訊,減少a壞掉之後的損失。
fsimage:後設資料映象檔案(檔案系統的目錄樹。)
edits:後設資料的操作日誌(針對檔案系統做的修改操作記錄)
namenode記憶體中儲存的是=fsimage+edits。
SecondaryNameNode負責定時預設1小時,從namenode上,獲取fsimage和edits來進行合併,然後再傳送給namenode。減少namenode的工作量。
HDFS的侷限性
1)低延時資料訪問。在使用者互動性的應用中,應用需要在ms或者幾個s的時間內得到響應。由於HDFS為高吞吐率做了設計,也因此犧牲了快速響應。對於低延時的應用,可以考慮使用HBase或者Cassandra。
2)大量的小檔案。標準的HDFS資料塊的大小是64M,儲存小檔案並不會浪費實際的儲存空間,但是無疑會增加了在NameNode上的後設資料,大量的小檔案會影響整個叢集的效能。
前面我們知道,Btrfs為小檔案做了優化-inline file,對於小檔案有很好的空間優化和訪問時間優化。
3)多使用者寫入,修改檔案。HDFS的檔案只能有一個寫入者,而且寫操作只能在檔案結尾以追加的方式進行。它不支援多個寫入者,也不支援在檔案寫入後,對檔案的任意位置的修改。
但是在大資料領域,分析的是已經存在的資料,這些資料一旦產生就不會修改,因此,HDFS的這些特性和設計侷限也就很容易理解了。HDFS為大資料領域的資料分析,提供了非常重要而且十分基礎的檔案儲存功能。
HDFS保證可靠性的措施
1)冗餘備份
每個檔案儲存成一系列資料塊(Block)。為了容錯,檔案的所有資料塊都會有副本(副本數量即複製因子,課配置)(dfs.replication)
2)副本存放
採用機架感知(Rak-aware)的策略來改進資料的可靠性、高可用和網路頻寬的利用率
3)心跳檢測
NameNode週期性地從叢集中的每一個DataNode接受心跳包和塊報告,收到心跳包說明該DataNode工作正常
4)安全模式
系統啟動時,NameNode會進入一個安全模式。此時不會出現資料塊的寫操作。
5)資料完整性檢測
HDFS客戶端軟體實現了對HDFS檔案內容的校驗和(Checksum)檢查(dfs.bytes-per-checksum)。
單點故障(單點失效)問題
單點故障問題
如果NameNode失效,那麼客戶端或MapReduce作業均無法讀寫檢視檔案
解決方案
1)啟動一個擁有檔案系統後設資料的新NameNode(這個一般不採用,因為複製後設資料非常耗時間)
2)配置一對活動-備用(Active-Sandby)NameNode,活動NameNode失效時,備用NameNode立即接管,使用者不會有明顯中斷感覺。
共享編輯日誌檔案(藉助NFS、zookeeper等)
DataNode同時向兩個NameNode彙報資料塊資訊
客戶端採用特定機制處理 NameNode失效問題,該機制對使用者透明