本文共 2236 字,大约阅读时间需要 7 分钟。
对文件进行限额主要在多人使用hdfs文件系统的时候,为了避免有的用户一个人就要占用整个文件系统所有的存储空间等情况,hdfs 的限额配置允许我们以文件个数或者文件大小进行对某个目录的限制。
查看某个目录的配置信息:
hdfs dfs -count -q -h URL
output:
2 0 none inf 1 1 1.4 K /nodemanager
前两个数字分别代表文件限额数量与还空余的文件数量。
要注意的事情是对于文件的限数量,如果对目录文件限额为N那么实际能够添加进去的文件数量就是N-1,而且一个子目录也代表一个文件的数量,且子目录中的文件数量也要算进这个被限额的目录的文件数量中去。
hdfs dfsadmin -setQuota 2 /dir
对一个目录进行文件数量限额配置的消除:
hdfs dfsadmin -clrQuota /dir
hdfs dfsadmin -setSpaceQuota 384M /dir
清除文件空间限制:
hdfs dfsadmin -clrSpaceQuota /dir
生成任意大小文件:
dd if=/dev/zero of=1.txt bs=128M count=1
要注意的事情是在分配空间大小的时候设置的空间最小值为block_size*3且从hadoop2.7.3开始block_size从64M到128M了。
重新设置空间大小配置的时候一定要先进行清除空间大小配置
首先在安全模式下文件系统只接受读数据请求,不接受删除、修改等请求。
安全模式是hadoop的一种保护机制,用于保证集群中的数据安全性hadoop默认的副本数应该为3,副本率为0.999,如果我们的系统中有五个副本,那么hdfs会自动删除另外两个副本,而这时若我们只存在两个副本,2/3小于0.999那么此时系统会自动地复制副本到其他的datanode使副本率不小于0.999。
hdfs安全模式的操作命令:
//查看安全模式状态hdfs dfsadmin -safemode get//进入安全模式hdfs dfsadmin -safemode enter//退出安全模式hdfs dfsadmin -safemode leave
hdfs的副本机制:
dfs架构在相对廉价的计算机上,以分布式的方式,这样想要扩大空间只要增加集群的数量就可以,副本机制是hdfs为了避免宕机导致数据丢失而采取的冗余数据存储,每个副本就是一个完全相同的文件复制
当hdfs文件系统要将文件放入datanode中时,先将文件按照block_size(现在一般认为block_size为128M)的大小分为几个部分,不够128M的就按原大小分,这时将文件的这几个部分分别放入datanode,这样可以极大避免因为宕机导致的数据丢失。
如图:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9V4EsYic-1599788507915)(https://s1.ax1x.com/2020/09/10/wYVFc4.png)]
存放时的特殊机制来保证数据的安全性:
三副本机制详解(三个以上的随机存储)
第一副本:如果上传节点是DN,则上传该节点;如果上传节点是NN,则随机选择DN 第二副本:放置在不同机架的DN上 第三副本:放置在与第二副本相同机架的不同DN上我们需要对Hadoop环境进行一些压力测试,测试我们的集群的读取与写入速度,,测试我们的网络带宽是否足够一些基准测试。
测试写入速度
可以试着向hdfs文件系统中写入数据来得到数据报告,查看速度测试。
hadoop jar hadoop-2.8.5/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.8.5.jar TestDFSIO -write -nrFiles 10 -fileSize 10MB
执行完命令之后文件与报告文件保存在hdfs文件系统/benchmarks/TestDFSIO中,也可以在命令执行的目录下面查看会多出一个log文件:TestDFSIO_results.log
测试读取速度:
与写入相同,且存放报告与写入报告在同样的位置。
hadoop jar hadoop-2.8.5/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.8.5.jar TestDFSIO -read -nrFiles 10 -fileSize 10MB
hdfs清除测试数据:
命令:
[root@master hadoop]# hadoop jar hadoop-2.8.5/share/hadoop/mapreduce/hadoop-mapreduce-client-jobclient-2.8.5.jar TestDFSIO -clean
要注意到的是,清除的测试数据只是在hdfs文件系统中清楚了测试数据,而本地留存的测试数据TestDFSIO_results.log则不会被清除。