アーカイブストレージ、SSD & メモリ

概要

アーカイブストレージは、増大するストレージ容量を計算容量から分離するソリューションです。低計算能力で高密度かつ低コストのストレージを持つノードが利用可能になりつつあり、クラスタ内のコールドストレージとして使用できます。ポリシーに基づいて、ホットからコールドにデータを移動できます。コールドストレージにさらにノードを追加することで、クラスタ内の計算能力とは独立してストレージを拡張できます。

異種ストレージとアーカイブストレージによって提供されるフレームワークは、SSDメモリなどの他の種類のストレージメディアを含めるようにHDFSアーキテクチャを一般化します。ユーザーは、パフォーマンスを向上させるためにSSDまたはメモリにデータを格納することを選択できます。

ストレージタイプとストレージポリシー

ストレージタイプ: ARCHIVE、DISK、SSD、およびRAM_DISK

異種ストレージ(HDFS-2832)の最初のフェーズでは、データノードのストレージモデルを、複数の物理ストレージメディアに対応する単一のストレージから、物理ストレージメディアに対応する各ストレージのコレクションに変更しました。また、ストレージタイプの概念(DISKとSSD)を追加しました。DISKはデフォルトのストレージタイプです。

アーカイブストレージをサポートするために、高ストレージ密度(ペタバイトストレージ)ながら計算能力の低い新しいストレージタイプARCHIVEが追加されました。

メモリに単一レプリカファイルを書き込むことをサポートするために、別の新しいストレージタイプRAM_DISKが追加されました。

ストレージポリシー: Hot、Warm、Cold、All_SSD、One_SSD、Lazy_Persist、およびProvided

ストレージポリシーに従ってファイルを異なるストレージタイプに保存できるように、ストレージポリシーの新しい概念が導入されました。

次のストレージポリシーがあります

  • Hot - ストレージと計算の両方に対応。普及していて、まだ処理に使用されているデータは、このポリシーのままになります。ブロックがホットの場合、すべてのレプリカはDISKに保存されます。
  • Cold - 計算が制限されたストレージのみに対応。もはや使用されていないデータ、またはアーカイブが必要なデータは、ホットストレージからコールドストレージに移動されます。ブロックがコールドの場合、すべてのレプリカはARCHIVEに保存されます。
  • Warm - 部分的にホットで、部分的にコールド。ブロックがウォームの場合、そのレプリカの一部はDISKに保存され、残りのレプリカはARCHIVEに保存されます。
  • All_SSD - すべてのレプリカをSSDに保存する場合。
  • One_SSD - レプリカの1つをSSDに保存する場合。残りのレプリカはDISKに保存されます。
  • Lazy_Persist - メモリに単一レプリカのブロックを書き込む場合。レプリカは最初にRAM_DISKに書き込まれ、その後DISKに遅れて永続化されます。
  • Provided - 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 <なし> ARCHIVE
5 Warm DISK: 1、ARCHIVE: n-1 ARCHIVE、DISK ARCHIVE、DISK
2 Cold ARCHIVE: n <なし> <なし>
1 Provided PROVIDED: 1、DISK: n-1 PROVIDED、DISK PROVIDED、DISK

注1: Lazy_Persistポリシーは、単一レプリカブロックにのみ役立ちます。複数のレプリカを持つブロックの場合、レプリカの1つのみをRAM_DISKに書き込んでも全体のパフォーマンスは向上しないため、すべてのレプリカが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になります。

ストレージポリシーに基づいたデータ移動

既存のファイル/ディレクトリに新しいストレージポリシーを設定すると、名前空間のポリシーが変更されますが、ストレージメディア間でブロックが物理的に移動することはありません。次の2つのオプションを使用すると、ユーザーは新しいポリシーセットに基づいてブロックを移動できます。したがって、ユーザーがファイル/ディレクトリの新しいポリシーに変更/設定したら、目的のデータ移動を実現するために、次のいずれかのオプションも実行する必要があります。両方のオプションを同時に実行することはできません。

トレージリシーティスファイアー(SPS)

ユーザーがファイル/ディレクトリのストレージポリシーを変更した場合、ユーザーはHdfsAdmin APIのsatisfyStoragePolicy()を呼び出して、設定された新しいポリシーに従ってブロックを移動できます。ネームノードの外部で実行されるSPSツールは、新しいポリシーセットと物理ブロックの配置との間のストレージの不一致を定期的にスキャンします。これは、ユーザーがsatisfyStoragePolicyを呼び出したファイル/ディレクトリのみを追跡します。SPSがファイルに対して移動する必要のあるブロックを特定した場合、データノードへのブロック移動タスクをスケジュールします。移動に失敗した場合、SPSは新しいブロック移動タスクを送信して再試行します。

