一,数据块的大小
众所周知,hdfs上的数据块的大小是64M或是128M。那么为什么呢?
1.减少寻道时间,对于hdfs来讲,寻道是一个逻辑的概念,因为真正的寻道发生在磁盘,这里的寻道时间指的就是定位到块的时间。hdfs是存储大数据的,如果块设计的很小,一个文件就会由很多块组成,而HDFS上文件读写的最小单位是块,这样,寻找块的时间就会大大增加,降低读写效率。所以需要专门对hdfs上的小文件做处理的。
2.减少任务数,一个map或者一个reduce都是以一个块为单位处理,如果块很小的话,mapreduce任务数就会非常多,任务之间的切换开销变大,效率降低,同样,如果块很大的话,一个任务中就会有很多很多的数据,这样任务就会很慢。
3.减少元数据,再hdfs中,文件块的信息都是元数据,集群运行过程中元数据会都加载进namenode的内存中,如果块很小的情况下,元数据信息就会很多,namenode压力就会很大。当小文件变多的时候,就会造成namenode的压力多大而容易挂掉。
4.和1很相似,如果数据块很小,一个文件要分成很多块,而每个文件都有副本,当文件删除或者拷贝时,就会导致大量块移动,寻道开销和网络开销都会很大。
5.以后随着磁盘的读写速度的提升是可以提高块的大小的,这样也会是对集群资源的更好的利用,避免浪费。
二,数据块的分布
默认的数据块的复制因子是3,不过这个是可以根据实际情况来更改的。
这条数据所在的数据块的3分,是不会都放到同一台服务器上的。会在当前服务器上放一份,在临近服务器上放一份,最后一份放在其他机架上。这样的话就避免了服务器的宕机造成数据的丢失的情况。
在读取或是追加写数据的时候,是就近原则,在本服务器或是最近的服务器上找到这个数据块所在的地址,直接通过寻道,找到数据块,进行数据的读写操作。
三,数据块的平衡
如果集群在搭建好之后,没有做增加服务器或是磁盘的操作,各台服务器上dn的存储应该是差不多的。
但是当有增加磁盘或是增加服务器的操作的时候,就会有数据块的不平衡的情况出现,这时就需要使用hdfs自带的平衡器来处理。
集群中会有这么一个角色,在执行命令的时候,可以在主节点上执行或是在这个角色的节点上执行。
这个命令是:hdfs balancer
但是这个命令需要花的时间比较长,可以在集群不使用的时候来执行
四,数据块的监控
在hdfs上的数据块,要保证数据块是健康的,如果不健康的话,在删除或是移动操作的时候,容易造成数据的丢失或是角色的报错等。
要确保块是健康的,要用到这个命令。(fsck命令必须由HDFS超级用户来执行,普通用户无权限)命令是:hdfs fsck /
先说每个参数的含义吧
Total size : hdfs集群存储大小,不包括复本大小。(字节->KB->m->G->TB)
Total blocks (validated) : 总共的块数量,不包括复本。
Number of data-nodes : datanode的节点数量
Number of racks : 机架数量
Default replication factor : 默认的复制因子
Average block replication : 当前块的平均复制数,如果小 default replication factor,则有块丢失
Under-replicated blocks : 正在复制块数量,可采用 hadoop fsck -blocks 解决问题
Mis-replicated blocks : 正复制的缺少复制块的数量
Missing replicas : 缺少复制块的数量,通常情况下Under-replicated blocks\Mis-replicated blocks\Missing replicas 都为0,则集群健康,如果不为0,则缺失块了
Corrupt blocks : 坏块的数量,这个值不为0,则说明当前集群有不可恢复的块,即数据有丢失了
这是参数的意义。
上图可以看出集群是不健康的,主要问题是数据的的丢失。
在hdfs的页面也是可以看到这个错误的。
说明数据块是丢失的。
在默认情况下,块扫描器每隔三周(504小时)就会检测块,以应对可能出现的吸盘的故障。损坏的块会报给nn,并被及时修复。
这个周期是由(dfs.datenode.scan.period.hours)属性来设置的。这个属性是需要配置的,如果没有配置的话将不会默认检测的。
这里可以看到外网上的一些处理信息http://www.hadoopinrealworld.com/datanode-block-scanner/
这里是可以看到每个节点的平衡情况的http://datanode:50075/blockScannerReport
直接在配置文件中增加
hdfs上的数据块问题有更多问题欢迎评论或是私聊(个人微信maochentingqiang),都是可以的。
网友评论