磁盘目录服务简介
HDFS在DataNode所在的节点中启动了多种磁盘目录的检测服务,来保证数据的完整性与一致性,其中包括:DiskChecker、DirectoryScanner和VolumeScanner
① DiskChecker:坏盘检测服务。检测的级别是每个磁盘,检测的对象是FsVolume,FsVolume对应一个存储数据的磁盘。通过检测文件目录的访问权限以及目录是否可创建来判断目录所属磁盘的好坏,如果是坏盘,则此块盘将会被移除,上面的所有块都将被重新复制
② DirectoryScanner:目录扫描服务,对每块盘上的目录做扫描,使之与内存中维护的块信息同步。比如存储在磁盘上的块已经没有了,则内存中的块信息也应该被移除
③ VolumeScanner:磁盘目录扫描服务。从名称上看,VolumeScanner与DirectoryScanner比较类似,但是VolumeScanner才是真正意义上的块检查服务。它对已发现的“可疑块”做检查,判断此块是否为损坏块,如果是,则会将其汇报给NameNode
磁盘目录服务详解
① DiskChecker
检查的目录:/finalized、/tmp、/rbw
·/finalizedDir :已经完成后的块文件存储目录,层级不止一层,子目录下还存在子目录,所以在此处需要递归的检查
·/tmpDir:临时目录,存储临时副本的目录
·/rbwDir:正在写操作的文件会存放于此目录,写完成后,会被移入到finallizedDir中
DiskChecker注意点:
·坏盘检测的误判:当我们删除了一块盘中大部分的目录时,这块盘可能会被检测为坏盘。
·大量的坏盘会导致DataNode启动失败,DataNode对坏盘有一定的容忍数量,其配置项为:
<name>dfs.datanode.failed.volumes.tolerated</name>
② DirectoryScanner
阶段性扫描数据存储目录上的块文件以及块元数据信息文件,使其数据与DataNode内存中所维护的数据趋向一致
数据同步化时将会进行的两大操作:scan和checkAndUpdate。scan的目的在于获取diff差异列表,checkAndUpdate才是使数据一致化的操作
1)scan生成diff差异报告需要同时获取磁盘上的块信息报告和内存中的块信息报告,然后做具体维度的比较
2)DataNode的更新操作,DirectoryScanner是一项周期性地服务,默认间隔执行时间6小时。DirectoryScanner像是一个“园丁”的角色,将这段时间内出现的一些异常数据处理掉,维护内存中的数据与磁盘上块数据的完整性与一致性。
③ VolumeScanner:磁盘目录扫描服务
VolumeScanner是专门针对每块磁盘做块扫描的服务。块扫描类似于一次健康状况的检查,每个VolumeScanner有属于它自己的独立线程。
HDFS_磁盘目录服务
最新推荐文章于 2023-02-01 16:01:35 发布