1.我们知道NameNode会在本地内存中保存整个集群的所有数据块信息,其中包括每个数据块属于哪个文件,哪个数据块属于哪个DataNode等信息,都在NameNode的本地内存中保存着,NameNode为了在重启时仍然能够重构出这些元数据信息,他会定期存储一份镜像fsimage文件+实时的editlog修改命令文件,fsImage镜像文件会存储NameNode节点当前内存中的元数据信息,这是一份全量的备份,可以通过hdfs oiv命令操作,editlog文件类似一份增量的命令,对数据块元数据的任何修改操作都会写一个命令到editlog文件中,这样当NameNode重启时,他会首先从镜像文件中加载全量的数据到本地内存中,随后再把增量的editlog日志文件应用到NameNode的本地内存中,这样就可以重建出NameNode的完整的本地内存映像。
2.DataNode的限流
限流操作一般常用的代码是while(当前速度>设定的限流速度) wait(指定的时间)
,通过对当前线程进行休眠的方式来达到限流的目的,hdfs中,DataNode节点数据的重平衡操作,镜像文件生成等操作都需要对磁盘IO限流,目的是为了防止进行重平衡等操作的时候影响到业务的正常IO读写.