0

0

HDFS snapshot操作实战

php中文网

php中文网

发布时间:2016-06-07 16:41:27

|

1887人浏览过

|

来源于php中文网

原创

Hadoop从2.1.0版开始提供了HDFS SnapShot的功能。一个snapshot(快照)是一个全部文件系统、或者某个目录在某一时刻的镜像。快照在下面场景下是非常有用: 防止用户的错误操作 :管理员可以通过以滚动的方式周期性设置一个只读的快照,这样就可以在文件系统上

Hadoop从2.1.0版开始提供了HDFS SnapShot的功能。一个snapshot(快照)是一个全部文件系统、或者某个目录在某一时刻的镜像。快照在下面场景下是非常有用:
防止用户的错误操作:管理员可以通过以滚动的方式周期性设置一个只读的快照,这样就可以在文件系统上有若干份只读快照。如果用户意外地删除了一个文件,就可以使用包含该文件的最新只读快照来进行回复。
备份:管理员可以根据需求来备份整个文件系统,一个目录或者单一一个文件。管理员设置一个只读快照,并使用这个快照作为整个全量备份的开始点。增量备份可以通过比较两个快照的差异来产生。
试验/测试: 一个用户当想要在数据集上测试一个应用程序。一般情况下,如果不做该数据集的全量拷贝,测试应用程序会覆盖/损坏原来的生产数据集,这是非常危险的。管理员可以为用户设置一个生产数据集的快照(Read write)用于用户测试使用。在快照上的改变不会影响原有数据集。
灾难恢复:只读快照可以被用于创建一个一致的时间点镜像用于拷贝到远程站点作灾备冗余。
通过下面命令对某一个路径(根目录/,某一目录或者文件)开启快照功能,那么该目录就成为了一个snapshottable的目录。snapshottable下存储的snapshots 最多为65535个,保存在该目录的.snapshot下。

hdfs dfsadmin -allowSnapshot /user/spark
Allowing snaphot on /user/spark succeeded

下面创建一个snapshot,命令格式为hdfs dfs -createSnapsshot [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
例如:将s0修改为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). 通过hdfs lsSnapshottableDir 来列出snapshottable的目录

hdfs lsSnapshottableDir 
drwxr-xr-x 0 hdfs supergroup 0 2014-12-20 10:45 2 65536 /user/spark

(3). 比较两个快照之间的差异:hdfs snapshotDiff

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

(4). 删除快照:hdfs dfs -deleteSnaphost

hdfs dfs -deleteSnapshot  /user/spark s_init

(5). 关闭 Snapsshots: hdfs dfsadmin -disallowSnapshot

hdfs dfsadmin -disallowSnapshot /user/spark

通过Snapshot可以按照定时任务,按固定时间间隔(例如每天)的方式创建文件快照,并删除过期的文件快照,减少业务误操作造成的数据损失。快照的操作远低于外部备份开销,可作为我们备份HDFS系统最常用的方式。
^^

参考:
?https://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-hdfs/HdfsSnapshots.html

http://zh.hortonworks.com/blog/snapshots-for-hdfs/

相关专题

更多
菜鸟裹裹入口以及教程汇总
菜鸟裹裹入口以及教程汇总

本专题整合了菜鸟裹裹入口地址及教程分享,阅读专题下面的文章了解更多详细内容。

0

2026.01.22

Golang 性能分析与pprof调优实战
Golang 性能分析与pprof调优实战

本专题系统讲解 Golang 应用的性能分析与调优方法,重点覆盖 pprof 的使用方式,包括 CPU、内存、阻塞与 goroutine 分析,火焰图解读,常见性能瓶颈定位思路,以及在真实项目中进行针对性优化的实践技巧。通过案例讲解,帮助开发者掌握 用数据驱动的方式持续提升 Go 程序性能与稳定性。

9

2026.01.22

html编辑相关教程合集
html编辑相关教程合集

本专题整合了html编辑相关教程合集,阅读专题下面的文章了解更多详细内容。

56

2026.01.21

三角洲入口地址合集
三角洲入口地址合集

本专题整合了三角洲入口地址合集,阅读专题下面的文章了解更多详细内容。

51

2026.01.21

AO3中文版入口地址大全
AO3中文版入口地址大全

本专题整合了AO3中文版入口地址大全,阅读专题下面的的文章了解更多详细内容。

397

2026.01.21

妖精漫画入口地址合集
妖精漫画入口地址合集

本专题整合了妖精漫画入口地址合集,阅读专题下面的文章了解更多详细内容。

118

2026.01.21

java版本选择建议
java版本选择建议

本专题整合了java版本相关合集,阅读专题下面的文章了解更多详细内容。

3

2026.01.21

Java编译相关教程合集
Java编译相关教程合集

本专题整合了Java编译相关教程,阅读专题下面的文章了解更多详细内容。

16

2026.01.21

C++多线程相关合集
C++多线程相关合集

本专题整合了C++多线程相关教程,阅读专题下面的的文章了解更多详细内容。

11

2026.01.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
PostgreSQL 教程
PostgreSQL 教程

共48课时 | 7.6万人学习

Django 教程
Django 教程

共28课时 | 3.4万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 2.4万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号