hopeless-dream

导航

HDFS编辑日志和镜像文件

HDFS非常重要的几个文件

namenode被格式化之后,将在hadoop.tmp.dir目录中产生如下文件:

edits_0000000000000000001-0000000000000000001

fsimage_0000000000000000258

fsimage_0000000000000000258.md5

seen_txid

VERSION

(1)Fsimage文件(镜像文件):HDFS文件系统元数据的一个永久性的检查点,其中包含HDFS文件系统的所有目录和文件idnode的序列化信息。

(2)Edits文件(编辑日志):存放HDFS文件系统的所有更新操作的路径,文件系统客户端执行的所有写操作首先会被记录到edits文件中。

(3)seen_txid文件保存的是一个数字,就是最后一个edits_的数字

(4)每次Namenode启动的时候都会将fsimage文件读入内存,并从00001开始到seen_txid中记录的数字依次执行每个edits里面的更新操作,保证内存中的元数据信息是最新的、同步的,可以看成Namenode启动的时候就将fsimage和edits文件进行了合并。

VERSION文件:

$ cat VERSION 
#Thu Mar 05 09:08:20 CST 2020
namespaceID=2134024206
clusterID=CID-e7391405-290e-4dd6-8c3b-493bbaca6502
cTime=0
storageType=NAME_NODE
blockpoolID=BP-112428611-10.0.0.31-1583325452737
layoutVersion=-60

文件内容剖析:

1)namespaceID:是文件系统的唯一标识符,在文件系统首次格式化之后生成的;

(2)storageType:说明这个文件存储的是什么进程的数据结构信息(如果是DataNode,storageType=DATA_NODE);

(3)cTime:表示NameNode存储时间的创建时间,由于我的NameNode没有更新过,所以这里的记录值为0,以后对NameNode升级之后,cTime将会记录更新时间戳;

(4)layoutVersion:表示HDFS永久性数据结构的版本信息, 只要数据结构变更,版本号也要递减,此时的HDFS也需要升级,否则磁盘仍旧是使用旧版本的数据结构,这会导致新版本的NameNode无法使用;

(5)clusterID:是系统生成或手动指定的集群ID,在-clusterid选项中可以使用它;如下说明:

  - 使用如下命令格式化一个Namenode:

  $HADOOP_HOME/bin/hdfs namenode -format [-clusterId <cluster_id>]

    a、选择一个唯一的cluster_id,并且这个cluster_id不能与环境中其他集群有冲突。如果没有提供cluster_id,则会自动生成一个唯一的ClusterID。

    b、使用如下命令格式化其他Namenode:$HADOOP_HOME/bin/hdfs namenode -format -clusterId <cluster_id>

    c、升级集群至最新版本。在升级过程中需要提供一个ClusterID,例如:$HADOOP_PREFIX_HOME/bin/hdfs start namenode --config $HADOOP_CONF_DIR  -upgrade -clusterId <cluster_ID>

  如果没有提供ClusterID,则会自动生成一个ClusterID。

(6)blockpoolID:是针对每一个Namespace所对应的blockpool的ID

seen_txid

存放transactionId的文件,format之后是0,它代表的是namenode里面的edits_NUM文件的尾数,namenode重启的时候,会按照seen_txid的数字,循序从头跑edits_0000001~到seen_txid的数字。
以当你的hdfs发生异常重启的时候,一定要比对seen_txid内的数字是不是你edits最后的尾数,不然会发生建置namenode时metaData的资料有缺少,导致误删Datanode上多余Block的信息。 文件中记录的是edits滚动的序号,每次重启namenode时,namenode就知道要将哪些edits进行加载edits

fsimage_0000000000000000258.md5

该文件是镜像文件的MD5校验文件,这个文件是为了判断镜像文件是否被修改。

edits_inprogress_0000000000000000311

当前正在使用的编辑日志文件,同一时刻只能有一个这样的文件被打开。

 

镜像文件和编辑日志的查看方式:https://www.cnblogs.com/zh-dream/articles/12416899.html

 

手动滚动编辑日志

