檔案儲存是一種解決方案,可以將日益增加的儲存容量與運算容量分開。具有較高密度和較低運算能力的低成本儲存節點正變得越來越普遍,並可用作叢集中的冷儲存。根據政策,資料可以從熱儲存移動到冷儲存。在冷儲存中新增更多節點可以增加儲存,而與叢集中的運算容量無關。
異質儲存和檔案儲存提供的架構將 HDFS 架構概括化,以納入其他類型的儲存媒體,包括SSD和記憶體。使用者可以選擇將其資料儲存在 SSD 或記憶體中以獲得更好的效能。
異質儲存 (HDFS-2832)的第一階段將資料節點儲存模式從單一儲存 (可能對應到多個實體儲存媒體) 變更為儲存集合,其中每個儲存對應到一個實體儲存媒體。它也新增了儲存類型概念,DISK 和 SSD,其中 DISK 是預設儲存類型。
新增了一個新的儲存類型ARCHIVE,它具有高儲存密度 (PB 等級的儲存) 但運算能力較低,用於支援檔案儲存。
新增了另一個新的儲存類型RAM_DISK,用於支援在記憶體中寫入單一複本檔案。
引進了儲存政策這個新概念,以允許檔案根據儲存政策儲存在不同的儲存類型中。
我們有下列儲存政策
更正式地說,儲存政策包含下列欄位
當空間足夠時,區塊複本會根據 #3 中指定的儲存類型清單儲存。當清單 #3 中的某些儲存類型空間不足時,#4 和 #5 中指定的後備儲存類型清單會用於分別取代檔案建立和複製的空間不足儲存類型。
以下是典型的儲存政策表格。
政策 ID | 政策 名稱 | 區塊配置 (n 個複本) | 後備儲存 (用於建立) | 後備儲存 (用於複製) |
---|---|---|---|---|
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 (預設) | DISK:n | <none> | ARCHIVE |
5 | Warm | DISK:1,ARCHIVE:n-1 | ARCHIVE,DISK | ARCHIVE,DISK |
2 | Cold | ARCHIVE:n | <none> | <none> |
1 | 已提供 | PROVIDED:1,DISK:n-1 | PROVIDED,DISK | PROVIDED,DISK |
註 1:Lazy_Persist 政策僅適用於單一複本區塊。對於有多個複本的區塊,所有複本都將寫入 DISK,因為僅將其中一個複本寫入 RAM_DISK 並不會改善整體效能。
註 2:對於具有條紋配置的刪除編碼檔案,適用的儲存政策為 All_SSD、Hot、Cold。因此,如果使用者設定條紋 EC 檔案的政策為上述政策以外的政策,則在建立或移動區塊時,將不會遵循該政策。
建立檔案或目錄時,其儲存政策為未指定。可以使用「storagepolicies -setStoragePolicy
」指令指定儲存政策。檔案或目錄的有效儲存政策由下列規則解析。
如果檔案或目錄指定了儲存政策,則傳回該政策。
對於未指定的檔案或目錄,如果是根目錄,則傳回預設儲存政策。否則,傳回其父項目的有效儲存政策。
可以使用「storagepolicies -getStoragePolicy
」指令擷取有效儲存政策。
true
。[DISK]file:///grid/dn/disk0
[SSD]file:///grid/dn/ssd0
[ARCHIVE]file:///grid/dn/archive0
[RAM_DISK]file:///grid/dn/ram0
如果資料節點儲存位置沒有明確標記儲存類型,則其預設儲存類型為 DISK。
在現有的檔案/目錄上設定新的儲存政策會變更 Namespace 中的政策,但不會在儲存媒體之間實際移動區塊。下列 2 個選項允許使用者根據新的政策設定移動區塊。因此,一旦使用者變更/設定檔案/目錄上的新政策,使用者也應執行下列選項之一以達成所需的資料移動。請注意,無法同時執行這兩個選項。
當使用者變更檔案/目錄上的儲存政策時,使用者可以呼叫 HdfsAdmin
API satisfyStoragePolicy()
以根據新的政策設定移動區塊。在 Namenode 外部執行的 SPS 工具會定期掃描新政策設定與實際放置區塊之間的儲存不符情況。這只會追蹤使用者呼叫 satisfyStoragePolicy 的檔案/目錄。如果 SPS 辨識出某些區塊要為檔案移動,則會排程區塊移動工作至資料節點。如果移動過程中發生任何失敗,SPS 會透過傳送新的區塊移動工作重新嘗試。
SPS 可以作為 Namenode 外部的外部服務啟用,或在不重新啟動 Namenode 的情況下動態停用。
可以在 儲存政策滿足器 (SPS) (HDFS-10285) 找到詳細的設計文件
注意:當使用者在目錄上呼叫 satisfyStoragePolicy()
API 時,SPS 會掃描所有子目錄並考量所有檔案以滿足政策。
HdfsAdmin API:public void satisfyStoragePolicy(final Path path) throws IOException
參數
路徑 |
需要區塊儲存移動的路徑。 |
dfs.storage.policy.satisfier.mode - 用於啟用 NN 外部的外部服務或停用 SPS。支援下列字串值 - external
、none
。設定 external
值表示 SPS 已啟用,none
表示停用。預設值為 none
。
dfs.storage.policy.satisfier.recheck.timeout.millis - 重新檢查由資料節點處理的區塊儲存移動指令結果的逾時時間。
dfs.storage.policy.satisfier.self.retry.timeout.millis - 如果在設定的逾時時間內未從資料節點回報任何區塊移動結果,則重試的逾時時間。
新增一個新的資料移轉工具來封存資料。此工具類似於 Balancer。它會定期掃描 HDFS 中的檔案,以檢查區塊配置是否符合儲存政策。對於違反儲存政策的區塊,它會將複本移至不同的儲存類型,以符合儲存政策的要求。請注意,它會盡可能嘗試在同一個節點內移動區塊複本。如果無法這樣做(例如當節點沒有目標儲存類型時),它會透過網路將區塊複本複製到另一個節點。
指令
hdfs mover [-p <files/dirs> | -f <local file name>]
參數
-p <files/dirs> |
指定一個以空白分隔的 HDFS 檔案/目錄清單,以進行移轉。 |
-f <local file> |
指定一個包含 HDFS 檔案/目錄清單的本機檔案,以進行移轉。 |
請注意,當 -p 和 -f 選項都省略時,預設路徑為根目錄。
StoragePolicySatisfier
和 Mover 工具
無法同時執行。如果 Mover 執行個體已觸發並執行中,SPS 將在啟動時停用。在這種情況下,管理員應確保 Mover 執行已完成,然後再次啟用外部 SPS 服務。同樣地,當 SPS 已啟用時,無法執行 Mover。如果管理員希望明確執行 Mover 工具,則應先停用 SPS,然後執行 Mover。請參閱指令部分,以瞭解如何動態啟用 NN 外部的外部服務或停用 SPS。
列出所有儲存政策。
指令
hdfs storagepolicies -listPolicies
參數:無。
設定檔案或目錄的儲存原則。
指令
hdfs storagepolicies -setStoragePolicy -path <path> -policy <policy>
參數
-path <path> |
指向目錄或檔案的路徑。 |
-policy <policy> |
儲存原則的名稱。 |
取消設定檔案或目錄的儲存原則。取消設定命令後,將套用最近祖先的儲存原則,如果祖先沒有任何原則,則將套用預設的儲存原則。
指令
hdfs storagepolicies -unsetStoragePolicy -path <path>
參數
-path <path> |
指向目錄或檔案的路徑。 |
取得檔案或目錄的儲存原則。
指令
hdfs storagepolicies -getStoragePolicy -path <path>
參數
-path <path> |
指向目錄或檔案的路徑。 |
根據檔案/目錄目前的儲存原則,排程區塊移動。
指令
hdfs storagepolicies -satisfyStoragePolicy -path <path>
參數
-path <path> |
指向目錄或檔案的路徑。 |
如果管理員想要在 Namenode 執行期間切換 SPS 功能的模式,他/她首先需要在設定檔 (hdfs-site.xml
) 中更新設定項目 dfs.storage.policy.satisfier.mode
的所需值 (外部或無),然後執行以下 Namenode 重新設定命令
hdfs dfsadmin -reconfig namenode host:ipc_port start
如果管理員想要啟動外部 sps,他/她首先需要在設定檔 (hdfs-site.xml
) 中使用 external
值設定屬性 dfs.storage.policy.satisfier.mode
,然後執行 Namenode 重新設定命令。請確保設定檔中的網路拓撲設定與 namenode 相同,此叢集將用於比對目標節點。之後,使用以下命令啟動外部 sps 服務
hdfs –daemon start sps