一、Hadoop的限额与归档以及集群安全模式
### --- 高级命令
~~~ HDFS文件限额配置
~~~ HDFS文件的限额配置允许我们以文件大小或者文件个数来限制
~~~ 我们在某个目录下上传的文件数量或者文件内容总量,
~~~ 以便达到我们类似百度网盘网盘等限制每个用户允许上传的最大的文件的量
### --- 数量限额
~~~ # 创建文件夹并设置资源限额
[root@linux121 ~]# hdfs dfs -mkdir -p /user/root/yanqi # 创建hdfs文件夹
[root@linux121 ~]# hdfs dfsadmin -setQuota 2 /user/root/yanqi # 给该文件夹下面设置最多上传两个文件,上传文件,发现只能上传一个文件
~~~ # 上传文件
[root@linux121 ~]# hdfs dfs -put a.txt /user/root/yanqi
[root@linux121 ~]# hdfs dfs -put b.txt /user/root/yanqi
[root@linux121 ~]# hdfs dfs -put c.txt /user/root/yanqi
put: The NameSpace quota (directories and files) of directory /user/root/yanqi is exceeded: quota=2 file count=3
~~~ # 清除文件数量限制
[root@linux121 ~]# hdfs dfsadmin -clrQuota /user/root/yanqi
### --- 空间大小限额
~~~ # 设置空间大小限制
~~~ 上传超过4Kb的文件大小上去提示文件超过限额
[root@linux121 ~]# hdfs dfsadmin -setSpaceQuota 4k /user/root/yanqi # 限制空间大小4KB
~~~ # 验证空间限额
[root@linux121 ~]# hdfs dfs -put /opt/yanqi/software/jdk-8u231-linux-x64.tar.gz /user/root/yanqi
put: The DiskSpace quota of /user/root/yanqi is exceeded: quota = 4096 B = 4 KB but diskspace consumed = 402653184 B = 384 MB
~~~ # 清除空间限额
[root@linux121 ~]# hdfs dfsadmin -clrSpaceQuota /user/root/yanqi #清除空间限额
~~~ # 查看hdfs文件限额数量
[root@linux121 ~]# hdfs dfs -count -q -h /user/root/yanqi
none inf none inf 2 3 185.2 M /user/root/yanqi
### --- HDFS的安全模式
~~~ 安全模式是HDFS所处的一种特殊状态,在这种状态下,文件系统只接受读数据请求,
~~~ 而不接受删除、修改等变更请求。在NameNode主节点启动时,
~~~ HDFS首先进入安全模式,DataNode在启动的时候会向NameNode汇报可用的block等状态,
~~~ 当整个系统达到安全标准时,HDFS自动离开安全模式。
~~~ 如果HDFS出于安全模式下,则文件block不能进行任何的副本复制操作,
~~~ 因此达到最小的副本数量要求是基于DataNode启动时的状态来判定的,
~~~ 启动时不会再做任何复制(从而达到最小副本数量要求),
~~~ # HDFS集群刚启动的时候,默认30S钟的时间是出于安全期的,
~~~ # 只有过了30S之后,集群脱离了安全期,然后才可以对集群进行操作。
~~~ # 开启安全模式
[root@linux121 ~]# hdfs dfsadmin -safemode enter
Safe mode is ON
~~~ # 验证安全模式下是否可以上传下载文件
[root@linux121 ~]# hdfs dfs -get /hadoop.txt
[root@linux121 ~]# hdfs dfs -put hadoop.txt /a.txt
put: Cannot create file/a.txt._COPYING_. Name node is in safe mode.
~~~ # 关闭安全模式
[root@linux121 ~]# hdfs dfsadmin -safemode leave
Safe mode is OFF
### --- Hadoop归档技术
~~~ 主要解决HDFS集群存在大量小文件的问题!!
~~~ 由于大量小文件会占用NameNode的内存,
~~~ 因此对于HDFS来说存储大量小文件造成NameNode内存资源的浪费!
~~~ Hadoop存档文件HAR文件,是一个更高效的文件存档工具,
~~~ HAR文件是由一组文件通过archive工具创建而来,
~~~ 在减少了NameNode的内存使用的同时,可以对文件进行透明的访问,
~~~ 通俗来说就是HAR文件对NameNode来说是一个文件减少了内存的浪费,
~~~ 对于实际操作处理文件依然是一个一个独立的文件。
![](https://i-blog.csdnimg.cn/blog_migrate/71aa4c72f5f41d71ebb86ad0adb11e73.png)
二、案例
### --- 启动YARN集群
[root@linux123 hadoop-2.9.2]# start-yarn.sh
### --- 归档文件
~~~ 把/user/root/input目录里面的所有文件归档成一个叫input.har的归档文件,
~~~ 并把归档后文件存储到/user/root/output路径下。
[root@linux121 ~]# hadoop archive -archiveName input.har -p /user/root/input /user/root/output
### --- 查看归档
[root@linux121 ~]# hadoop fs -lsr /user/root/output/input.har
-rw-r--r-- 3 root supergroup 0 2021-08-13 20:17 /user/root/output/input.har/_SUCCESS
-rw-r--r-- 3 root supergroup 179 2021-08-13 20:17 /user/root/output/input.har/_index
-rw-r--r-- 3 root supergroup 23 2021-08-13 20:17 /user/root/output/input.har/_masterindex
-rw-r--r-- 3 root supergroup 0 2021-08-13 20:17 /user/root/output/input.har/part-0
[root@linux121 ~]# hadoop fs -lsr har:///user/root/output/input.har
-rw-r--r-- 3 root supergroup 0 2021-08-13 20:02 har:///user/root/output/input.har/a.txt
-rw-r--r-- 3 root supergroup 0 2021-08-13 20:02 har:///user/root/output/input.har/b.txt
### --- 解归档文件
[root@linux121 ~]# hadoop fs -cp har:///user/root/output/input.har/* /user/root