元数据
文件上传到HDFS服务器的时候,会分成多个块,并以多个正本的模式存储在服务器下面,那咱们怎么晓得这个文件的文件名是什么呢?这个文件被分成了多少块?每个块又存储在哪几个服务呢?
所以HDFS在上传文件的时候,除了上传文件,还会另外保留这些信息,这些信息叫做元数据。
元数据的在HDFS中有两种模式,一个是磁盘,一个是内存,两种模式的数据是齐全截然不同的。存磁盘是为了数据的长久化,存内存是为了进步读写的性能。
在HDFS中,咱们读写文件的时候,目录相似于Linux的目录构造,所以元数据也会保留目录树结构。比方下图,INodeDirectory是目录,INodeFile是文件,一个目录下能够有多个目录和多个文件。
所以元数据包含:
- 目录树结构。
- 文件与block之间的关系
- block与DataNode的关系
元数据文件的组成
咱们之前搭建Hadoop集群以及高可用集群的时候,都会有个格式化的操作,这个操作就会在磁盘目录上生成一个fsimage文件,而这个文件就是用来寄存元数据的信息的。
当NameNode启动的时候,会依据配置信息读取到fsimage目录的fsimage文件,把它加载到内存中。
NameNode对外提供服务的时候,就有客户端上传文件的申请,就会把元数据加到内存的fsimage中,为了保证数据不失落,也会把元数据长久化磁盘中,写入磁盘的文件是edits_inprogress。此时内存中的fsimage=磁盘的fsimage+edits_inprogress。
当edits_inprogress文件数据越来越多,或者隔一段时间后,edits_inprogress文件就会重命名为edits0000000N-edits0000000M文件,并且用新的edits_inprogress文件从新写入数据。如此重复,就有很多很多个edits文件。此时内存中的fsimage=磁盘的fsimage+edits_inprogress+所有的edits。
当NameNode重启的时候,此时就会把磁盘的fsimage+edits_inprogress+所有的edits都读入缓存,合并为内存的fsimage。
咱们能够预测的到,在元数据有限增量的状况下,edits文件就会越来越多,每次NameNode重启所加载的工夫也会越来越多,所以就有了CheckPoint机制,简略的说,就是把历史的edits文件合并到fsimage,那下次重启的时候,咱们就只加载合并后的fsimage文件、edits_inprogress文件以及大量的edits文件,大大提高了NameNode的启动工夫。为了记录每次CheckPoint的TXID,就会有seen_txid文件进行记录。
另外还有一个文件,叫VERSION,这里寄存着HDFS集群的信息。
综上,元数据文件包含fsimage、edits_inprogress、edits、seen_txid、VERSION。