使用snapshot实现hdfs文件备份和恢复实战

通过snapshot实现 hdfs上文件的备份

api地址请见http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.5.0-cdh5.2.0/hadoop-project-dist/hadoop-hdfs/HdfsSnapshots.html

==========================================================================================

1、允许创建快照

首先,在你想要进行备份的文件夹下面 执行命令,允许该文件夹创建快照

hdfs dfsadmin -allowSnapshot <path>

例如:hdfs dfsadmin -allowSnapshot /Workspace/linlin

出现此命令证明已经允许创建快照成功

=================================================================================================

2、创建快照

接下来就开始对此文件夹进行备份

hdfs dfs -createSnapshot <path> [name]

例如 hdfs dfs -createSnapshot /Workspace/linlin bak1

此命令出现证明已经创建快照成功

此时我们可以考虑一下是否能够在linlin子目录创建快照

hdfs‘上目录结构如图所示

然后尝试在snaptest上建立快照

hdfs dfs -createSnapshot /Workspace/linlin/snaptest bak2

报错,可见,只能在你允许的目录下面建立快照;

第一次快照  bak1 时候 没有snaptest文件夹,现在多了snaptest文件夹,再创建一次快照

若还是用

hdfs dfs -createSnapshot /Workspace/linlin  bak1

有错误提示,快照名字已经存在

执行  hdfs dfs -createSnapshot /Workspace/linlin  bak2

创建成功;

==============================================================================================================

3、查看快照

查看所有的snapshottable

   hdfs lsSnapshottableDir

查看到曾经允许创建快照的所有目录
查看当前快照下的文件  hadoop sanpshot 创建快照时候,默认的文件夹是.snapshot 查看时候必须加上.snapshot才能看到里面备份的东西;
.snapshot是后来hadoop才有的产物,所以之前若是有文件夹命名为snapshot关键字就不能创建快照了;

执行命令 hdfs dfs -ls /Workspace/linlin/.snapshot/

能够看到 这个快照下 有三个备份 分别是 bak1 、bak2 、 linlin

===========================================================================================================

4、对比快照

进行快照之间的对比,看到两个快照之间备份文件的区别

执行命令

hdfs snapshotDiff <path> <fromSnapshot> <toSnapshot>
例如: 
执行命令 hdfs snapshotDiff  /Workspace/linlin bak1 bak2 

结果 Results:
+ 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.
这里出现M 代表我对linlin文件夹进行了修改,+代表新增了一个文件夹 snaptest
============================================================================================================================
5、恢复快照
恢复快照:

hdfs dfs -cp <path> <path>

例如: hdfs dfs -cp /Workspace/linlin/.snapshot/bak2/snaptest  /Workspace

查看hdfs目录:

已经成功恢复到 Workspace
==================================================================================================================================
题外话:
我们可以尝试着删除建立过快照的文件夹:是无法删除的,会提示

存在快照无法删,证明若是在文件夹下面建立快照,文件夹就无法删除或者移动

原文:http://www.nosqlcn.com/ShowArticle/23
时间: 2024-08-03 03:02:23

使用snapshot实现hdfs文件备份和恢复实战的相关文章

第85课:基于HDFS的SparkStreaming案例实战和内幕源码解密

一:Spark集群开发环境准备 启动HDFS,如下图所示: 通过web端查看节点正常启动,如下图所示: 2.启动Spark集群,如下图所示: 通过web端查看集群启动正常,如下图所示: 3.启动start-history-server.sh,如下图所示: 二:HDFS的SparkStreaming案例实战(代码部分) package com.dt.spark.SparkApps.sparkstreaming; import org.apache.spark.SparkConf; import o

第85讲:基于HDFS的SparkStreaming案例实战和内幕源码解密

一:Spark集群开发环境准备 启动HDFS,如下图所示: 通过web端查看节点正常启动,如下图所示: 2.启动Spark集群,如下图所示: 通过web端查看集群启动正常,如下图所示: 3.启动start-history-server.sh,如下图所示: 二:HDFS的SparkStreaming案例实战(代码部分) package com.dt.spark.SparkApps.sparkstreaming; import org.apache.spark.SparkConf; import o

Jenkins部署与备份恢复实战

一.关于Jenkins Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能!先了解下相关概念:CI: continuous integration持续集成 (code -- bulid -- integrate --test)CD: continuous Delivery 持续交付 ( test -- release)continuous Deployment 持续部署 简单来说就是通过Jenk

[0014] HDFS 常用JAVA 操作实战

目的: 学习用java进行的常用hdfs操作 参考: [0002] Hadoop HDFS cmd常用命令练手 环境: hadoop2.6.4 win7 下的eclipse环境调试已经配置好,参考前面的文章 代码: 1. 创建文件夹 1 package hdfs; 2 3 import java.io.IOException; 4 5 import org.apache.hadoop.conf.Configuration; 6 import org.apache.hadoop.fs.FileSy

Oracle 学习之RMAN(十四)恢复实战--基于时间点恢复

1. 我们先做一个全备 RMAN> backup database ; Starting backup at 2015/07/09 13:40:47 allocated channel: ORA_DISK_1 channel ORA_DISK_1: SID=28 device type=DISK channel ORA_DISK_1: starting full datafile backup set channel ORA_DISK_1: specifying datafile(s) in b

Oracle 学习之RMAN(十五)恢复实战--TSPITR

TSPITR是英文Tablespace Point In Time Recovery的缩写.也就是表空间定点时间恢复.TSPITR是一种相对细粒度的不完全恢复技术.我们通常见到的还原操作,都是将所有的表空间和数据还原到相同的一个时间点上.而TSPITR则是以表空间为粒度单元,单独将某个表空间内容还原到一个特定可恢复时间点上.举一个例子:一个Oracle数据库运行在归档模式下,在夜间零时保留一份完全备份.早上七点时候,某个特定表空间上数据表(单个表独占表空间)发生一个误操作,数据损坏.要求在不伤害

Linux命令 文件备份归档恢复

cp [功能说明] 文件的备份 英文xxxx  #cp命令将源文件复制到另外安全的地方,复制的文件和源文件是两个相互独立的文件,对认识一个文件的操作不影响另一个文件,但与符号链接文件中的硬链接是有区别的 [语法格式] cp[参数][源文件或目录][目标目录] 或cp[选项][源文件][目标文件] [选项参数] 参数 说明 -a 该参数通常在复制目录时使用.保留链接,文件属性,并递归的复制目录,其作用等于-d,-p和-r参数的组合 -b 在复制文件的时候,若目标文件存在,在删除,覆盖目标文件前应做

Oracle 学习之RMAN(十二)恢复实战--控制文件丢失

首先我们进行一次全库备份 RMAN> run {   backup database    format '/backup/full_%d_%T_%s'   plus archivelog    format '/backup/arch_%d_%T_%s'   delete all input;  }  Starting backup at 2015/07/09 09:35:03 current log archived using channel ORA_DISK_1 channel ORA_

Oracle 学习之RMAN(十三)恢复实战--数据块修复

在很多情况下,数据库只是某个数据文件的些许数据块发生损坏.这种情况,我们当然可是使用数据库恢复或者数据文件恢复的方式来解决问题.但是有点高射炮打蚊子的感觉.幸好RMAN提供了块级别的恢复.下面我们来演示一下. 1. 创建一个表空间,大小小一点. SQL> conn / as sysdba Connected. SQL> create tablespace tbs_blkerr datafile '/u01/app/oracle/oradata/devdb/blkerr01.dbf' size