日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HDFS SnapShot原理

發布時間:2025/3/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HDFS SnapShot原理 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

【簡介】

HDFS快照簡單地說就是對某個文件夾進行備份,創建了快照的文件夾本身不能被刪除,但是文件夾里面的文件和文件夾都是可以被刪除的。在對一個文件夾創建快照之前,需先允許該文件夾可以創建快照
允許快照
hdfs dfsadmin -allowSnapshot <path>

創建快照
hdfs dfs -createSnapshot <path> [<snapshotName>]
其中snapshotName是快照名,可選參數,不填的話會自動生成一個快照名,命名規則類似:s20180118-174044.492,創建快照后,會在文件夾下看到.snapshot目錄,該目錄存放所有的快照

查看所有的snapshottable
hdfs lsSnapshottableDir

恢復快照
hdfs dfs -cp <snapshotpath> <path>

刪除快照
hdfs dfs -deleteSnapshot <path> <snapshotName>

取消快照
hdfs dfsadmin -disallowSnapshot <path>
取消快照之前,需先刪掉所有的快照

快照對比
hdfs snapshotDiff <path> <fromSnapshot> <toSnapshot>


HDFS中可以對目錄創建Snapshot,創建之后不管后續目錄發生什么變化,都可以通過snapshot找回原來的文件和目錄結構。
為了啟用這種功能,首先需要啟用目標目錄的snapshot功能,可以通過下面的命令來執行:
hdfs dfsadmin -allowSnapshot <path> 啟用snapshot功能后,并不會自動進行snapshot保存,還需要先創建snapshot, 通過下面的命令來執行:
hdfs dfs -createSnapshot <path> [<snapshotName>]
可以為相同的目錄創建多個snapshot, 不同的snapshot通過名字來區分,默認是syyyyMMdd-HHmmss.SSS,例如/storage/WALs/.snapshot/s20140515-084657.639
【實現原理】
實現上是通過在每個目標節點下面創建snapshot節點,后續任何子節點的變化都會同步記錄到snapshot上。例如刪除子節點下面的文件,并不是直接文件元信息以及數據刪除,而是將他們移動到snapshot下面。這樣后續還能夠恢復回來。另外snapshot保存是一個完全的現場,不僅是刪除的文件還能找到,新創建的文件也無法看到。后一種效果的實現是通過在snapshot中記錄哪些文件是新創建的,查看列表的時候將這些文件排除在外。
在HDFS中INode表示一個節點,其中INodeFile表示文件,INodeDirectory表示目錄。INodeFileWithSnapshot表示帶有快照的文件,INodeDirectoryWithSnapshot表示帶有快照的目錄, (INodeDirectorySnapshottable表示可以創建快照的目錄,INodeDirectoryWithSnapshot不能創建新的快照,只能將目錄的變化記錄到現有的快照里面)相關的類結構如下:
?
圖中紅線表示的是關鍵類的引用關系,其中最重要的是DirectoryDiffList,里面保存了一些快照和當前目錄的差別。每一個DirectoryDiff中包含快照以及兒子變化,是實現快照功能的核心。ChilderenDiff中created list保存的是從快照時間之后新創建的節點,deteled list保存的新刪除的節點。snapshot中的root節點保存了snapshot的name,可以通過這個找到對應的快照。
【例子分析】
我們通過一個例子來分析整個snapshot的實現細節:
1. 文件目錄樹如下圖所示,并且我們已經通過命令啟動了a的snapshot功能,結構如下圖所示:


圖中.snapshot是虛擬節點,保存了所有的snapshot列表,其中diff中還保存當前節點下面的變化,一個snapshot對應于一個diff.要注意的是snapshot中可以被多個目錄的diff引用,后續會進行說明。
2. 當我們執行createSnapshot命令時,結果如下:

?

?

3. 當刪除文件e的時候

不論是刪除一個文件還是一個目錄,只要是直接子節點,都會將節點轉換為快照版本.例如e會變成INodeFileWithSnapshot,在a的DirectoryDiff中ChildDiff中deleted列表中將會包含e,而在a的正常節點下會被刪除。目錄節點的處理同樣。

