hadoop之儲存篇
目錄:
- 叢集規劃
- HDFS HA
- 冒煙測試
- 功能特性
叢集規劃:
- 負載型別
- 容量規劃
- 可擴充套件性
- 角色分離
- 管理節點
- Master節點
- Worker節點
- 邊緣節點
HDFS HA(高可用)
架構原理見下圖:
冒煙測試:
詳細說明參見之前的部落格:https://www.cnblogs.com/huxinga/p/9627084.html
功能特性:
- HDFS Balancer
- 快照 Snapshots
- 配額 Quota
- 許可權 ACLs
- 儲存策略
- 集中快取管理
- 機架感知
- Erasure Coding
- Memory as Storage
- Short-Circuit Local Reads
1,HDFS Balancer
balancer是當hdfs叢集中一些datanodes的儲存要寫滿了或者有空白的新節點加入叢集時,用於均衡hdfs叢集磁碟使用量的一個工具。
Hadoop的HDFS叢集非常容易出現機器與機器之間磁碟利用率不平衡的情況,比如叢集中新增新的資料節點。當HDFS出現不平衡狀況的時候,將引發很多問題,比如MR程式無法很好地利用本地計算的優勢,機器之間無法達到更好的網路頻寬使用率,機器磁碟無法利用等等。可見,保證HDFS中的資料平衡是非常重要的。在Hadoop中,包含一個Balancer程式,通過執行這個程式,可以使得HDFS叢集達到一個平衡的狀態
參考命令:
hdfs balancer hdfs dfsadmin [-setBalancerBandwidth <bandwidth in bytes per second>]
<property>
<name>dfs.datanode.balance.bandwidthPerSec</name>
<value>6250000</value>
</property>
2,快照 snapshots
HDFS快照是檔案系統的只讀時間點的副本。可以在檔案系統的子樹或整個檔案系統上拍攝快照。快照的一些常見⽤例是資料備份,防⽌使用者錯誤和災難恢復。
HDFS中可以對目錄建立Snapshot,建立之後不管後續目錄發生什麼變化,都可以通過snapshot找回原來的檔案和目錄結構。
實現原理:
實現上是通過在每個目標節點下面建立snapshot節點,後續任何子節點的變化都會同步記錄到snapshot上。例如刪除子節點下面的檔案,並不是直接檔案元資訊以及資料刪除,而是將他們移動到snapshot下面。這樣後續還能夠恢復回來。另外snapshot儲存是一個完全的現場,不僅是刪除的檔案還能找到,新建立的檔案也無法看到。後一種效果的實現是通過在snapshot中記錄哪些檔案是新建立的,檢視列表的時候將這些檔案排除在外。
參考命令:
# 為指定目錄開啟快照功能 hdfs dfsadmin -allowSnapshot <path> # 列出開啟了快照功能的目錄 hdfs lsSnapshottableDir # 建立快照 hdfs dfs -createSnapshot <path> [<snapshotName>] # ⽐較兩個快照之間的區別 hdfs snapshotDiff <path> <fromSnapshot> <toSnapshot> # 列出快照內的⽂檔案 hdfs dfs -ls /foo/.snapshot # 從快照中恢復資料。 此處使用了了preserve選項來保留時間戳、所有權、許可權、ACL 和 XAttrs擴充套件屬性 hdfs dfs -cp -ptopax /foo/.snapshot/s0/bar /tmp
例子分析:
我們通過一個例子來分析整個snapshot的實現細節:
1. 檔案目錄樹如下圖所示,並且我們已經通過命令啟動了a的snapshot功能,結構如下圖所示:
圖中.snapshot是虛擬節點,儲存了所有的snapshot列表,其中diff中還儲存當前節點下面的變化,一個snapshot對應於一個diff.要注意的是snapshot中可以被多個目錄的diff引用,後續會進行說明。
2. 當我們執行createSnapshot命令時,結果如下:
3. 當刪除檔案e的時候
不論是刪除一個檔案還是一個目錄,只要是直接子節點,都會將節點轉換為快照版本.例如e會變成INodeFileWithSnapshot,在a的DirectoryDiff中ChildDiff中deleted列表中將會包含e,而在a的正常節點下會被刪除。目錄節點的處理同樣。
4. 刪除孫子節點是的情況
處理這種節點的原則是:先將孫子節點轉變為Snapshot版本,然後將父節點變為snapshot版本,同時將孫子節點版本加入到直接父節點的diff列表中。為了能夠通過同一個snapshot找到當時的檔案,需要將新的diff指向到老的snapshot版本上。圖中d節點是INodeDirectoryWithSnapshot(不是INodeDiretorySnapshottable, 本身不允許在d上建立snapshot)
3,配額 Quata
Name Quotas :
Name Quota 是該目錄下所有檔案和目錄總的數量的硬限制。如果超出配額,檔案和目錄建立將失敗。配額為1會強制目錄保持為空。 重新命名後依然有效
Space Quotas :
Space Quota 是該目錄下所有檔案使用的位元組數的硬限制。如果配額不允許寫入完整塊,則塊分配將失敗。塊的每個副本都會計入配額。 最好設定空間大小為快的整數倍。空間配額為0時可以建立檔案,但不能向檔案中寫入內容,單位為BYTE。
儲存型別配額 :
儲存型別配額是該目錄中檔案使用特定儲存型別(SSD,DISK,ARCHIVE)的硬限制
參考命令:
hdfs dfsadmin -setQuota <N> <directory>...<directory> hdfs dfsadmin -clrQuota <directory>...<directory> hdfs dfsadmin -setSpaceQuota <N> <directory>...<directory> hdfs dfsadmin -clrSpaceQuota <directory>...<directory> hdfs dfsadmin -setSpaceQuota <N> -storageType <storagetype> <directory>...<directory> hdfs dfsadmin -clrSpaceQuota -storageType <storagetype> <directory>...<directory> hadoop fs -count -q [-h] [-v] [-t [comma-separated list of storagetypes]] <directory>...<directory
4,HDFS ACLs