hopeless-dream

导航

Hadoop快照功能

新特性

Hadoop 2.x增加了快照功能的新特性。

snapshot原理

Hdfs的快照(snapshot)是在某一时间点对指定文件系统拷贝,快照采用只读模式,可以对重要数据进行恢复、防止用户错误性的操作。

快照分两种:

     (1)建立文件系统的索引,每次更新文件不会真正的改变文件,而是新开辟一个空间用来保存更改的文件,

     (2)拷贝所有的文件系统。Hdfs属于前者。 Hdfs的快照的特征如下: 

  •  快照的创建是瞬间的,代价为O(1),取决于子节点扫描文件目录的时间。 
  • 当仅当做快照的文件目录下有文件更新时才会占用小部分内存,占用内存的大小为O(M),其中M为更改文件或者目录的数量;
  •  新建快照的时候,Datanode中的block不会被复制,快照中只是记录了文件块的列表和大小信息
  • 快照不会影响正常的hdfs的操作。对做快照之后的数据进行的更改将会按照时间顺序逆序的记录下来,用户访问的还是当前最新的数据,快照里的内容为快照创建的时间点时文件的内容减去当前文件的内容。
  • 每个快照最高限额为65536个文件或者文件夹,在快照的子文件夹中不允许在创建新的快照。

注意,mv命令和del命令是不允许的,因为快照是只读的

snapshottable目录

快照可以产生在任何被设置为snapshottable的目录中。一个snapshottable目录可以同时容纳65536个快照。snapshottable目录没有个数上限,管理员可以设置任意个snapshottable。如果一个snapshottable中存在快照,那么这个目录在删除所有快照之前,不能删除或改名。

嵌套的snapshottable目录在现在并不支持。换句话说,如果一个目录的父目录/子目录是一个snapshottable目录的话,那么其不能设置为snapshottable。

快照相关操作(Superuser操作权限)

开启快照功能

# hdfs dfs -mkdir -p /snapshot/data
# hdfs dfsadmin -allowSnapshot /snapshot/data
Allowing snaphot on /snapshot/data succeeded

禁用快照功能

# hdfs dfsadmin -disallowSnapshot /snapshot/data
Disallowing snaphot on /snapshot/data succeeded

创建快照

# echo 123 > a1.txt
# echo 456 > b.txt
# hdfs dfs -put a1.txt /data
# hdfs dfs -put b.txt /data

# hdfs dfs -ls -R /data
drwxr-xr-x   - supergroup supergroup          0 2020-03-04 20:26 /data/.ssh
-rwxr-xr-x   2 supergroup supergroup       1176 2020-03-04 20:31 /data/.ssh/authorized_keys
-rwxr-xr-x   2 supergroup supergroup       1679 2020-03-04 19:57 /data/.ssh/id_rsa
-rwxr-xr-x   2 supergroup supergroup        392 2020-03-04 19:57 /data/.ssh/id_rsa.pub
-rwxr-xr-x   2 supergroup supergroup        531 2020-03-04 20:03 /data/.ssh/known_hosts
-rw-r--r--   3 root       supergroup          4 2020-03-06 10:29 /data/a1.txt
-rw-r--r--   3 root       supergroup          4 2020-03-06 10:19 /data/b.txt
-rwxr-xr-x   2 supergroup supergroup         13 2020-03-04 23:04 /data/test.txt

为目录启用快照
# hdfs dfsadmin -allowSnapshot /data
Allowing snaphot on /data succeeded

创建快照
# hdfs dfs -createSnapshot /data mysnapshot
Created snapshot /data/.snapshot/mysnapshot

查看快照内容(快照目录里包含了所有的文件)

# hdfs dfs -ls -R /data/.snapshot/mysnapshot
drwxr-xr-x   - supergroup supergroup          0 2020-03-04 20:26 /data/.snapshot/mysnapshot/.ssh
-rwxr-xr-x   2 supergroup supergroup       1176 2020-03-04 20:31 /data/.snapshot/mysnapshot/.ssh/authorized_keys
-rwxr-xr-x   2 supergroup supergroup       1679 2020-03-04 19:57 /data/.snapshot/mysnapshot/.ssh/id_rsa
-rwxr-xr-x   2 supergroup supergroup        392 2020-03-04 19:57 /data/.snapshot/mysnapshot/.ssh/id_rsa.pub
-rwxr-xr-x   2 supergroup supergroup        531 2020-03-04 20:03 /data/.snapshot/mysnapshot/.ssh/known_hosts
-rw-r--r--   3 root       supergroup          4 2020-03-06 10:29 /data/.snapshot/mysnapshot/a1.txt
-rw-r--r--   3 root       supergroup          4 2020-03-06 10:19 /data/.snapshot/mysnapshot/b.txt
-rwxr-xr-x   2 supergroup supergroup         13 2020-03-04 23:04 /data/.snapshot/mysnapshot/test.txt


web端验证

 

 

 

 修改源文件(修改源文件并不会对快照中的文件产生影响)

# hdfs dfs -cat /data/a1.txt
123

# echo batch > batch.properties

# hdfs dfs -appendToFile /home/hdfs/batch.properties /data/a1.txt

# hdfs dfs -cat /data/a1.txt
123
batch

# hdfs dfs -cat /data/.snapshot/mysnapshot/a1.txt
123

重命名快照和删除快照

# hdfs dfs -renameSnapshot /data mysnapshot mynewsnap

# hdfs dfs -ls /data/.snapshot
Found 1 items
drwxr-xr-x   - supergroup supergroup          0 2020-03-06 10:33 /data/.snapshot/mynewsnap

# hdfs dfs -deleteSnapshot /data mynewsnap

# hdfs dfs -ls /data/.snapshot

posted on 2020-03-06 14:50  hopeless-dream  阅读(924)  评论(0编辑  收藏  举报