一、HDFS的由來:
本地系統:一個節點作為系統,以前數據是存放在本地文件系統上的,但本地文件系統存在兩個問題:1、本地節點存儲容量不夠大;2、本地節點會壞,數據不夠安全。這時,人們開始利用閑置的計算機組成了分布式系統,分布式系統是用計算機網絡將多個節點聯系起來組成一個邏輯上統一的系統。
分布式系統的三大特點:
1、物理分布性,可靠性好;
2、邏輯整體性:對內可以是零散的,但對外必須是一個整體;
3、節點自治性:可靠性高。
現在數據是存放在分布式文件系統上的,分布式文件系統的好處:1、理論上存儲容量無窮大,只要服務器數量足夠多,解決了硬盤容量不夠大的問題;2、通過水平復制實現數據備份功能,解決了硬盤會壞,數據不夠安全的問題,因此Google的GFS論文就這樣誕生了,Google公司大量使用普通PC機作為服務器,PC機上去掉機箱、外設和硬盤,Doug Cutting則借鑒了GFS論文, 實現了HDFS並貢獻了apache基金會。
二、HDFS的體系結構:
(1)Namenode:名稱節點
1、管理HDFS
2、接收客戶端的請求:上傳文件、下載文件等
3、創建日志(edits文件),記錄所有針對HDFS的操作,保存HDFS的最近操作
注:edits文件記錄自最后一次檢查點之后所有針對HDFS的操作,比如:增加文件、刪除文件等。
保存目錄:$HADOOP_HOME/tmp/dfs/name/current
HDFS提供了離線日志查看器(oev)查看edits文件,默認將edits文件轉化成xml文件:
hdfs oev -i edits文件 -o xml文件路徑
4、保存文件元信息,將內存中不常用的(采用LRU算法:最近最少使用算法)文件元信息保存到磁盤中形成fsimage文件。
注:文件元信息包含文件名、文件大小、文件存放路徑、數據塊個數、數據塊位置。
fsimage文件記錄自最后一次檢查點之前HDFS中所有文件的元信息(序列化信息),序列化的作用:進程間通信和永久存儲。
保存目錄:$HADOOP_HOME/tmp/dfs/name/current
HDFS提供了離線鏡像查看器(oiv)查看fsimage文件,默認將fsimage文件轉化成txt文件
hdfs oiv -i fsimage文件 -o txt文件路徑
(2)Datanode:數據節點
1、以數據塊為單位保存數據
hadoop1.x數據塊大小:64M
hadoop2.x數據塊大小:128M
hadoop3.x數據塊大小:256M
保存目錄:$HADOOP_HOME/tmp/dfs/data/current
(3)SecondaryNamenode:第二名稱節點
1、定期進行edits文件和fsimage文件的合並,更新fsimage文件
發生的時機:當HDFS發出檢查的時候:1、檢查周期:每隔一小時 2、檢查大小:edits文件是否達到64M
三、HDFS存在的問題:
1、Namenode單點故障
hadoop1.x:沒有解決方案
hadoop2.x:借助zookeeper實現hadoop的HA功能
2、Namenode壓力過大且內存有限,影響HDFS存儲效率
hadoop1.x:沒有解決方案
hadoop2.x:使用HDFS的聯盟實現Namenode的水平擴展
四、HDFS的高級特性:
1、HDFS的回收站(Recycle bin):默認是關閉的,可以通過修改core-site.xml文件打開回收站
<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>
注:一天后自動清空回收站,百度網盤十天后自動清空回收站
2、HDFS的快照(Snapshot):默認是禁用的,快照是某個目錄在某一時刻的鏡像。
快照的作用:
1、防止用戶錯誤操作
2、備份
3、試驗
4、災難恢復
啟用某個目錄的快照:hdfs dfsadmin -allowSnapshot /mydir
禁用某個目錄的快照:hdfs dfsadmin -disallowSnapshot /mydir
創建這個目錄的快照:hdfs dfs -createSnapshot mydir1_backup_01
刪除這個目錄的快照:hdfs dfs -deleteSnapshot mydir1_backup_01
重命名這個目錄的快照:hdfs dfs -reanameSnapshot mydir1_bakcup_01
(創建快照的本質:將目錄復制到當前目錄中的.snapshot隱藏目錄下)
3、HDFS的配額(quota):
1、名稱配額:規定某個目錄下存放文件的個數,實際個數n-1個
2、空間配額:規定某個目錄下存放文件的大小,最小配置128M
4、HDFS的安全模式:只讀模式
作用:保護數據塊的安全性
過程:當集群啟動時首先進入安全模式,檢查數據塊的副本率(默認副本率:0.999),當副本率不滿足要求時,少了:水平復制,多了:刪除冗余,副本率=實際副本數/設置副本數。
5、HDFS的權限管理:默認是開啟的,可以通過修改hdfs-site.xml文件關閉權限管理
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
作者:李金澤AllenLi,清華大學碩士研究生,研究方向:大數據和人工智能