hadoop_高级功能
1. 回收站
默认:禁用
删除数据,hadoop dfs -rmr /output
日志:
17/10/25 10:27:53 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 0 minutes, Emptier interval = 0 minutes. Deleted /output
回收站的本质:把要删除的数据移动到一个隐藏目录
修改core-site.xml配置
<property>
<name>fs.trash.interval</name>
<value>1440</value>
</property>
value是分钟,默认是0,1440分钟即一天,删除文件时会将文件放到回收站一天,这一天内可以通过复制或移动将文件恢复。
开通回收站后再删除,日志如下:
hadoop dfs -rmr /output
17/10/25 10:44:35 INFO fs.TrashPolicyDefault: Namenode trash configuration: Deletion interval = 1440 minutes, Emptier interval = 0 minutes.
Moved: 'hdfs://192.168.157.111:9000/output' to trash at: hdfs://192.168.157.111:9000/user/root/.Trash/Current
不建议开通回收站功能
2. 快照snapshot
快照针对的是目录,本质是将文件复制一份到隐藏目录下。
第一步:使用管理员开启某个目录快照功能
[-allowSnapshot <snapshotDir>]
[-disallowSnapshot <snapshotDir>]
举例,给/students目录开启快照:hdfs dfsadmin -allowSnapshot /students
第二步:使用HDFS的操作命令创建快照
[-createSnapshot <snapshotDir> [<snapshotName>]]
[-deleteSnapshot <snapshotDir> <snapshotName>]
举例,创建两个快照:
hdfs dfs -createSnapshot /students backup_students_01
hdfs dfs -createSnapshot /students backup_students_02
对比快照:
hdfs snapshotDiff /students backup_students_01 backup_students_02
结果:
M .
+ ./student03.txt
M列为+表示多了一个文件,-表示少了一个文件,第二列为文件名。
查看哪些目录可以被执行快照,即哪些目录开启过快照:
hdfs lsSnapshottableDir
如上面就会输出:/students
也可以在50070端口页面中查看有哪些目录开启了快照,都有哪些快照。
3. 配额quota
1) 名称配额:
限制某个目录下,文件的个数(N-1个),因为文件目录自身也是一个文件。
设置配额:[-setQuota <quota> <dirname>...<dirname>]
清除配额:[-clrQuota <dirname>...<dirname>]
如:设置/test1目录的名称配额是3
hdfs dfs -mkdir /test1
hdfs dfsadmin -setQuota 3 /test1
放第三个文件:hdfs dfs -put a.xml /test1
输出日志:
put: The NameSpace quota (directories and files) of directory /test1 is exceeded: quota=3 file count=4
2) 空间配额:
限制某个目录下,文件的大小-------> 注意的问题:值一定要大于数据块的大小(128M)
设置配额:[-setSpaceQuota <quota> [-storageType <storagetype>] <dirname>...<dirname>]
清除配额:[-clrSpaceQuota [-storageType <storagetype>] <dirname>...<dirname>]
hdfs dfs -mkdir /test2
设置该目录的空间配额:1M
hdfs dfsadmin -setSpaceQuota 1M /test2 -----> 失败,因为数据块占用至少128M,
日志:
Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.protocol.DSQuotaExceededException): The DiskSpace quota of /test2 is exceeded: quota = 1048576 B = 1 MB but diskspace consumed = 134217728 B = 128 MB
hdfs dfsadmin -clrSpaceQuota /test2
4. 安全模式
(1) HDFS在启动的阶段中,会经历安全模式
(2) 正常运行期间,HDFS一定不能是安全模式
(3) 命令:
hdfs dfsadmin -safemode [get|leave|enter|wait]
如:hdfs dfsadmin -safemode get 获取安全模式状态,输出:
Safe mode is OFF
hdfs dfsadmin -safemode enter 进入安全模式:
Safe mode is ON
(4) 安全模式的作用:
检查数据块的副本率。如果不满足要求,进行数据块的复制(删除)
当集群启动的时候,会首先进入案例模式。当系统处于安全模式时会检查数据块的完整性。假设我们设置的副本数(即参数dfs.replication)是5,那么datanode上就应该有5个副本存在,假设只存在3个副本,那么比例就是3/5=0.6.在配置文件hdfs-default.xml中定义了一个最小的副本的副本率0.999,如图:
5. 权限管理
Hdfs对权限的控制较弱,可以通过设置环境变量为root,它就会认为是root用户在操作,并不真正验证是否为root。