?

4. 刪除孫子節點是的情況

處理這種節點的原則是:先將孫子節點轉變為Snapshot版本,然后將父節點變為snapshot版本,同時將孫子節點版本加入到直接父節點的diff列表中。為了能夠通過同一個snapshot找到當時的文件,需要將新的diff指向到老的snapshot版本上。圖中d節點是INodeDirectoryWithSnapshot(不是INodeDiretorySnapshottable, 本身不允許在d上創建snapshot)

?

?

一、snapshot的定義:?
snapshot是hdfs的整個文件系統,或者某個目錄在某個時刻的鏡像。該鏡像并不會隨著源目錄的改變而進行動態的更新。?
二、使用snapshot可以解決的問題?
(1)防止用戶的誤操作?
管理員可以通過滾動的方式來對重要的目錄進行創建snapshot的操作,這樣在系統中就存在針對某個目錄的多個快照版本。當用戶誤刪除掉某個文件時,可以通過最新的snapshot來進行相關的恢復操作。?
(2)備份集群或者重要目錄?
管理員可以使用snapshot來進行整個集群,或者某些目錄、文件的備份。管理員以某個時刻的snapshot做為備份的起始結點,然后通過比較不同備份之間差異性,來進行增量備份。?
(3)在原始數據上進行測試或者實驗?
經常有業務部門需要在某些重要數據上不斷的進行某些測試或者實驗,某些程序的bug可能會直接將原始的數據破壞掉,所以為了防止這種情況的發生,管理員可以臨時的為用戶針對要操作的數據來創建一個snapshot,然后讓用戶在對應的snapshot上進行相關的實驗和測試,從而避免對原始數據的破壞。?
(4)災難的備份?
可以將集群某個時刻的snapshot拷貝到遠程的備份集群,從而實現遠程的災難備份。

三、與snapshot相關的主要操作:?
1、為某個目錄打開snapshot的功能?
sudo -u hdfs hdfs dfsadmin -allowSnapshot /tmp/important_dir?
2、查看已經開啟了snapshot的目錄列表?
sudo -u hdfs hdfs lsSnapshottableDir?
3、為開啟了snapshot功能的目錄創建一個snapshot?
sudo -u hdfs hdfs dfs -createSnapshot /tmp/important_dir important_dir_snapshot?
4、對開啟了snapshot功能的目錄執行刪除操作,會出現下面的錯誤提示,即不允許刪除已經開啟了snapshot功能的目錄?
sudo -u hdfs hdfs dfs -rmr /tmp/important_dir?
錯誤提示:?
rmr: Failed to move to trash: hdfs://ptmind-cluster/tmp/important_dir: The directory /tmp/important_dir cannot be deleted since /tmp/important_dir is snapshottable and already has snapshots?
5、刪除開啟了snapshot功能的目錄下的文件?
sudo -u hdfs hdfs dfs -rm /tmp/important_dir/important_file.txt?
文件被成功的刪除掉,那如果是誤刪除了此文件呢?該如何進行恢復呢?

6、恢復已經被誤刪除的文件?
查看.snapshot子目錄下,是否包含已經被刪除的文件?發現包含被誤刪除的文件。?
sudo -u hdfs hdfs dfs -ls /tmp/important_dir/.snapshot/important_dir_snapshot?
將誤刪除的文件從.snapshot子目錄拷貝到之前的目錄下?
sudo -u hdfs hdfs dfs -cp /tmp/important_dir/.snapshot/important_dir_snapshot/important_file.txt /tmp/important_dir?
至此,被誤刪除的文件被成功的恢復了

7、比較兩個snapshot之間的差異性?
重新創建一個snapshot?
sudo -u hdfs hdfs dfs -createSnapshot /tmp/important_dir important_dir_snapshot_2?
hdfs snapshotDiff /tmp/important_dir important_dir_snapshot important_dir_snapshot_2?
可以使用 “.”來代表目錄的當前最新狀態