$ ll
total 7232
-rw-rw-r-- 1 hdfs hdfs 1048576 Mar  4 21:11 edits_0000000000000000001-0000000000000000001
-rw-rw-r-- 1 hdfs hdfs      42 Mar  4 21:13 edits_0000000000000000002-0000000000000000003
-rw-rw-r-- 1 hdfs hdfs 1048576 Mar  4 21:13 edits_0000000000000000004-0000000000000000004
-rw-rw-r-- 1 hdfs hdfs 1048576 Mar  4 21:51 edits_0000000000000000005-0000000000000000005
-rw-rw-r-- 1 hdfs hdfs      42 Mar  4 21:57 edits_0000000000000000006-0000000000000000007
-rw-rw-r-- 1 hdfs hdfs    1224 Mar  4 22:57 edits_0000000000000000008-0000000000000000023
-rw-rw-r-- 1 hdfs hdfs 1048576 Mar  4 23:41 edits_0000000000000000024-0000000000000000089
-rw-r--r-- 1 root root 1048576 Mar  5 09:40 edits_0000000000000000090-0000000000000000097
-rw-rw-r-- 1 hdfs hdfs    3355 Mar  5 10:01 edits_0000000000000000098-0000000000000000176
-rw-rw-r-- 1 hdfs hdfs     268 Mar  5 11:01 edits_0000000000000000177-0000000000000000181
-rw-rw-r-- 1 hdfs hdfs    5875 Mar  5 12:01 edits_0000000000000000182-0000000000000000255
-rw-rw-r-- 1 hdfs hdfs      83 Mar  5 13:01 edits_0000000000000000256-0000000000000000258
-rw-rw-r-- 1 hdfs hdfs 1048576 Mar  5 13:49 edits_0000000000000000259-0000000000000000303
-rw-rw-r-- 1 hdfs hdfs      42 Mar  5 14:01 edits_0000000000000000304-0000000000000000305
-rw-rw-r-- 1 hdfs hdfs     413 Mar  5 15:01 edits_0000000000000000306-0000000000000000310
-rw-rw-r-- 1 hdfs hdfs 1048576 Mar  5 15:01 edits_inprogress_0000000000000000311
-rw-rw-r-- 1 hdfs hdfs    2252 Mar  5 14:01 fsimage_0000000000000000305
-rw-rw-r-- 1 hdfs hdfs      62 Mar  5 14:01 fsimage_0000000000000000305.md5
-rw-rw-r-- 1 hdfs hdfs    2182 Mar  5 15:01 fsimage_0000000000000000310
-rw-rw-r-- 1 hdfs hdfs      62 Mar  5 15:01 fsimage_0000000000000000310.md5
-rw-rw-r-- 1 hdfs hdfs       4 Mar  5 15:01 seen_txid
-rw-rw-r-- 1 hdfs hdfs     201 Mar  5 09:08 VERSION

$ hdfs dfsadmin -rollEdits
Successfully rolled edit logs.
New segment starts at txid 313

