歸檔存儲是一種將不斷增長的存儲容量與計算容量分離開來的解決方案。密度更高、存儲成本更低、計算能力更低的節點正在成為可用的、可以在集群中用作冷存儲。根據策略,可以將熱數據移到冷數據。增加節點到冷存儲中可以增加不依賴於集群計算容量的存儲容量。
異構存儲和歸檔存儲提供的框架對HDFS體系結構進行了概括,使其包含了SSD、內存等其他類型的存儲介質。用戶可以選擇將數據存儲在SSD或內存中以獲得更好的性能。
存儲類型和存儲策略
存儲類型: ARCHIVE,DISK,SSD 和 RAM _ DISK
異構存儲的第一階段(HDFS-2832)改變了datanode存儲模式,從可能對應於多個物理存儲介質的單個存儲器 轉變為 對應於一個物理存儲介質的多個存儲器 的集合。它還增加了存儲類型的概念,DISK 和 SSD,其中 DISK 是默認的存儲類型。
為了支持歸檔存儲,添加了一種新的存儲類型 ARCHIVE,它具有較高存儲密度(存儲容量 petabyte) ,但計算效率很低。
增加了另一種新的存儲類型 RAM _ DISK,以支持在內存中寫入單個副本文件。
存儲策略: Hot, Warm, Cold, All_SSD, One_SSD and Lazy_Persist
引入了存儲策略的新概念,以便根據存儲策略將文件存儲在不同的存儲類型中。
我們有以下存儲策略:
- Hot- 常用的數據保留在這個策略中。當一個塊處於熱狀態時,所有副本都存儲在 DISK 中
- Cold- 不再使用的數據或需要存檔的數據。當塊處於冷狀態時,所有副本都存儲在 ARCHIVE 中
- Warm- 當一個塊處於Warm狀態時,它的一些副本存儲在 DISK 中,其余的副本存儲在 ARCHIVE 中
- All_SSD- 所有副本存儲在SSD中
- One_SSD - 在 SSD 中存儲一個副本,其余副本存儲在 DISK 中
- Lazy_Persist- 在內存中存放只有一個副本的塊。block首先用 RAM _ DISK 寫入,然后延遲地保存在 DISK 中
更正式地說,存儲策略由以下字段組成:
- Policy ID
- Policy name
- 用於塊放置的存儲類型列表
- 后備存儲類型列表
- 用於復制后備存儲類型列表
當有足夠的空間時,塊副本將根據 3中指定的存儲類型列表進行存儲。當列表 3中的某些存儲類型空間不足時,分別使用列表 4和 5中指定的后備存儲類型列表替換文件創建和復制的空間不足存儲類型。
下面是一個典型的存儲策略表。
Policy ID | Policy Name | Block Placement (n replicas) | Fallback storages for creation | Fallback storages for replication |
---|---|---|---|---|
15 | Lazy_Persist | RAM_DISK: 1, DISK: n-1 | DISK | DISK |
12 | All_SSD | SSD: n | DISK | DISK |
10 | One_SSD | SSD: 1, DISK: n-1 | SSD, DISK | SSD, DISK |
7 | Hot (default) | DISK: n |
|
ARCHIVE |
5 | Warm | DISK: 1, ARCHIVE: n-1 | ARCHIVE, DISK | ARCHIVE, DISK |
2 | Cold | ARCHIVE: n |
|
|
注意1: Lazy _ persist 策略只對單個副本塊有用。對於具有多個副本的塊,所有副本都將寫入到 DISK,因為只將一個副本寫入 RAM _ DISK 並不會提高總體性能。
注2: 對於erasure coded文件,合適的存儲策略是 All _ ssd、 Hot、 Cold。因此,如果用戶為 erasure coded文件設置策略而不是上面提到的策略,那么在創建或移動塊時就不會遵循該策略。
存儲策略解決方案
創建文件或目錄時,不會指定其存儲策略。可以使用“storagepolicies -setStoragePolicy
” 命令指定存儲策略。
有效的存儲策略可以通過“storagepolicies -getStoragePolicy
”命令進行檢索。
配置
-
dfs.storage.policy.enabled - 啟用/禁用存儲策略特性。默認值為true.
-
dfs.datanode.data.dir - 在每個數據節點上,逗號分隔的存儲位置應標記為其存儲類型。這允許存儲策略根據策略將塊放置在不同的存儲類型上。例如:
- datanode的存儲路徑 /grid/dn/disk0 是DISK類型,應配置為:[DISK]file:///grid/dn/disk0
- datanode的存儲路徑 /grid/dn/ssd0 是SSD類型,應配置為:[ SSD ]file://grid/dn/ssd0
- datanode的存儲路徑 /grid/dn/archive0 是ARCHIVE類型,應配置為:[ ARCHIVE ]file://grid/dn/archive0
- datanode的存儲路徑 /grid/dn/ram0 是RAM_DISK類型,應配置為:[ RAM_DISK ]file://grid/dn/ram0
如果datanode存儲位置沒有顯式標記的存儲類型,則默認存儲類型為 DISK。
Mover-一種新的數據遷移工具
為歸檔數據添加了一個新的數據遷移工具。這個工具類似於平衡器。它定期掃描 HDFS 中的文件,以檢查塊放置是否滿足存儲策略。對於違反存儲策略的塊,它將副本移動到不同的存儲類型,以滿足存儲策略要求。請注意,只要有可能,它總是嘗試在同一節點內移動塊副本。如果這是不可能的(例如,當一個節點沒有目標存儲類型) ,那么它將通過網絡將塊副本復制到另一個節點。
-
命令:
hdfs mover [-p <files/dirs> | -f <local file name>]
-
Arguments:
-p <files/dirs> |
Specify a space separated list of HDFS files/dirs to migrate. |
-f <local file> |
Specify a local file containing a list of HDFS files/dirs to migrate. |
請注意,如果省略-p 和-f 選項,則默認路徑是根目錄。
存儲策略命令
存儲策略列表
列出所有的存儲策略。
-
命令:
hdfs storagepolicies -listPolicies
設置存儲策略
為文件或目錄設置存儲策略。
-
命令:
hdfs storagepolicies -setStoragePolicy -path <path> -policy <policy>
-
Arguments:
-path <path> |
The path referring to either a directory or a file. |
-policy <policy> |
The name of the storage policy. |
取消存儲策略
為文件或目錄取消存儲策略。在 unset 命令之后,將應用最近父目錄的存儲策略,如果對任何父節點沒有策略,則應用默認存儲策略。
-
命令:
hdfs storagepolicies -unsetStoragePolicy -path <path>
-
參數
path <path>
The path referring to either a directory or a file.
獲取存儲策略
獲取文件或目錄的存儲策略。
-
命令:
hdfs storagepolicies -getStoragePolicy -path <path>
-
參數:
-path <path>
The path referring to either a directory or a file.