結果的解釋:?
+ The file/directory has been created.?
- The file/directory has been deleted.?
M The file/directory has been modified.?
R The file/directory has been renamed.

其他相關操作:?
1、對snapshot進行重命名?
hdfs dfs -renameSnapshot?
2、刪除snapshot?
hdfs dfs -deleteSnapshot?
3、禁止某個目錄的snapshot特性?
hdfs dfsadmin -disallowSnapshot

注意:?
snapshot只是保存了某個目錄在某個時刻的快照,如果在執行完createSnapshot 的操作之后,又往之前的目錄下新添加了文件,那么此時在.snapshot目錄下并不會存在新添加的文件。

對于snapshot內部是如何工作的,會單獨的再寫一篇文章來進行說明。
?

?


?

總結

以上是生活随笔為你收集整理的HDFS SnapShot原理的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 无码播放一区二区三区 | 久久成人免费电影 | av最新网| 91麻豆精品国产91久久久更新时间 | 日韩在线一区视频 | 大胸喷奶水www视频妖精网站 | 国产精品一区二区免费看 | 国产精品久久久久久影视 | 男人天堂亚洲天堂 | 国产ts网站| 131mm少妇做爰视频 | 国产jjizz一区二区三区视频 | 在线免费a视频 | 在线黄色免费网站 | 新国产视频| 精品亚洲一区二区三区四区五区 | 公妇借种乱htp109cc | 揄拍自拍| 伊人久久99| jlzzjlzz亚洲日本少妇 | 日本一区视频在线 | 欧美天堂 | 日本中文字幕成人 | 久久婷婷丁香 | 国产在线观看成人 | 亚洲日本精品视频 | 国产吞精囗交免费视频 | 午夜三级在线 | 99久久精品免费视频 | 李宗瑞91在线正在播放 | 久久人人妻人人人人妻性色av | 波多野结衣中文字幕在线 | www.av网| 日日夜夜天天综合 | 国产成人av一区二区三区在线观看 | 91免费在线播放 | 综合爱爱网 | 日韩精品久久久久 | 天堂久久久久 | 精品国产一区二区三区性色 | 日日碰日日操 | 久久r视频 | 国产午夜精品一区二区三区四区 | 午夜影院免费视频 | 宅男av | 免费看色 | 青青草在线免费 | 黄色羞羞网站 | 影音先锋成人资源网站 | 天天操人人射 | 奇米在线观看 | 亚洲熟妇丰满大屁股熟妇 | 人妻 丝袜美腿 中文字幕 | 美女扒开腿让人桶爽 | 91粉色视频 | 日韩av资源在线观看 | av在线免费不卡 | 午夜67194 | 午夜在线精品偷拍 | 一区二区精品区 | 日韩欧美一区在线 | 青青操在线视频 | 特级淫片裸体免费看 | 男女猛烈无遮挡免费视频 | 青青草草视频 | 91九色网 | 日韩色道 | 欧美亚洲日本国产 | 国产日韩在线看 | 一本色道久久综合亚洲精品 | 91福利一区 | 97人人爽人人爽人人爽人人爽 | 国产精品美女久久久久久 | 成人综合区 | 99在线观看| 国产精品视频一二三 | 欧美午夜三级 | 国产一级二级三级在线观看 | 国产又黄又粗又猛又爽视频 | 成人免费av | 成年网站在线观看 | 野外吮她的花蒂高h在线观看 | av激情影院 | 一区二区在线观看视频 | 91精品视频免费看 | 日韩爆操 | 爱草视频 | 国产精品 日韩 | 一级黄色网 | 拔插拔插海外华人免费视频 | 五月婷婷一区二区三区 | 国产欧美一区二区在线 | 一区av在线 | 被黑人猛躁10次高潮视频 | 合欢视频在线观看 | 日韩有码中文字幕在线观看 | 久久久久久www | 日本91在线 | 老熟女重囗味hdxx69 |