5.3HDFS 的高级特性
5.3.1 HDFS 安全模式 safe mode
定义:安全模式是hadoop的一种保护机制,用于保证集群中的数据块的安全性。HDFS 正常运行的时候,安全模式一定是off(关闭状态),是HDFS 的一种自我保护,如果HDFS 处于安全模式下,则表示 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 离开安全模式
5.3.2 快照 snapshot
定义:一个snapshot(快照)是一个全部文件系统、或者某个目录在某一时刻的镜像(备份)
默认情况下:HDFS快照是关闭的,一般情况下不会对文件进行快照(备份),除非文件非常非常重要,不然会造成空间的极大浪费。
快照应用在以下场景中:
- 防止用户的错误操作
- 备份
- 试验/测试
- 灾难恢复
HDFS的快照操作:
- 开启快照:hdfs dfsadmin -allowSnapshot /input
- 创建快照:hdfs dfs -createSnapshot /input backup_input_01
- 查看快照:hdfs lsSnapshottableDir
- 对比快照:hdfs snapshotDiff /input backup_input_01 backup_input_02
- 恢复快照:hdfs dfs -cp /input/.snapshot/backup_input_01/data.txt /input
5.3.3 配额 quota
定义:配额就是HDFS为每个目录分配的大小空间,新建立的目录是没有配额的,最大的配额是Long.Max_Value。配额为1可以强制目录保持为空。
配额的类型
名称配额:用于设置该目录中能够存放的最多文件个数(实际:N-1 )。
空间配额:用于设置该目录中最大能够存放的文件大小(值必须大于数据块的大小128M) 。
配额的应用案例
设置名称配额
命令:
dfsadmin -setQuota …
dfsadmin -clrQuota …
示例:
设置/myquota1目录的名称配额为 3 (实际:N-1 = 2)
hdfs dfsadmin -setQuota 3 /myquota1
清除/myquota1目录的名称配额
hdfs dfsadmin -clrQuota /myquota1
设置空间配额
命令:
dfsadmin -setSpaceQuota …
dfsadmin -clrSpaceQuota …
示例:
设置/myquota2目录的空间配额为1M
hdfs dfsadmin -setSpaceQuota 1048576 /myquota2
清除myquota2目录的空间配额
hdfs dfsadmin -clrSpaceQuota /myquota2
注意:如果hdfs文件系统中的文件个数或者大小超过了配额限制,会出现错误。
5.3.4 回收站 recyclebin
启用:默认回收站是关闭的,可以通过在core-site.xml中添加fs.trash.interval来打开幵配置时间阀值,例如:
<propetry>
<name>fs.trash.interval</name>
<value>1440</value>
</propetry>
性质:
- 删除文件时,其实是放入回收站/trash
- 回收站里的文件可以快速恢复
- 可以设置一个时间阈值,当回收站里文件的存放时间超过返个阈值,就被彻底删除,并且释放占用的数据块
命令:
-
查看回收站:hdfs dfs -lsr /user/root/.Trash/Current
-
从回收站中恢复:hdfs dfs -cp /user/root/.Trash/Current/input/data.txt /input
5.3.5 HDFS 的用户权限管理
HDFS 本身的权限管理功能很弱,不会认证,指定root就是
- 超级用户:
- 启动namenode服务的用户就是超级用户, 该用户的组是supergroup
- Shell命令变更
命令 | 说明 |
---|---|
chmod [-R] mode file … | 只有文件的所有者或者超级用户才有权限改变文件模式。 |
chgrp [-R] group file …chgrp [-R] group file … | 使用chgrp命令的用户必须属于特定的组且是文件的所有者,或者用户是超级用户 |
chown [-R] [owner][:[group]] file … | 文件的所有者的只能被超级用户更改。 |
ls® file … | 输出格式做了调整以显示所有者、组和模式。 |
- 文件系统API变更