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系统最常用的方式。

时间: 2024-11-08 19:45:41

HDFS snapshot操作实战的相关文章

大数据技术之_04_Hadoop学习_01_HDFS_HDFS概述+HDFS的Shell操作(开发重点)+HDFS客户端操作(开发重点)+HDFS的数据流(面试重点)+NameNode和SecondaryNameNode(面试开发重点)

第1章 HDFS概述1.1 HDFS产出背景及定义1.2 HDFS优缺点1.3 HDFS组成架构1.4 HDFS文件块大小(面试重点)第2章 HDFS的Shell操作(开发重点)第3章 HDFS客户端操作(开发重点)3.1 HDFS客户端环境准备3.2 HDFS的API操作3.2.1 HDFS文件上传(测试参数优先级)3.2.2 HDFS文件下载3.2.3 HDFS文件夹删除3.2.4 HDFS文件名更改3.2.5 HDFS文件详情查看3.2.6 HDFS文件和文件夹判断3.3 HDFS的I/O

Linux系统crond、rsync、打包备份数据操作实战

Linux系统crond.rsync.打包备份数据操作实战 前面介绍了系统中定时任务.rsync.打包等各种操作,同时也介绍了实际生产环境中的各类案例,今天我们结合这几种功能做一次实战(备份数据) 一:项目背景 某公司WEB服务器数据非常重要,但是如果硬件出现故障,数据就会丢失,人工备份比较费时费力,因些需要进行相关自动备份,并且要备份至指定的备份服务器上 具体备份内容有: 1.网站站点所有目录及相关文件 2.系统相关的配置文件 3.网站的访问日志文件 具体要求如下:(每天0点备份) 1.WEB

用程序对hdfs进行操作。

调试加安装了半天,怎么也没有配置好怎么通过Eclipse直接连接hdfs,最后我还是打成一个jar包放到Linux虚拟机中执行的. 执行命令Java -jar  XXX.jar. 其中对hdfs的操作比较简单,主要就FileSystem这一个类,这个东西搞懂了,你对通过程序进行对hdfs的操作自然而然的也就非常熟练了. 下面我简单的举一个简单的从hdfs上读取文件内容的例子.大家分享一下. package com.pzoom.hdfs; import java.io.BufferedInputS

Hadoop之HDFS文件操作

摘要:Hadoop之HDFS文件操作常有两种方式,命令行方式和JavaAPI方式.本文介绍如何利用这两种方式对HDFS文件进行操作. 关键词:HDFS文件    命令行     Java API HDFS是一种分布式文件系统,为MapReduce这种框架下的海量数据分布式处理而设计. Hadoop之HDFS文件操作常有两种方式,一种是命令行方式,即Hadoop提供了一套与Linux文件命令类似的命令行工具:另一种是JavaAPI,即利用Hadoop的Java库,采用编程的方式操作HDFS的文件.

Hadoop学习笔记0002——HDFS文件操作

  说明:Hadoop之HDFS文件操作常有两种方式,命令行方式和JavaAPI方式. 方式一:命令行方式 Hadoop文件操作命令形式为:hadoop fs -cmd <args> 说明:cmd是具体的文件操作命令,<args>是一组数目可变的参数. Hadoop最常用的文件操作命令,包括添加文件和目录.获取文件.删除文件等. 1 添加文件和目录 HDFS有一个默认工作目录/usr/$USER,其中$USER是你的登录用户名,作者的用户名是root.该目录不能自动创建,需要执行m

005-Scala数组操作实战详解

005-Scala数组操作实战详解 Worksheet的使用 交互式命令执行平台 记得每次要保存才会出相应的结果 数组的基本操作 数组的下标是从0开始和Tuple不同 缓冲数组ArrayBuffer(长度可变) 数组的进阶操作 多维数组 常用数组使用方法分析 1.可通过yield产生新的数组并赋值给变量 2.for循环中也同时可以添加if过滤器来过滤数据再产生新的数据 3.c.filter(_%2==0).Map(2*_)生产环境经常会使用的表达方法(重点) 4.数组和缓冲数组都是可以直接调用其

Hadoop学习笔记_5_分布式文件系统HDFS --shell操作

分布式文件系统HDFS --shell操作 分布式文件系统[Distributed File System]概述 数据量越来越多,在一个操作系统管辖的范围存不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,因此迫切需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统 . 分布式文件系统特点: 是一种允许文件通过网络在多台主机上分享的文件系统,可让多机器上的多用户分享文件和存储空间. 通透性.让实际上是通过网络来访问文件的动作,由程序与用户看来,就像是访问本地的磁盘一般

HDFS简单介绍及用C语言訪问HDFS接口操作实践

一.概述 近年来,大数据技术如火如荼,怎样存储海量数据也成了当今的热点和难点问题,而HDFS分布式文件系统作为Hadoop项目的分布式存储基础,也为HBASE提供数据持久化功能,它在大数据项目中有很广泛的应用. Hadoop分布式文件系统(Hadoop Distributed File System.HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统.HDFS是Hadoop项目的核心子项目,是一种具有高容错性.高可靠性.高可扩展性.高吞吐量等特征的分布

HDFS简介及用C语言访问HDFS接口操作实践

一.概述 近年来,大数据技术如火如荼,如何存储海量数据也成了当今的热点和难点问题,而HDFS分布式文件系统作为Hadoop项目的分布式存储基础,也为HBASE提供数据持久化功能,它在大数据项目中有非常广泛的应用. Hadoop分布式文件系统(Hadoop Distributed File System,HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统.HDFS是Hadoop项目的核心子项目,是一种具有高容错性.高可靠性.高可扩展性.高吞吐量等特征的分