乐趣区

关于hadoop:HDFS-什么是元数据

元数据

文件上传到 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。

退出移动版