HDFS
HDFS設計基礎與目標:
冗餘:硬件錯誤是常態
流式數據訪問。即數據比量讀取而非隨機讀寫,Hadoop擅長做的是數據分析而不是事務處理。
大規模數據集
簡單一致性模型。爲了降低系統複雜程度,對文件採用一次性寫多多次讀的邏輯設置,即是文件一經寫入,關閉,再也不能修改。
程序採用“數據京近”原則分配節點執行。
OLTP:偶爾隨機性德讀寫
HDFS體系架構:
NameNode:
管理文件系統的命名空間;
記錄每個文件數據塊在各個Datanode上的位置和副本信息;
協調客戶端對文件的訪問;
記錄命名空間內的改動或空間本身屬性的改動;
Namenode使用事務日誌記錄HDFS元數據的變化;
使用映像文件存儲文件系統的命令空間,包括文件映射,文件屬性等;
DateNode
負責所在物理節點的存儲管理;
一次寫入,多次讀取(不能修改,不用考慮數據讀取一致性);
文件由數據塊組成,典型塊大小64MB;
數據塊儘量散佈到各個節點;
HDFS讀取數據流程
客戶端要訪問HDFS中一個文件;
首先從namenode獲得組成這個文件的數據塊位置列表;
根據列表知道存儲數據塊的datanode;
訪問datanode獲取數據;
Namenode並不參與數據實際傳輸;
HDFS的可靠性
冗餘副本策略
在hdfs-site.xml設置replication設置複製因子,指定副本數量;
複製因子:如果是1 沒有副本。副本數太多,空間利用,複製副本影響性能。
Datanode啓動時,遍歷本地文件系統,產生一份hdfs數據塊和本地文件的對應關係列表(塊報告blockreport)彙報給namenode;
機架策略
集羣一般放在不同機架上,機架間帶寬要比機架內帶寬要小;
HDFS的“機架感知”
一般在本機架存放一個副本,在其它機架再放別的副本,這樣可以防止機架失效時丟失數據,提高帶寬利用率;
心跳機制
Oracle: rack
Namenode週期性從datanode接收心跳信號和塊報告;
Namenode根據塊報告驗證元數據;
沒有按時發送心跳的datanode會被標記爲宕機,不會再給它任何I/O請求;
如果datanode失效造成副本數量下降,並且低於預先設置的閾值,namenode會檢測出這些數據塊,並在合適的時機進行重複制;
引發重新複製的原因還包括數據副本本身損壞、磁盤錯誤,複製因子被增大等;
安全模式
Namenode啓動時會先經過一個安全模式階段;
安全模式階段不會產生數據寫;
在此階段namenode收集各個datanode的報告,當數據塊達到最小副本以上時,會被認爲是安全的;
在一定比例(可設置)的數據塊被確定安全後,再過若干時間,安全模式結束;
當檢測到副本數不足的數據塊時,該塊會被複制直達到最小副本數;
校驗和:驗證數據是否是完整
在文件創立時,每個數據塊都會產生校驗和;
校驗和會作爲單獨一個隱藏文件保存在命名空間下;
客戶端獲取數據時可以檢查校驗和是否相同,從而發現數據塊是否損壞;
如果正在讀取的數據塊損壞,則可以繼續讀取其它副本;
回收 站
刪除文件時,其實是放入回收站,同windows回收站;
回收站裏的文件可以快速恢復;
可以設置一個時間閾值,當回收站裏文件的存放時間超過這個閾值時,就被徹底刪除,並且釋放佔用的數據塊;
core_site.xml文件中開啓功能:fs.trash.interval
說明:hadoop垃圾回收機制,每隔多長時間清理一次垃圾
value:1440
備註:默認值是0,不打開垃圾收回機制。刪除掉的文件將直接清除,不保存。如果設置了,則將保存到本地的.crash文件夾下
如果開啓回收站功能:
元數據保護
元數據包括映像文件和事務日誌;
是namenode的核心數據,可配置爲擁有多個副本;
快照
支持存儲某個時間點的映像,需要時可以使數據重返這個時間的狀態;