歡迎關注大資料和人工智能技術文章釋出的微信公衆号:清研學堂,在這裡你可以學到夜白(作者筆名)精心整理的筆記,讓我們每天進步一點點,讓優秀成為一種習慣!

一、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中所有檔案的元資訊(序列化資訊),序列化的作用:程序間通信和永久存儲。
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存儲效率
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檔案關閉權限管理
<name>dfs.permissions</name>
<value>false</value>
作者:李金澤AllenLi,清華大學在讀碩士,研究方向:大資料和人工智能