アーカイブストレージは、増大するストレージ容量を計算容量から分離するソリューションです。低計算能力で高密度かつ低コストのストレージを持つノードが利用可能になりつつあり、クラスタ内のコールドストレージとして使用できます。ポリシーに基づいて、ホットからコールドにデータを移動できます。コールドストレージにさらにノードを追加することで、クラスタ内の計算能力とは独立してストレージを拡張できます。
異種ストレージとアーカイブストレージによって提供されるフレームワークは、SSDやメモリなどの他の種類のストレージメディアを含めるようにHDFSアーキテクチャを一般化します。ユーザーは、パフォーマンスを向上させるためにSSDまたはメモリにデータを格納することを選択できます。
異種ストレージ(HDFS-2832)の最初のフェーズでは、データノードのストレージモデルを、複数の物理ストレージメディアに対応する単一のストレージから、物理ストレージメディアに対応する各ストレージのコレクションに変更しました。また、ストレージタイプの概念(DISKとSSD)を追加しました。DISKはデフォルトのストレージタイプです。
アーカイブストレージをサポートするために、高ストレージ密度(ペタバイトストレージ)ながら計算能力の低い新しいストレージタイプARCHIVEが追加されました。
メモリに単一レプリカファイルを書き込むことをサポートするために、別の新しいストレージタイプ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 | <なし> | 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
」コマンドを使用して指定できます。ファイルまたはディレクトリの有効なストレージポリシーは、次のルールによって解決されます。
ファイルまたはディレクトリにストレージポリシーが指定されている場合は、それを返します。
未指定のファイルまたはディレクトリの場合、それがルートディレクトリの場合は、デフォルトのストレージポリシーを返します。それ以外の場合は、親の有効なストレージポリシーを返します。
有効なストレージポリシーは、「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になります。
既存のファイル/ディレクトリに新しいストレージポリシーを設定すると、名前空間のポリシーが変更されますが、ストレージメディア間でブロックが物理的に移動することはありません。次の2つのオプションを使用すると、ユーザーは新しいポリシーセットに基づいてブロックを移動できます。したがって、ユーザーがファイル/ディレクトリの新しいポリシーに変更/設定したら、目的のデータ移動を実現するために、次のいずれかのオプションも実行する必要があります。両方のオプションを同時に実行することはできません。
ユーザーがファイル/ディレクトリのストレージポリシーを変更した場合、ユーザーは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
, 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 <ファイル/ディレクトリ> |
移行するHDFSファイル/ディレクトリのスペース区切りリストを指定します。 |
-f <ローカルファイル> |
移行するHDFSファイル/ディレクトリのリストを含むローカルファイルを指定します。 |
-pと-fの両方のオプションを省略した場合、デフォルトのパスはルートディレクトリであることに注意してください。
StoragePolicySatisfier
とMover 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 <パス> |
ディレクトリまたはファイルを参照するパス。 |
管理者がネームノードの実行中にSPS機能のモードを切り替えたい場合は、まず設定ファイル(hdfs-site.xml
)で設定項目dfs.storage.policy.satisfier.mode
に目的の値(外部またはなし)を更新し、次のネームノードの再構成コマンドを実行する必要があります。
hdfs dfsadmin -reconfig namenode host:ipc_port start
管理者が外部SPSを開始する場合は、最初に設定ファイル(hdfs-site.xml
)でプロパティdfs.storage.policy.satisfier.mode
をexternal
値で設定し、ネームノードの再構成コマンドを実行する必要があります。設定ファイルのネットワークトポロジ構成がネームノードと同じであることを確認してください。このクラスタはターゲットノードのマッチングに使用されます。この後、次のコマンドを使用して外部SPSサービスを開始します。
hdfs –daemon start sps