从一个 HDFS edits 文件看到的一些问题

我们看一下这是 NameNode 所在机器的:/home/admin/software/hadoop-2.7.2/hadoop-data/dfs/name/current 路径下的 edits文件和 fsimage文件:

为什么会有这么多 edits文件,这些edits 文件创建的时间都是间隔1个小时,这是因为每隔1小时,secondaryNameNode 都会对 edits 和 fsimage 进行一次合并,合并之后,旧的 edits 并不会被删除,依旧被保留。

edits_inprogress… 文件:最新的一个edtis文件,用来记录用户的上传、删除操作。

那我们看 fsimage 只保留两个文件。

fsimage… .md5 是对应文件的md5值文件,用来保证 fsimage的一致性的。

seen_txid:里面保存了最新的一个 edits 文件的名字 最后的三位:107.

NameNode 格式化后 第一次启动时,会创建一个 edits 和 fsimage 文件,后面再次启动时,直接加载 每个 edits 和最新的 fsimage 文件。

下面来看几个问题:

1、为什么要每个 edits 都加载呢?fsimage不是已经保存之前 edits日志当中转换后的 元数据了么?

这是为了再做一次校验的工作,确保加载到内存当中的元数据是可靠的。

2、Edits 文件是用来做什么的?为什么要保留这么多 edtis文件,像 fsimage一样保存一两个文件不就可以了么?

这个要和 fsimage 、secondary’NameNode 放在一起来理解

1) edits是用来存放 用户的 上传、删除请求的日志的。当用户上传成功,这条记录会保存到 内存元数据当中。也就是说,edits是作为一个中间文件。

2) 当 secondarynamenode 对 edtis 和 fsimage 进行合并时,会创建一个新的 edits 文件,以接收在合并期间 来的新的 用户上传请求。

所以,每次触发 secondaryname 的 checkpoint(也就是对edits和 fsimage 合并),都会产生一个新的 edtis 文件。

3) 为什么不删除以前的 edtis 文件?其实第1个问题已经做了回答。

3、旧的 edtis 文件一直会保留,会不会有一天 edits把空间沾满了啊?还有 fsimage,它保留了所有 block块的信息,总有一天会很大吧?

这个问题其实我们不用担心,因为 edtis 和 fsimage 只是保留了 每个文件的位置等的信息,这些信息经过很长时间也不会占用多少空间的。

但也会遇到小文件太多的问题,比如我们把 block块的大小设为 128M,虽然小于block大小的小文件不会占用整个HDFS block空间,但是较多的小文件会占用更多的NameNode的内存,因为文件或者目录在内存中均以对象的形式存储,每个对象约占150byte,如果有1000 0000个小文件,则namenode大约需要2G空间。这样namenode内存容量严重制约了集群的扩展。 其次,访问大量小文件速度远远小于访问几个大文件。HDFS最初是为流式访问大文件开发的,如果访问大量小文件,需要不断的从一个datanode跳到另一个datanode,严重影响性能。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 首先,我们来看一下Hadoop1.0和Hadoop2.0伪分布式架构下HDFS的组成,如下图所示,我们可以看到,H...
    文子轩阅读 4,675评论 0 2
  • 1. 概述 HDFS集群分为两大角色:NameNode、DataNode(Secondary NameNode)N...
    如果仲有听日阅读 13,245评论 1 7
  • HDFS是Hadoop Distribute File System 的简称,也就是Hadoop的一个分布式文件系...
    大佛爱读书阅读 4,375评论 0 0
  • 文 | 逆风生长 一 “你地址给我吧,给你寄张明信片啊!”“好啊!我的地址是xxx” 上大学以后,收到有生以来的第...
    远看山有树阅读 2,849评论 0 1
  • 很少,先拟好题目再敲字! 而今天!完美!就简单俩字!失眠! 这样特定的时刻,就好想假装自己从不曾失眠一样!问问那些...
    斑马小猫阅读 1,358评论 0 0