HDFSスナップショットのメモ

HDFSのスナップショット。以前にHDFSスナップショットのブログを書きましたが、何点か自分用のメモを残しておきます。

HDFSのスナップショットを取得して削除する

現時点のディレクトリは下記の通り


$ hdfs dfs -ls -R /user/training/
drwxrwxrwx   - training supergroup          0 2016-07-12 19:12 /user/training/.Trash
drwxrwxrwx   - training supergroup          0 2016-08-09 01:40 /user/training/hoge
drwxrwxrwx   - training supergroup          0 2016-08-09 01:40 /user/training/hoge/fuga
-rw-rw-rw-   1 training supergroup        158 2016-08-09 01:40 /user/training/hoge/fuga/hosts
-rw-rw-rw-   1 training supergroup       1934 2016-08-09 01:40 /user/training/hoge/passwd

スナップショットを取得します。


$ hdfs dfs -createSnapshot hoge snap1
Created snapshot /user/training/hoge/.snapshot/snap1

スナップショットを確認します。普通の ls では見えませんが、.snapshot ディレクトリを直接見ることはできます。


$ hdfs dfs -ls hoge/
Found 2 items
drwxrwxrwx   - training supergroup          0 2016-08-09 01:40 hoge/fuga
-rw-rw-rw-   1 training supergroup       1934 2016-08-09 01:40 hoge/passwd
$ hdfs dfs -ls hoge/.snapshot
Found 1 items
drwxrwxrwx   - training supergroup          0 2016-08-09 01:41 hoge/.snapshot/snap1

スナップショットを取得したので、は以下のディレクトリを削除します。比較してみましょう。


$ hdfs dfs -rm -r hoge/fuga
Deleted hoge/fuga

$ hdfs snapshotDiff hoge snap1 .
Difference between snapshot snap1 and current directory under directory /user/training/hoge:
M    .
-    ./fuga

fugaディレクトリが削除されていますね。.snapshot以下を確認します。


$ hdfs dfs -ls hoge/.snapshot
Found 1 items
drwxrwxrwx   - training supergroup          0 2016-08-09 01:41 hoge/.snapshot/snap1
$ hdfs dfs -ls hoge/.snapshot/snap1
Found 2 items
drwxrwxrwx   - training supergroup          0 2016-08-09 01:40 hoge/.snapshot/snap1/fuga
-rw-rw-rw-   1 training supergroup       1934 2016-08-09 01:40 hoge/.snapshot/snap1/passwd

さて、スナップショットのあるディレクトリを削除してみましょう。


$ hdfs dfs -rm -r hoge
rm: The directory /user/training/hoge cannot be deleted since /user/training/hoge is snapshottable and already has snapshots

エラーになりました。HDFSのスーパーユーザー、hdfsで削除してみます。同じようにエラーになりますね。


$ sudo -u hdfs hdfs dfs -rm -r /user/training/hoge
rm: The directory /user/training/hoge cannot be deleted since /user/training/hoge is snapshottable and already has snapshots

まとめ

オペミスでHDFSのディレクトリを削除してしまうような経験をしたことがある方もいらっしゃるかと思いますが、HDFSのスナップショットを定期的に取得しておくことで最悪の事態は回避することができるかもしれませんね。