HDFS設定のごみ箱と誤って削除されたデータ復旧



Hdfs Setting Recycle Bin



HDFSは、各ユーザーディレクトリにごみ箱ディレクトリを作成します。つまり、/ user / username / .Trash削除された各ファイルとディレクトリには、ごみ箱サイクル(fs.trash.interval)があります。このリサイクルサイクル中に、ファイルは実際にはごみ箱ディレクトリに移動され、ユーザーが手動で復元できます。リサイクルサイクルが到来すると、HDFSはこのファイル/ディレクトリを完全に削除します。
各ノードのcore-site.xmlで1日間構成されます。

fs.trash.interval 1440 minutes between trash checkpoints

HDFS内の特定の実装は、NameNodeでバックグラウンドスレッドEmptierを開くことです(デフォルトはorg.apache.hadoop.fs.TrashPolicyDefault.Emptierです。fs.trash.classnameを介してTrashPolicyクラスを指定することもできます)。このスレッドは特別です。管理および監視されます。システムのごみ箱の下にあるすべてのファイル/ディレクトリ。ライフサイクルを超えたスレッド/ディレクトリの場合、このスレッドはそれらを自動的に削除しますが、この管理は非常にきめ細かく行われます。または、ユーザーは手動でごみ箱を空にするか(hdfs dfs -expungeを使用)、rmを使用してごみ箱を空にすることができます。この時点で、ごみ箱操作はトリガーされなくなります。 Emptierは、fs.trash.interval分ごとにユーザーのごみ箱をクリアします。つまり、最初に各ユーザーのごみ箱ディレクトリを確認し、次に有効期間がfs.trash.intervalを超えるディレクトリを削除し、最後に現在保存されているファイル/ディレクトリのごみ箱ディレクトリ/user/username/.Trash/currentの名前をone /に変更します。ユーザー/ユーザー名/.Trash/yyMMddHHmm。つまり、理論的には、ごみ箱内のディレクトリはfs.trash.interval – 2 * fs.trash.intervalの時間間隔を保持します。
rmコマンドを使用する場合、ごみ箱を有効にしたts.trash.intervalパラメーターはバックグラウンドプロセスを再開しません。ただし、/ userディレクトリに対応するユーザーのホームディレクトリが必要です。そうでない場合、ディレクトリが作成されるため、エラーが報告されます。
rmr:ゴミ箱への移動に失敗しました: hdfs:// test1:9000 / tmp :アクセスが拒否されました:user = root、access = WRITE、inode =” / user”:hdfs:supergroup:drwxr-xr-x
削除に成功すると、mvはごみ箱ディレクトリに移動します。



hdfs dfs -rmr /tmp Moved: 'hdfs://test1:9000/tmp' to trash at: hdfs://test1:9000/user/hdfs/.Trash/Current hdfs dfs -ls -R /user/hdfs drwx------ - hdfs supergroup 0 2014-12-19 11:24 /user/hdfs/.Trash drwx------ - hdfs supergroup 0 2014-12-19 11:24 /user/hdfs/.Trash/Current drwxr-xr-x - hdfs supergroup 0 2014-12-19 11:16 /user/hdfs/.Trash/Current/tmp drwxr-xr-x - hdfs supergroup 0 2014-12-19 11:16 /user/hdfs/.Trash/Current/tmp/txt drwxr-xr-x - hdfs supergroup 0 2014-12-19 11:16 /user/hdfs/.Trash/Current/tmp/txt/hello -rw-r--r-- 3 hdfs supergroup 137 2014-12-18 11:05 /user/hdfs/hello.txt -rw-r--r-- 3 hdfs supergroup 137 2014-12-18 11:05 /user/hdfs/hello.txt.bak # directory: hdfs dfs -mv /user/hdfs/.Trash/Current/tmp / -bash-4.1$ hdfs dfs -ls -R /tmp drwxr-xr-x - hdfs supergroup 0 2014-12-19 11:16 /tmp/txt drwxr-xr-x - hdfs supergroup 0 2014-12-19 11:16 /tmp/txt/hello # Empty the recycle bin, in fact, immediately executed a checkpoint to clean up the trash. hdfs dfs -expunge /12/19 17:31:29 INFO fs.TrashPolicyDefault: Created trash checkpoint: /user/hdfs/.Trash/141219173129