在多人共用HDFS的环境下,配置设置非常重要。特别是在Hadoop处理大量资料的环境,如果没有配额管理,很容易把所有的空间用完造成别人无法存取。Hdfs的配额设定是针对目录而不是针对账号,可以让每个账号仅操作某一个目录,然后对目录设置配置。 hdfs文件的限额配置允许我们以文件个数,或者文件大小来限制我们在某个目录下上传的文件数量或者文件内容总量,以便达到我们类似百度网盘网盘等限制每个用户允许上传的最大的文件的量。
hdfs dfs -count -q -h /user/root/dir1 #查看配额信息
数量限额 hdfs dfs -mkdir -p /user/root/dir #创建hdfs文件夹hdfs dfsadmin -setQuota 2 HDFSUIR # 给该文件夹下面设置最多上传两个文件,发现只能上传一个文件hdfs dfsadmin -clrQuota HDFSUIR # 清除文件数量限制 空间大小限额在设置空间配额时,设置的空间至少是切块数目×每个切块的副本数×128M的大小 否则会报错 如对空间大小进行如下设置:
hdfs dfsadmin -setSpaceQuota 4k /user/root/dir # 限制空间大小4KBdir允许上传的最大是4KB,这时无论我们上传多么小的文件都会出错,因为无论多么小的文件至少会被切分成1个切块,我的hdfs-site.xml的副本的设置是2,所以如果上传的文件会被切分成一个切块的话,文件大小限额最小为1×2×128MB
生成任意大小文件的命令:
dd if=/dev/zero of=1.txt bs=1M count=2 #生成2M的文件
清除空间配额限制:
hdfs dfsadmin -clrSpaceQuota /user/root/dir
安全模式是hadoop的一种保护机制,用于保证集群中的数据块的安全性。当集群启动的时候,会首先进入安全模式。当系统处于安全模式时会检查数据块的完整性。假设我们设置的副本数(即参数dfs.replication)是3,那么在datanode上就应该有3个副本存在,假设只存在2个副本,那么比例就是2/3=0.666。hdfs默认的副本率0.999。我们的副本率0.666明显小于0.999,因此系统会自动的复制副本到其他dataNode,使得副本率不小于0.999。如果系统中有5个副本,超过我们设定的3个副本,那么系统也会删除多于的2个副本。在安全模式状态下,文件系统只接受读数据请求,而不接受删除、修改等变更请求。在,当整个系统达到安全标准时,HDFS自动离开安全模式。
安全模式操作命令:
hdfs dfsadmin -safemode get#查看安全模式状态hdfs dfsadmin -safemode enter #进入安全模式hdfs dfsadmin -safemode leave #离开安全模式那么我们修改hdfs-site.xml文件的dfs.replication后,如果重新开启安全模式,它会不会把多余的副本删掉或者把少于基础副本设置的补上呢,答案是否定的,刚才在hadoop2.7.3版本bai分布式集群环境试了一下: 修改hdfs-site.xml文件的dfs.replication值后,不重启hadoop集群,上传马上生效。 不重启,对于修改dfs.replication值之前的文件备份数不会变动。 重启后,对于修改dfs.replication值之前的文件备份数也不会变动。 我有两个datanode节点,测试的时候,先设置dfs.replication的值为1,后来改为2。 但是如果是由2变为1的话,hadoop也不会帮你将原先两个备份删掉一份的。
