柚子快報(bào)邀請(qǐng)碼778899分享:恢復(fù)HDFS上誤刪除的文件
柚子快報(bào)邀請(qǐng)碼778899分享:恢復(fù)HDFS上誤刪除的文件
1. 通過回收站恢復(fù)
HDFS 為我們提供了垃圾箱的功能,也就是說當(dāng)我們執(zhí)行 hadoop fs -rmr xxx 命令之后,文件并不是馬上被刪除,而是會(huì)被移動(dòng)到 執(zhí)行這個(gè)操作用戶的 .Trash 目錄下,等到一定的時(shí)間后才會(huì)執(zhí)行真正的刪除操作??聪旅娴睦樱?/p>
$ hadoop fs -rmr /user/iteblog/test.txt
Moved: 'hdfs://iteblogcluster/user/iteblog/test.txt' to trash at: hdfs://iteblogcluster/user/iteblog/.Trash/Current
$ hadoop fs -ls /user/iteblog/.Trash/Current/user/iteblog
-rw-r--r-- 3 iteblog iteblog 103 2017-05-15 17:24 /user/iteblog/.Trash/Current/user/iteblog/test.txt
$ hadoop fs -mv /user/iteblog/.Trash/Current/user/iteblog/test.txt /user/iteblog/
$ hadoop fs -ls /user/iteblog/test.txt
-rw-r--r-- 3 iteblog iteblog 103 2017-05-15 17:24 test.txt
從上面的例子中可以看出,在我們刪了 test.txt 文件之后,文件被移到 /user/iteblog/.Trash/Current/user/iteblog/test.txt 路徑下,如果這個(gè)操作屬于誤操作,我們則可以到回收站找回這個(gè)文件并直接 mv 回原來的目錄,即可恢復(fù)之前的數(shù)據(jù)。不過使用這個(gè)功能的前提是我們配置了 fs.trash.interval 參數(shù),默認(rèn)是 0,代表不啟用垃圾箱功能。
Number of minutes after which the checkpoint gets deleted. If zero, the trash feature is disabled. This option may
be configured both on the server and the client. If trash is disabled server side then the client side configuration
is checked. If trash is enabled on the server side then the value configured on the server is used and the client
configuration value is ignored.
上面的配置是說:文件會(huì)被刪除會(huì)保留到 .Trash 目錄下,時(shí)間為一天,超過這個(gè)時(shí)間,被刪除的文件就會(huì)真正被刪除。所以為了避免誤刪除操作,強(qiáng)烈建議開啟 HDFS 回收站功能。
2. 通過快照恢復(fù)
Hadoop 從 2.1.0 版本開始提供了 HDFS 快照(SnapShot)功能。一個(gè)快照是一個(gè)全部文件系統(tǒng)、或者某個(gè)目錄在某一時(shí)刻的鏡像。利用快照可以防止用戶錯(cuò)誤操作,管理員可以通過滾動(dòng)的方式周期性設(shè)置一個(gè)只讀的快照,這樣就可以在文件系統(tǒng)上有若干份只讀快照。如果用戶意外地刪除了一個(gè)文件,就可以使用包含該文件的最新只讀快照來進(jìn)行恢復(fù)。下面我們來實(shí)操說明如何利用快照恢復(fù)誤刪除的文件:
創(chuàng)建目錄和文件 $ hadoop fs -mkdir /user/iteblog/important/
$ echo "important data" | hadoop fs -put - /user/iteblog/important/important-file.txt
$ hadoop fs -cat /user/iteblog/important/important-file.txt
important data
? 在上面我們創(chuàng)建了/user/iteblog/important/目錄,里面有一個(gè)文件 important-file.txt ,假設(shè)這個(gè)文件是非常重要的。
創(chuàng)建快照 $ hadoop dfsadmin -allowSnapshot /user/iteblog/important
$ hadoop fs -createSnapshot /user/iteblog/important important-snapshot
現(xiàn)在我們已經(jīng)為 important 目錄創(chuàng)建了快照,名稱為 important-snapshot。 誤刪除操作 因?yàn)殚_啟了快照功能,我們無法刪除已經(jīng)創(chuàng)建快照的目錄(/user/iteblog/important),但是我們依然可以刪除這個(gè)目錄下的文件: $ hadoop fs -rm -r /user/iteblog/important/important-file.txt
? 現(xiàn)在這個(gè)重要的文件被我們誤刪除了!
恢復(fù)文件 由于我們開啟了快照,所以我們可以從快照中恢復(fù)這個(gè)文件,步驟如下: $ hadoop fs -ls /user/iteblog/important/.snapshot/
$ hadoop fs -cp /user/iteblog/important/.snapshot/important-snapshot/important-file.txt /user/iteblog/important/
$ hadoop fs -cat /user/iteblog/important/important-file.txt
important data
通過上面幾步,我們就恢復(fù)了誤刪除的重要文件。
3. 通過編輯日志恢復(fù)
如果你的 Hadoop 集群沒有開啟回收站功能,也沒有對(duì)重要的數(shù)據(jù)創(chuàng)建快照,這時(shí)候如果有人將一份非常重要的數(shù)據(jù)誤刪除了,那我們?nèi)绾位謴?fù)這些數(shù)據(jù)?答案是通過修改編輯日志,但是**通過這種方法不一定能恢復(fù)已經(jīng)被刪除的文件,或者只能恢復(fù)一部分被刪除的文件,也可能恢復(fù)全部誤刪除的數(shù)據(jù),這個(gè)和你的集群繁忙狀態(tài)有很大的關(guān)系。**而且通過這種方式恢復(fù)誤刪除的文件代價(jià)很高,風(fēng)險(xiǎn)很大,需要謹(jǐn)慎使用。下面介紹通過這種恢復(fù)刪除數(shù)據(jù)的步驟。
刪除文件 $ hadoop fs -rmr -skipTrash /user/iteblog/important-file.txt
由于上面刪除操作使用了 -skipTrash 參數(shù),這意味著這個(gè)文件會(huì)被直接刪除,并不會(huì)先放到回收站。 恢復(fù)數(shù)據(jù) NameNode 在收到刪除命令時(shí),會(huì)先將這個(gè)命令寫到編輯日志中,然后會(huì)告訴 DataNode 執(zhí)行真正的文件刪除操作。所以我們需要做的是立刻停止 NameNode 和 DataNode 節(jié)點(diǎn),阻止刪除命令的執(zhí)行。然后找到執(zhí)行 rmr 操作發(fā)生時(shí)間對(duì)應(yīng)的編輯日志,假設(shè)是 edits_inprogress_0000000000000001512,這個(gè)文件是二進(jìn)制的形式,我們需要通過 HDFS 自帶的命令將這個(gè)文件轉(zhuǎn)換成可讀的形式,如下: $ hdfs oev -i edits_inprogress_0000000000000001512 -o edits_inprogress_0000000000000001512.xml
上面執(zhí)行的結(jié)果是二進(jìn)制的編輯日志被轉(zhuǎn)換成我們?nèi)祟惪勺x的xml格式的文件,我們找到執(zhí)行刪除 important-file.txt 文件的命令記錄:
OP_DELETE 這個(gè)標(biāo)記就是刪除操作,我們將這個(gè)標(biāo)記修改成比較安全的操作(比如OP_SET_PERMISSIONS),如果這個(gè)命令是在最后,可以直接刪除,然后保存。再將修改后的編輯日志轉(zhuǎn)換成計(jì)算機(jī)能夠識(shí)別的格式: $ hdfs oev -i edits_inprogress_0000000000000001512.xml -o edits_inprogress_0000000000000001512 -p binary
最后啟動(dòng) NameNode 和 DataNode 節(jié)點(diǎn),至于文件是否能夠恢復(fù),就聽天由命了。
柚子快報(bào)邀請(qǐng)碼778899分享:恢復(fù)HDFS上誤刪除的文件
本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場(chǎng)。
轉(zhuǎn)載請(qǐng)注明,如有侵權(quán),聯(lián)系刪除。