HDFS snapshot操作实战
Hadoop从2.1.0版开始提供了HDFS SnapShot的功能。一个snapshot(快照)是一个全部文件系统、或者某个目录在某一时刻的镜像。快照在下面场景下是非常有用:
防止用户的错误操作:管理员可以通过以滚动的方式周期性设置一个只读的快照,这样就可以在文件系统上有若干份只读快照。如果用户意外地删除了一个文件,就可以使用包含该文件的最新只读快照来进行回复。
备份:管理员可以根据需求来备份整个文件系统,一个目录或者单一一个文件。管理员设置一个只读快照,并使用这个快照作为整个全量备份的开始点。增量备份可以通过比较两个快照的差异来产生。
试验/测试: 一个用户当想要在数据集上测试一个应用程序。一般情况下,如果不做该数据集的全量拷贝,测试应用程序会覆盖/损坏原来的生产数据集,这是非常危险的。管理员可以为用户设置一个生产数据集的快照(Read write)用于用户测试使用。在快照上的改变不会影响原有数据集。
灾难恢复:只读快照可以被用于创建一个一致的时间点镜像用于拷贝到远程站点作灾备冗余。
通过下面命令对某一个路径(根目录/,某一目录或者文件)开启快照功能,那么该目录就成为了一个snapshottable的目录。snapshottable下存储的snapshots 最多为65535个,保存在该目录的.snapshot下。
1
2
|
hdfs dfsadmin -allowSnapshot /user/spark
Allowing snaphot on /user/spark succeeded
|
下面创建一个snapshot,命令格式为hdfs dfs -createSnapsshot [snapshot names]
1
2
|
hdfs dfs -createSnapshot /user/spark s0
Created snapshot /user/spark/.snapshot/s0
|
该快照会被立即创建出来,创建动作仅仅是在目录对应的Inode上加个快照的标签,因为此时快照目录里不包含任何实际数据。不同的快照间采用硬链接的方式,引用相同的数据块,所以也不会涉及到数据块的拷贝操作。而对文件的删除和追加,快照中的块将会的指向所作的修改的块,所以也不会对读写性能有影响,但是会占用namenode一定的额外内存来存放快照中被修改的文件和目录的元信息。参考:大数据实践:通过Snapshot对HDFS文件系统进行备份
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
|
#创建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
1
2
3
4
5
|
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的目录
1
2
|
hdfs lsSnapshottableDir
drwxr-xr-x 0 hdfs supergroup 0 2014-12-20 10:45 2 65536 /user/spark
|
(3). 比较两个快照之间的差异:hdfs snapshotDiff
1
2
3
4
5
6
|
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
1
|
hdfs dfs -deleteSnapshot /user/spark s_init
|
(5). 关闭 Snapsshots: hdfs dfsadmin -disallowSnapshot
1
|
hdfs dfsadmin -disallowSnapshot /user/spark
|
通过Snapshot可以按照定时任务,按固定时间间隔(例如每天)的方式创建文件快照,并删除过期的文件快照,减少业务误操作造成的数据损失。快照的操作远低于外部备份开销,可作为我们备份HDFS系统最常用的方式。
HDFS snapshot操作实战的更多相关文章
- 005-Scala数组操作实战详解
005-Scala数组操作实战详解 Worksheet的使用 交互式命令执行平台 记得每次要保存才会出相应的结果 数组的基本操作 数组的下标是从0开始和Tuple不同 缓冲数组ArrayBuffer( ...
- Hadoop之HDFS文件操作常有两种方式(转载)
摘要:Hadoop之HDFS文件操作常有两种方式,命令行方式和JavaAPI方式.本文介绍如何利用这两种方式对HDFS文件进行操作. 关键词:HDFS文件 命令行 Java API HD ...
- hadoop的hdfs文件操作实现上传文件到hdfs
这篇文章主要介绍了使用hadoop的API对HDFS上的文件访问,其中包括上传文件到HDFS上.从HDFS上下载文件和删除HDFS上的文件,需要的朋友可以参考下hdfs文件操作操作示例,包括上传文件到 ...
- 用程序对hdfs进行操作。
调试加安装了半天,怎么也没有配置好怎么通过Eclipse直接连接hdfs,最后我还是打成一个jar包放到Linux虚拟机中运行的. 运行命令Java -jar XXX.jar. 当中对hdfs的操作 ...
- 第二章:Python基础の快速认识基本数据类型和操作实战
本课主题 字符串和操作实战 二进制操作实战 List 列表和操作实战 Tuple 元組和操作实战 Dict 字典和操作实战 作業需求 引言 这遍文章简单介绍了 Python 字符串和集合的方法和应用, ...
- 第三章:Python基础の函数和文件操作实战
本課主題 Set 集合和操作实战 函数介紹和操作实战 参数的深入介绍和操作实战 format 函数操作实战 lambda 表达式介绍 文件操作函数介紹和操作实战 本周作业 Set 集合和操作实战 Se ...
- 第四章:Python基础の快速认识內置函数和操作实战
本課主題 內置函数介紹和操作实战 装饰器介紹和操作实战 本周作业 內置函数介紹和操作实战 返回Boolean值的內置函数 all( ): 接受一個可以被迭代的對象,如果函数裡所有為真,才會真:有一個是 ...
- HDFS shell操作及HDFS Java API编程
HDFS shell操作及HDFS Java API编程 1.熟悉Hadoop文件结构. 2.进行HDFS shell操作. 3.掌握通过Hadoop Java API对HDFS操作. 4.了解Had ...
- Hadoop---Java-API对HDFS的操作
Java-API对HDFS的操作 哈哈哈哈,深夜来一波干货哦!!! Java-PAI对hdfs的操作,首先我们建一个maven项目,我主要说,我们可以通过Java代码来对HDFS的具体信息的打印,然后 ...
随机推荐
- IOS 错误 [UIWebView cut:]: unrecognized selector sent to instance
那在什么场景中会出现这种情况呢? 如果一个包含文字的输入元素有焦点,然后按钮的点击会导致输入失去焦点,然后接下来在输入时双按会重新得到焦点并从弹出bar中选择剪切复制粘贴,就会导致此error. 也就 ...
- day04关于MySqL—Android小白的学习笔记
Mysql入门 1. 数据库基本知识(了解) 1.1.数据库介绍 1.1.1.什么是数据库?数据库的作用是什么? 数据库就是存储数据的仓库,其本质是一个文件系统,数据按照特定的格式将数据存储起来,用户 ...
- discuz不能发表投票、附件上传等
如何开启和发表投票主题 本教程主要讲述如何开启和发表投票的帖子.具体的操作如下: 1.论坛后台 => 用户 => 用户组 => 详情 => 特殊主题 => 允许发起投票设 ...
- Linux使用mount挂载samba共享
# 挂载smb使用读写777权限sudo mount -t cifs -o "rw,dir_mode=0777,file_mode=0777,username=winuser,passwor ...
- JS 设计模式
1.单例模式:产生一个类的唯一实例 例如:我们在页面中添加遮罩层,每次只能有一个遮罩层存在,因此为单例模式. 在创建遮罩层之前判断是否已经存在,若没有存在,则创建. 这里使用闭包,将是mask变量封装 ...
- 关于自定义Dialog的一次折腾
<新手,自己的简单理解,勿喷,有更好建议欢迎提出> 1.在设置dialog布局上的时候 我需要做一个圆角的dialog,我像往常一样定义一个<shape>然后做为我的dia ...
- (转)iOS开发中邮箱,电话号码,身份证,密码,昵称正则表达式验证
之前看到觉得不错 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 ...
- bash获取properties文件资源
#!/bin/sh prop_value="" function getProperty() { file=$ prop_key=$ prop_value=`cat $file | ...
- CE 进程同步-事件
事件(event)分为有名的和无名的,使用有名事件的时候,在不同进程中创建的同名事件,其实就是同一个,这样就可以在不同的进程中使用了.两个进程里面都要创建事件,事件名要一致. //进程1 HANDLE ...
- ayase系列
[冒个泡]技能视觉效果の自定义 by ayase [11-09 V2.4]任务数量转换属性点的lua脚本 [335]瞎倒腾的item.dbc生成工具..