檔案儲存、SSD 和記憶體

簡介

檔案儲存是一種解決方案,可以將日益增加的儲存容量與運算容量分開。具有較高密度和較低運算能力的低成本儲存節點正變得越來越普遍,並可用作叢集中的冷儲存。根據政策,資料可以從熱儲存移動到冷儲存。在冷儲存中新增更多節點可以增加儲存,而與叢集中的運算容量無關。

異質儲存和檔案儲存提供的架構將 HDFS 架構概括化,以納入其他類型的儲存媒體,包括SSD記憶體。使用者可以選擇將其資料儲存在 SSD 或記憶體中以獲得更好的效能。

儲存類型和儲存政策

儲存類型:ARCHIVE、DISK、SSD 和 RAM_DISK

異質儲存 (HDFS-2832)的第一階段將資料節點儲存模式從單一儲存 (可能對應到多個實體儲存媒體) 變更為儲存集合,其中每個儲存對應到一個實體儲存媒體。它也新增了儲存類型概念,DISK 和 SSD,其中 DISK 是預設儲存類型。

新增了一個新的儲存類型ARCHIVE,它具有高儲存密度 (PB 等級的儲存) 但運算能力較低,用於支援檔案儲存。

新增了另一個新的儲存類型RAM_DISK,用於支援在記憶體中寫入單一複本檔案。

儲存政策:熱、溫、冷、全 SSD、單一 SSD、延遲持久化和提供

引進了儲存政策這個新概念,以允許檔案根據儲存政策儲存在不同的儲存類型中。

我們有下列儲存政策

  • - 同時用於儲存和運算。熱門且仍用於處理的資料將保留在此政策中。當一個區塊是熱的,所有複本都儲存在 DISK 中。
  • - 僅用於儲存,運算能力有限。不再使用的資料或需要封存的資料會從熱儲存移到冷儲存。當一個區塊是冷的,所有複本都儲存在 ARCHIVE 中。
  • - 部分熱,部分冷。當一個區塊是溫的,某些複本儲存在 DISK 中,其餘複本儲存在 ARCHIVE 中。
  • 全 SSD - 用於將所有複本儲存在 SSD 中。
  • 單一 SSD - 用於將其中一個複本儲存在 SSD 中。其餘複本儲存在 DISK 中。
  • 延遲持久化 - 用於在記憶體中寫入單一複本的區塊。複本會先寫入 RAM_DISK,然後延遲持久化到 DISK 中。
  • 提供 - 用於儲存在 HDFS 之外的資料。另請參閱 HDFS 提供的儲存

更正式地說,儲存政策包含下列欄位

  1. 政策 ID
  2. 政策名稱
  3. 區塊配置的儲存類型清單
  4. 檔案建立的後備儲存類型清單
  5. 複製的後備儲存類型清單

當空間足夠時,區塊複本會根據 #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」指令指定儲存政策。檔案或目錄的有效儲存政策由下列規則解析。

  1. 如果檔案或目錄指定了儲存政策,則傳回該政策。

  2. 對於未指定的檔案或目錄,如果是根目錄,則傳回預設儲存政策。否則,傳回其父項目的有效儲存政策。

可以使用「storagepolicies -getStoragePolicy」指令擷取有效儲存政策。

組態

  • dfs.storage.policy.enabled - 用於啟用/停用儲存政策功能。預設值為 true
  • dfs.datanode.data.dir - 在每個資料節點上,逗號分隔的儲存位置應標記其儲存類型。這允許儲存政策根據政策將區塊放置在不同的儲存類型上。例如
    1. DISK 上的資料節點儲存位置 /grid/dn/disk0 應設定為 [DISK]file:///grid/dn/disk0
    2. SSD 上的資料節點儲存位置 /grid/dn/ssd0 可以設定為 [SSD]file:///grid/dn/ssd0
    3. ARCHIVE 上的資料節點儲存位置 /grid/dn/archive0 應設定為 [ARCHIVE]file:///grid/dn/archive0
    4. RAM_DISK 上的資料節點儲存位置 /grid/dn/ram0 應設定為 [RAM_DISK]file:///grid/dn/ram0

    如果資料節點儲存位置沒有明確標記儲存類型,則其預設儲存類型為 DISK。

基於儲存政策的資料移動

在現有的檔案/目錄上設定新的儲存政策會變更 Namespace 中的政策,但不會在儲存媒體之間實際移動區塊。下列 2 個選項允許使用者根據新的政策設定移動區塊。因此,一旦使用者變更/設定檔案/目錄上的新政策,使用者也應執行下列選項之一以達成所需的資料移動。請注意,無法同時執行這兩個選項。

Storage Policy Satisfier (SPS)

當使用者變更檔案/目錄上的儲存政策時,使用者可以呼叫 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。支援下列字串值 - externalnone。設定 external 值表示 SPS 已啟用,none 表示停用。預設值為 none

  • dfs.storage.policy.satisfier.recheck.timeout.millis - 重新檢查由資料節點處理的區塊儲存移動指令結果的逾時時間。

  • dfs.storage.policy.satisfier.self.retry.timeout.millis - 如果在設定的逾時時間內未從資料節點回報任何區塊移動結果,則重試的逾時時間。

Mover - 一個新的資料移轉工具

新增一個新的資料移轉工具來封存資料。此工具類似於 Balancer。它會定期掃描 HDFS 中的檔案,以檢查區塊配置是否符合儲存政策。對於違反儲存政策的區塊,它會將複本移至不同的儲存類型,以符合儲存政策的要求。請注意,它會盡可能嘗試在同一個節點內移動區塊複本。如果無法這樣做(例如當節點沒有目標儲存類型時),它會透過網路將區塊複本複製到另一個節點。

  • 指令

    hdfs mover [-p <files/dirs> | -f <local file name>]
    
  • 參數

-p <files/dirs> 指定一個以空白分隔的 HDFS 檔案/目錄清單,以進行移轉。
-f <local file> 指定一個包含 HDFS 檔案/目錄清單的本機檔案,以進行移轉。

請注意,當 -p 和 -f 選項都省略時,預設路徑為根目錄。

管理員注意事項

StoragePolicySatisfierMover 工具 無法同時執行。如果 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> 指向目錄或檔案的路徑。

在 NN 外部啟用外部服務或在不重新啟動 Namenode 的情況下停用 SPS

如果管理員想要在 Namenode 執行期間切換 SPS 功能的模式,他/她首先需要在設定檔 (hdfs-site.xml) 中更新設定項目 dfs.storage.policy.satisfier.mode 的所需值 (外部或無),然後執行以下 Namenode 重新設定命令

啟動外部 SPS 服務。

如果管理員想要啟動外部 sps,他/她首先需要在設定檔 (hdfs-site.xml) 中使用 external 值設定屬性 dfs.storage.policy.satisfier.mode,然後執行 Namenode 重新設定命令。請確保設定檔中的網路拓撲設定與 namenode 相同,此叢集將用於比對目標節點。之後,使用以下命令啟動外部 sps 服務

  • 指令

    hdfs –daemon start sps