HDFS snapshot操作実戦
4955 ワード
Hadoopは2.1.0版からHDFS SnapShotの機能を提供している.1つのsnapshot(スナップショット)は、すべてのファイルシステム、またはあるディレクトリのある時点でのミラーです.スナップショットは、次のシーンで非常に役立ちます.
ユーザの誤操作を防止する
:管理者は、スクロールで読み取り専用のスナップショットを周期的に設定できます.これにより、ファイルシステムに読み取り専用のスナップショットをいくつか作成できます.ユーザが誤ってファイルを削除した場合、そのファイルを含む最新の読み取り専用スナップショットを使用して返信できます.
バックアップ
:管理者は、必要に応じてファイルシステム全体、ディレクトリ、または単一のファイルをバックアップできます.管理者は、読み取り専用スナップショットを設定し、このスナップショットをフルバックアップの開始点として使用します.インクリメンタル・バックアップは、2つのスナップショットの違いを比較することによって生成できます.
試験/試験
:データ・セットでアプリケーションをテストしたいユーザー.一般的に、このデータセットのフルコピーをしないと、テストアプリケーションが元の本番データセットを上書き/破損し、非常に危険です.管理者は、ユーザーが使用をテストするための本番データセットのスナップショット(Read write)を設定できます.スナップショットの変更は、既存のデータセットには影響しません.
災害復旧
:読み取り専用スナップショットは、リモート・サイトにコピーして災害準備冗長性として一貫したポイント・イン・タイム・ミラーを作成するために使用できます.
次のコマンドで、あるパス(ルートディレクトリ/、あるディレクトリまたはファイル)にスナップショット機能をオンにすると、そのディレクトリはsnapshottableのディレクトリになります.snapshottableに格納snapshotsは最大65535個であり、このディレクトリに保存する.snapshot下.
次に、hdfs dfs-createSnapsshotという形式のsnapshotを作成します[snapshot names]
このスナップショットはすぐに作成されます.作成アクションは、スナップショットディレクトリに実際のデータが含まれていないため、ディレクトリに対応するInodeにスナップショットのラベルを付けるだけです.異なるスナップショット間ではハードリンク方式を採用し、同じデータブロックを参照するため、データブロックのコピー操作にも関与しません.ファイルの削除と追加では、スナップショットのブロックは変更されたブロックを指すため、読み書き性能に影響を与えることはありませんが、スナップショットで変更されたファイルとディレクトリのメタ情報を格納するためにnamenodeの一定の追加メモリが消費されます.参考:ビッグデータ実践:SnapshotによるHDFSファイルシステムのバックアップ
ユーザの誤操作を防止する
:管理者は、スクロールで読み取り専用のスナップショットを周期的に設定できます.これにより、ファイルシステムに読み取り専用のスナップショットをいくつか作成できます.ユーザが誤ってファイルを削除した場合、そのファイルを含む最新の読み取り専用スナップショットを使用して返信できます.
バックアップ
:管理者は、必要に応じてファイルシステム全体、ディレクトリ、または単一のファイルをバックアップできます.管理者は、読み取り専用スナップショットを設定し、このスナップショットをフルバックアップの開始点として使用します.インクリメンタル・バックアップは、2つのスナップショットの違いを比較することによって生成できます.
試験/試験
:データ・セットでアプリケーションをテストしたいユーザー.一般的に、このデータセットのフルコピーをしないと、テストアプリケーションが元の本番データセットを上書き/破損し、非常に危険です.管理者は、ユーザーが使用をテストするための本番データセットのスナップショット(Read write)を設定できます.スナップショットの変更は、既存のデータセットには影響しません.
災害復旧
:読み取り専用スナップショットは、リモート・サイトにコピーして災害準備冗長性として一貫したポイント・イン・タイム・ミラーを作成するために使用できます.
次のコマンドで、あるパス(ルートディレクトリ/、あるディレクトリまたはファイル)にスナップショット機能をオンにすると、そのディレクトリはsnapshottableのディレクトリになります.snapshottableに格納snapshotsは最大65535個であり、このディレクトリに保存する.snapshot下.
hdfs dfsadmin -allowSnapshot /user/spark
Allowing snaphot on /user/spark succeeded
次に、hdfs dfs-createSnapsshotという形式のsnapshotを作成します[snapshot names]
hdfs dfs -createSnapshot /user/spark s0
Created snapshot /user/spark/.snapshot/s0
このスナップショットはすぐに作成されます.作成アクションは、スナップショットディレクトリに実際のデータが含まれていないため、ディレクトリに対応するInodeにスナップショットのラベルを付けるだけです.異なるスナップショット間ではハードリンク方式を採用し、同じデータブロックを参照するため、データブロックのコピー操作にも関与しません.ファイルの削除と追加では、スナップショットのブロックは変更されたブロックを指すため、読み書き性能に影響を与えることはありませんが、スナップショットで変更されたファイルとディレクトリのメタ情報を格納するためにnamenodeの一定の追加メモリが消費されます.参考:ビッグデータ実践:SnapshotによるHDFSファイルシステムのバックアップ
# f1,f2,f3
hdfs dfs -touchz /user/spark/tmp/f{1,2,3}
# s1
hdfs dfs -createSnapshot /user/spark s1
Created snapshot /user/spark/.snapshot/s1
# s1 f1,f2,f3
hdfs dfs -ls -R /user/spark
drwxr-xr-x - hdfs supergroup 0 2014-12-20 10:45 /user/spark/tmp
-rw-r--r-- 3 hdfs supergroup 0 2014-12-20 10:45 /user/spark/tmp/f1
-rw-r--r-- 3 hdfs supergroup 0 2014-12-20 10:45 /user/spark/tmp/f2
-rw-r--r-- 3 hdfs supergroup 0 2014-12-20 10:45 /user/spark/tmp/f3
# f3
hdfs dfs -rm /user/spark/tmp/f3
14/12/20 10:46:09 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 1440 minutes, Emptier interval = 0 minutes.
Moved: 'hdfs://hdp01:8020/user/spark/tmp/f3' to trash at: hdfs://hdp01:8020/user/hdfs/.Trash/Current
# , f3, s1 f3 。 , s1 f3 。
hdfs dfs -ls -R /user/spark/.snapshot
drwxr-xr-x - hdfs supergroup 0 2014-12-20 10:28 /user/spark/.snapshot/s0
drwxr-xr-x - hdfs supergroup 0 2014-12-20 10:45 /user/spark/.snapshot/s0/tmp
drwxr-xr-x - hdfs supergroup 0 2014-12-20 10:45 /user/spark/.snapshot/s1
drwxr-xr-x - hdfs supergroup 0 2014-12-20 10:45 /user/spark/.snapshot/s1/tmp
-rw-r--r-- 3 hdfs supergroup 0 2014-12-20 10:45 /user/spark/.snapshot/s1/tmp/f1
-rw-r--r-- 3 hdfs supergroup 0 2014-12-20 10:45 /user/spark/.snapshot/s1/tmp/f2
-rw-r--r-- 3 hdfs supergroup 0 2014-12-20 10:45 /user/spark/.snapshot/s1/tmp/f3
hdfs dfs -ls -R /user/spark/
drwxr-xr-x - hdfs supergroup 0 2014-12-20 10:46 /user/spark/tmp
-rw-r--r-- 3 hdfs supergroup 0 2014-12-20 10:45 /user/spark/tmp/f1
-rw-r--r-- 3 hdfs supergroup 0 2014-12-20 10:45 /user/spark/tmp/f2
#RO , RW =。=
hdfs dfs -touchz /user/spark/.snapshot/s1/f4
touchz: Modification on a read-only snapshot is disallowed
さらに、一般的なコマンドもいくつかあります.
(1)
.snapshot名の変更:hdfs dfs-renameSnapshot
たとえば、s 0をs_に変更します.init hdfs dfs -renameSnapshot /user/spark s0 s_init
hdfs dfs -ls /user/spark/.snapshot
Found 2 items
drwxr-xr-x - hdfs supergroup 0 2014-12-20 10:45 /user/spark/.snapshot/s1
drwxr-xr-x - hdfs supergroup 0 2014-12-20 10:28 /user/spark/.snapshot/s_init
(2)
.snapshottableのディレクトリをhdfs lsSnapshottableDirでリストするhdfs lsSnapshottableDir
drwxr-xr-x 0 hdfs supergroup 0 2014-12-20 10:45 2 65536 /user/spark
(3). 2つのスナップショットの違いを比較:hdfs snapshotDiffhdfs snapshotDiff /user/spark s_init s1
Difference between snapshot s_init and snapshot s1 under directory /user/spark:
M ./tmp
+ ./tmp/f1
+ ./tmp/f2
+ ./tmp/f3
(4). スナップショットを削除するにはhdfs dfs -deleteSnaphost
hdfs dfs -deleteSnapshot /user/spark s_init
(5). Snapsshotsを閉じます.hdfs dfsadmin -disallowSnapshot
hdfs dfsadmin -disallowSnapshot /user/spark
Snapshotでは、スケジュール・タスクに従って、一定時間間隔(毎日など)でファイル・スナップショットを作成し、期限切れのファイル・スナップショットを削除して、ビジネス・エラーによるデータ損失を低減できます.スナップショットの操作は外部バックアップのオーバーヘッドよりはるかに低く、HDFSシステムをバックアップする最も一般的な方法として使用できます.
hdfs dfs -renameSnapshot /user/spark s0 s_init
hdfs dfs -ls /user/spark/.snapshot
Found 2 items
drwxr-xr-x - hdfs supergroup 0 2014-12-20 10:45 /user/spark/.snapshot/s1
drwxr-xr-x - hdfs supergroup 0 2014-12-20 10:28 /user/spark/.snapshot/s_init
hdfs lsSnapshottableDir
drwxr-xr-x 0 hdfs supergroup 0 2014-12-20 10:45 2 65536 /user/spark
hdfs snapshotDiff /user/spark s_init s1
Difference between snapshot s_init and snapshot s1 under directory /user/spark:
M ./tmp
+ ./tmp/f1
+ ./tmp/f2
+ ./tmp/f3
hdfs dfs -deleteSnapshot /user/spark s_init
hdfs dfsadmin -disallowSnapshot /user/spark