本篇主要介绍HDFS的高级功能:
和我们Window系统上的回收站一样,HDFS也是存在的,不过它默认是关闭的,要开启需要配置。具体的配置如下:
vi core-site.xml
<property>
<name>fs.trash.intervalname>
//回收站持续时间为1天(单位是分钟)
<value>1440value>
property>
开启之后,我们删除/input/a.exe文件
hdfs dfs -rmr /input/a.exe
日志如下:
Moved: ‘hdfs://bigdata113:9000/input/a.exe’ to trash at: hdfs://bigdata113:9000/user/root/.Trash/Current (将/input/a.exe文件移动到了/user/root/.Trash/Current目录下)
我们通过 hdfs dfs -ls /user/root/.Trash/Current/input来查看一下:
下面执行清空回收站的操作:
hdfs dfs -expunge
结果如下:
可以发现,再次查询回收站就已经没有了。
回收站的本质:ctrl+x 移动到一个隐藏目录。可以通过cp操作来恢复!!
使用场景:防止用户的错误操作(因为在一定条件下可恢复)
快照本质上就是一个镜像,用来作备份的。常用命令如下:
//操作命令
[-createSnapshot <snapshotDir> [<snapshotName>]] 创建快照
[-deleteSnapshot <snapshotDir> <snapshotName>] 删除快照
[-renameSnapshot <snapshotDir> <oldName> <newName>] 重命名快照
//管理员命令
[-allowSnapshot <snapshotDir>] 开启快照
[-disallowSnapshot <snapshotDir>] 关闭快照
开启快照(HDFS默认是禁用快照功能的,想要使用需要使用以下命令开启)
hdfs dfsadmin -allowSnapshot /input (/input目录开启快照)
创建快照
hdfs dfs -createSnapshot /input backup_input (为/input目录创建的快照目录为backup_input)
查看快照
hdfs dfs -ls /input/.snapshot/backup_input
对比快照
hdfs snapshotDiff /input backup_input_01 backup_input_02
恢复快照
hdfs dfs -cp /input/.snapshot/backup_input_01/data.txt /input
我们以/input为例,进行以下操作:
打开快照并创建备份
hdfs dfsadmin -allowSnapshot /input (必须是目录)
hdfs dfs -createSnapshot /input backup (若未指定则系统将生成以字符s开头紧跟当前时间戳的名称 )
重命名备份
hdfs dfs -renameSnapshot /input backup backup_input(注意:前面的目录指定到我们上面开启快照时指定的/input即可,不能指定到/input/.snapshot,否则会报错)
删除/input下的所有文件,仅保留data.txt,然后重新备份,对比两个备份的差别
hdfs dfs -rmr /input/*.exe(删除/input下的所有.exe文件,此时只剩data.txt)
hdfs dfs -createSnapshot /input backup_input2(二次备份)
hdfs snapshotDiff /input backup_input backup_input2
对比结果如下:
结果显示有三个exe文件被删除。
删除原目录,并copy快照回源目录
hdfs dfs -rmr /input/data.txt(删除input下data.txt文件)
hdfs dfs -cp /input/.snapshot/backup_input/data.txt /input(使用备份恢复/input目录)
使用场景:
配额就是HDFS为每个目录分配的大小空间,新建立的目录是没有配额的,最大的配额是Long.Max_Value。配额为1可以强制目录保持为空。
配额quota类型:名称配额、空间配额
(1)名称配额:限制某个目录下,文件的个数(管理员命令,即hdfsadmin)
[-setQuota ...] 设置名称配额
[-clrQuota ...] 清除名称配额
hdfs dfsadmin -setQuota 3 /input
此时设置tools目录的名称配额为3,那么它实际上能放置的文件个数为N-1,N为我们设置的配额数,即3
hdfs dfsadmin -clrQuota /input
清除/input目录的名称配额
(2)空间配额:限制某个目录下,文件的大小(管理员命令)
[-setSpaceQuota [-storageType ] ...] 设置空间配额
[-clrSpaceQuota [-storageType ] ...] 清除空间配额
hdfs dfsadmin -setSpaceQuota 1M /input
设置/input目录的空间配额为1M
hdfs dfsadmin -clrSpaceQuota /input
清除input目录的空间配额
对于空间配额,设置的值一定不能小于128M(因为HDFS是以数据块来保存数据的,每一个数据块都占有128M的大小,设置小于128M的话,什么文件都放不下)
安全模式safemode:hadoop的一种保护机制,用于保证集群中的数据块的安全性。在正常运行情况下,安全模式一定是off;如果是on,HDFS是只读。
当集群启动的时候,会首先进入安全模式。当系统处于安全模式时会检查数据块的完整性。假设我们设置的副本数(即参数dfs.replication)是5,那么在datanode上就应该有5个副本存在,假设只存在3个副本,那么比例就是3/5=0.6。在配置文件hdfs-default.xml中定义了一个最小的副本的副本率0.999,如图:
我们的副本率0.6明显小于0.99,因此系统会自动的复制副本到其他的dataNode,使得副本率不小于0.999.如果系统中有8个副本,超过我们设定的5个副本,那么系统也会删除多余的3个副本。
在命令行下是可以控制安全模式的进入、退出和查看的:
hdfs dfsadmin -safemode get 查看安全模式状态
hdfs dfsadmin -safemode enter 进入安全模式状态
hdfs dfsadmin -safemode leave 离开安全模式
关于HDFS所有的高级功能到这里就已经介绍完了,后面我们会介绍MapReduce,敬请期待!!