$ ll
total 8196
-rw-rw-r-- 1 hdfs hdfs 1048576 Mar  4 21:11 edits_0000000000000000001-0000000000000000001
-rw-rw-r-- 1 hdfs hdfs      42 Mar  4 21:13 edits_0000000000000000002-0000000000000000003
-rw-rw-r-- 1 hdfs hdfs 1048576 Mar  4 21:13 edits_0000000000000000004-0000000000000000004
-rw-rw-r-- 1 hdfs hdfs 1048576 Mar  4 21:51 edits_0000000000000000005-0000000000000000005
-rw-rw-r-- 1 hdfs hdfs      42 Mar  4 21:57 edits_0000000000000000006-0000000000000000007
-rw-rw-r-- 1 hdfs hdfs    1224 Mar  4 22:57 edits_0000000000000000008-0000000000000000023
-rw-rw-r-- 1 hdfs hdfs 1048576 Mar  4 23:41 edits_0000000000000000024-0000000000000000089
-rw-r--r-- 1 root root 1048576 Mar  5 09:40 edits_0000000000000000090-0000000000000000097
-rw-rw-r-- 1 hdfs hdfs    3355 Mar  5 10:01 edits_0000000000000000098-0000000000000000176
-rw-rw-r-- 1 hdfs hdfs     268 Mar  5 11:01 edits_0000000000000000177-0000000000000000181
-rw-rw-r-- 1 hdfs hdfs    5875 Mar  5 12:01 edits_0000000000000000182-0000000000000000255
-rw-rw-r-- 1 hdfs hdfs      83 Mar  5 13:01 edits_0000000000000000256-0000000000000000258
-rw-rw-r-- 1 hdfs hdfs 1048576 Mar  5 13:49 edits_0000000000000000259-0000000000000000303
-rw-rw-r-- 1 hdfs hdfs      42 Mar  5 14:01 edits_0000000000000000304-0000000000000000305
-rw-rw-r-- 1 hdfs hdfs     413 Mar  5 15:01 edits_0000000000000000306-0000000000000000310
-rw-rw-r-- 1 hdfs hdfs      42 Mar  5 15:23 edits_0000000000000000311-0000000000000000312
-rw-rw-r-- 1 hdfs hdfs 1048576 Mar  5 15:23 edits_inprogress_0000000000000000313
-rw-rw-r-- 1 hdfs hdfs    2252 Mar  5 14:01 fsimage_0000000000000000305
-rw-rw-r-- 1 hdfs hdfs      62 Mar  5 14:01 fsimage_0000000000000000305.md5
-rw-rw-r-- 1 hdfs hdfs    2182 Mar  5 15:01 fsimage_0000000000000000310
-rw-rw-r-- 1 hdfs hdfs      62 Mar  5 15:01 fsimage_0000000000000000310.md5
-rw-rw-r-- 1 hdfs hdfs       4 Mar  5 15:23 seen_txid
-rw-rw-r-- 1 hdfs hdfs     201 Mar  5 09:08 VERSION
$ hdfs dfsadmin -rollEdits

hdfs重启时,namenode会将编辑日志和镜像文件合并,自动滚动编辑日志。

手动保存镜像文件(需要在安全模式进行)

$ ll |grep fsimage

-rw-rw-r-- 1 hdfs hdfs 2252 Mar 5 14:01 fsimage_0000000000000000305
-rw-rw-r-- 1 hdfs hdfs 62 Mar 5 14:01 fsimage_0000000000000000305.md5
-rw-rw-r-- 1 hdfs hdfs 2182 Mar 5 15:01 fsimage_0000000000000000310
-rw-rw-r-- 1 hdfs hdfs 62 Mar 5 15:01 fsimage_0000000000000000310.md5


$ hdfs dfsadmin -saveNamespace saveNamespace: Safe mode should be turned ON in order to create namespace image. $ hdfs dfsadmin -safemode enter Safe mode is ON $ hdfs dfsadmin -saveNamespace Save namespace successful

$ ll |grep fsimage
-rw-rw-r-- 1 hdfs hdfs 2182 Mar 5 15:01 fsimage_0000000000000000310
-rw-rw-r-- 1 hdfs hdfs 62 Mar 5 15:01 fsimage_0000000000000000310.md5
-rw-rw-r-- 1 hdfs hdfs 2255 Mar 5 15:29 fsimage_0000000000000000314
-rw-rw-r-- 1 hdfs hdfs 62 Mar 5 15:29 fsimage_0000000000000000314.md5

Fsimage文件

 每个fsimage文件都是文件系统元数据的一个完整的永久性检查点。后缀的数字表示镜像文件的最后一个事务ID。不是每个写操作都会更新该文件。如果namenode发生故障,

最近的fsimage文件将被载入到内存用来重构元数据的最近状态,再从相关点开始向前执行编辑日志中的记录。 

 

 

 HDFS启动过程

https://www.cnblogs.com/zh-dream/p/12437145.html

 

posted on 2020-03-05 23:27  hopeless-dream  阅读(737)  评论(0)    收藏  举报