SPSは、ネームノードの外部の外部サービスとして有効にしたり、ネームノードを再起動せずに動的に無効にしたりできます。

詳細な設計ドキュメントは、Storage Policy Satisfier(SPS) (HDFS-10285)にあります。

  • : ユーザーがディレクトリに対してsatisfyStoragePolicy() APIを呼び出した場合、SPSはすべてのサブディレクトリをスキャンし、ポリシーを満足させるためにすべてのファイルを考慮します。

  • HdfsAdmin API : public void satisfyStoragePolicy(final Path path) throws IOException

  • 引数

path ブロックストレージの移動が必要なパス。

設定

  • dfs.storage.policy.satisfier.mode - NN外部の外部サービスを有効にするか、SPSを無効にするために使用されます。次の文字列値がサポートされています - external, noneexternal値を設定すると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 <ファイル/ディレクトリ> 移行するHDFSファイル/ディレクトリのスペース区切りリストを指定します。
-f <ローカルファイル> 移行するHDFSファイル/ディレクトリのリストを含むローカルファイルを指定します。

-pと-fの両方のオプションを省略した場合、デフォルトのパスはルートディレクトリであることに注意してください。

管理者向け注記

StoragePolicySatisfierMover toolを同時に実行することはできません。Moverインスタンスがすでにトリガーされて実行中の場合、SPSは起動時に無効になります。その場合、管理者はMoverの実行が完了してから、外部SPSサービスを再度有効にする必要があります。同様に、SPSがすでに有効になっている場合、Moverを実行することはできません。管理者が明示的にMoverツールを実行する場合は、最初にSPSを無効にしてからMoverを実行する必要があります。NN外部の外部サービスを有効にする方法、またはSPSを動的に無効にする方法については、コマンドセクションを参照してください。

ストレージポリシーコマンド

ストレージポリシーのリスト

すべてのストレージポリシーをリスト表示します。

  • コマンド

    hdfs storagepolicies -listPolicies
    
  • 引数:なし。

ストレージポリシーの設定

ファイルまたはディレクトリにストレージポリシーを設定します。

  • コマンド

    hdfs storagepolicies -setStoragePolicy -path <path> -policy <policy>
    
  • 引数

-path <パス> ディレクトリまたはファイルを参照するパス。
-policy <ポリシー> ストレージポリシーの名前。

ストレージポリシーの解除

ファイルまたはディレクトリのストレージポリシーを解除します。解除コマンドの後、最も近い祖先のストレージポリシーが適用され、祖先にポリシーがない場合は、デフォルトのストレージポリシーが適用されます。

  • コマンド

    hdfs storagepolicies -unsetStoragePolicy -path <path>
    
  • 引数

-path <パス> ディレクトリまたはファイルを参照するパス。

ストレージポリシーの取得

ファイルまたはディレクトリのストレージポリシーを取得します。

  • コマンド

    hdfs storagepolicies -getStoragePolicy -path <path>
    
  • 引数

-path <パス> ディレクトリまたはファイルを参照するパス。

ストレージポリシーの適用

ファイル/ディレクトリの現在のストレージポリシーに基づいて移動するブロックをスケジュールします。

  • コマンド

    hdfs storagepolicies -satisfyStoragePolicy -path <path>
    
  • 引数

-path <パス> ディレクトリまたはファイルを参照するパス。

ネームノードを再起動せずにNN外部の外部サービスを有効にするか、SPSを無効にする

管理者がネームノードの実行中にSPS機能のモードを切り替えたい場合は、まず設定ファイル(hdfs-site.xml)で設定項目dfs.storage.policy.satisfier.modeに目的の値(外部またはなし)を更新し、次のネームノードの再構成コマンドを実行する必要があります。

  • コマンド

    hdfs dfsadmin -reconfig namenode host:ipc_port start

外部SPSサービスの開始。

管理者が外部SPSを開始する場合は、最初に設定ファイル(hdfs-site.xml)でプロパティdfs.storage.policy.satisfier.modeexternal値で設定し、ネームノードの再構成コマンドを実行する必要があります。設定ファイルのネットワークトポロジ構成がネームノードと同じであることを確認してください。このクラスタはターゲットノードのマッチングに使用されます。この後、次のコマンドを使用して外部SPSサービスを開始します。

  • コマンド

    hdfs –daemon start sps