Hadoop NameNode元数据的$dfs.namenode.name.dir/current/文件夹有几个文件:
current/
2|-- VERSION
3|-- edits_*
4|-- fsimage_0000000000008547077
5|-- fsimage_0000000000008547077.md5
6|-- seen_txid

1.fsimage文件其实是Hadoop文件系统元数据的一个永久性的检查点,其中包含Hadoop文件系统中的所有目录和文件idnode的序列化信息;
2.edits文件存放的是Hadoop文件系统的所有更新操作的路径,文件系统客户端执行的所以写操作首先会被记录到edits文件中。
  
fsimage和edits文件都是经过序列化的,在NameNode启动的时候,它会将fsimage文件中的内容加载到内存中,之后再执行edits文件中的各项操作,使得内存中的元数据和实际的同步,存在内存中的元数据支持客户端的读操作。

NameNode起来之后,HDFS中的更新操作会重新写到edits文件中,因为fsimage文件一般都很大(GB级别的很常见),如果所有的更新操作都往fsimage文件中添加,这样会导致系统运行的十分缓慢,但是如果往edits文件里面写就不会这样,每次执行写操作之后,且在向客户端发送成功代码之前,edits文件都需要同步更新。如果一个文件比较大,使得写操作需要向多台机器进行操作,只有当所有的写操作都执行完成之后,写操作才会返回成功,这样的好处是任何的操作都不会因为机器的故障而导致元数据的不同步。

fsimage包含Hadoop文件系统中的所有目录和文件idnode的序列化信息;对于文件来说,包含的信息有修改时间、访问时间、块大小和组成一个文件块信息等;而对于目录来说,包含的信息主要有修改时间、访问控制权限等信息。fsimage并不包含DataNode的信息,而是包含DataNode上块的映射信息,并存放到内存中,当一个新的DataNode加入到集群中,DataNode都会向NameNode提供块的信息,而NameNode会定期的“索取”块的信息,以使得NameNode拥有最新的块映射。因为fsimage包含Hadoop文件系统中的所有目录和文件idnode的序列化信息,所以如果fsimage丢失或者损坏了,那么即使DataNode上有块的数据,但是我们没有文件到块的映射关系,我们也无法用DataNode上的数据!

补充:
在第一次部署好Hadoop集群的时候,我们需要在NameNode(NN)节点上格式化磁盘:

[server@hadoop-2]$  $HADOOP_HOME/bin/hdfs namenode -format
格式化完成之后,将会在$dfs.namenode.name.dir/current目录下如下的文件结构

current/
|-- VERSION
|-- edits_*
|-- fsimage_0000000000008547077
|-- fsimage_0000000000008547077.md5
|-- seen_txid

其中的dfs.namenode.name.dir是在hdfs-site.xml文件中配置的,默认值如下:
dfs.namenode.name.dir
file://${hadoop.tmp.dir}/dfs/name
 
hadoop.tmp.dir是在core-site.xml中配置的,默认值如下
hadoop.tmp.dir
/tmp/hadoop-${user.name}

A base for other temporary directories.

dfs.namenode.name.dir属性可以配置多个目录,如/data1/dfs/name,/data2/dfs/name, /data3/dfs/name,….各个目录存储的文件结构和内容都完全一样,相当于备份,这样做的好处是当其中一个目录损坏了,也不会影响到 Hadoop的元数据,特别是当其中一个目录是NFS(网络文件系统Network File System,NFS)之上,即使你这台机器损坏了,元数据也得到保存。
下面对$dfs.namenode.name.dir/current/目录下的文件进行解释。

一、VERSION文件是Java属性文件,内容大致如下:
#Fri Nov 16 18:40:16 CST 2016
namespaceID=934548976
clusterID=CID-cdff7d73-93cd-4783-9399-0a22e6dce196
cTime=0
storageType=NAME_NODE
blockpoolID=BP-893790215-192.168.24.72-1383809616115
layoutVersion=-47

其中
(1)、namespaceID是文件系统的唯一标识符,在文件系统首次格式化之后生成的;
(2)、storageType说明这个文件存储的是什么进程的数据结构信息(如果是DataNode,storageType=DATA_NODE);
(3)、cTime表示NameNode存储时间的创建时间,由于我的NameNode没有更新过,所以这里的记录值为0,以后对NameNode升级之后,cTime将会记录更新时间戳;
(4)、layoutVersion表示HDFS永久性数据结构的版本信息, 只要数据结构变更,版本号也要递减,此时的HDFS也需要升级,否则磁盘仍旧是使用旧版本的数据结构,这会导致新版本的NameNode无法使用;
(5)、clusterID是系统生成或手动指定的集群ID,在-clusterid选项中可以使用它;如下说明
a、使用如下命令格式化一个Namenode:    
$ $HADOOP_HOME/bin/hdfs namenode -format [-clusterId ]
选择一个唯一的cluster_id,并且这个cluster_id不能与环境中其他集群有冲突。如果没有提供cluster_id,则会自动生成一个唯一的ClusterID。
b、使用如下命令格式化其他Namenode:    
$ $HADOOP_HOME/bin/hdfs namenode -format -clusterId
c、升级集群至最新版本。在升级过程中需要提供一个ClusterID,例如:    
$ $HADOOP_PREFIX_HOME/bin/hdfs start namenode      
          --config $HADOOP_CONF_DIR  -upgrade -clusterId
如果没有提供ClusterID,则会自动生成一个ClusterID。

(6)、blockpoolID:是针对每一个Namespace所对应的blockpool的ID,上面的这个BP- 893790215-192.168.24.72-1383809616115就是在我的ns1的namespace下的存储块池的ID,这个ID包括了 其对应的NameNode节点的ip地址。
  
二、$dfs.namenode.name.dir/current/seen_txid 非常重要,是存放transactionId的文 件,format之后是0,它代表的是namenode里面的edits_*文件的尾数,namenode重启的时候,会按照seen_txid的数字, 循序从头跑edits_0000001~到seen_txid的数字。所以当你的hdfs发生异常重启的时候,一定要比对seen_txid内的数字是不是你edits最后的尾数(就是edits_inprogress_000000000* 后边的那串数字,inprogress就是正在使用的edits文件),不然会发生建置namenode时metaData的资料有缺少,导致误删Datanode上多余Block的资讯。

三、$dfs.namenode.name.dir/current目录下在format的同时也会生成fsimage和edits文件,及其 对应的md5校验文件。fsimage和edits是Hadoop元数据相关的重要文件。

所以定期及时的备份fsimage、edits和seen_txid文件非常重要(建议直接备份current整个目录)!即使存在HA的架构建议也备份下,多一份备份多一分安全。

原文:https://blog.csdn.net/levy_cui/article/details/60144621

Hadoop Namenode元数据文件 Fsimage、editlog、seen_txid说明相关推荐

  1. Hadoop NameNode详解

    NameNode在内存中保存着整个文件系统的名字空间和文件数据块的地址映射(Blockmap).如果NameNode宕机,那么整个集群就瘫痪了 整个HDFS可存储的文件数受限于NameNode的内存大 ...

  2. Hadoop文件系统元数据fsimage和编辑日志edits

    提到NameNode的$dfs.namenode.name.dir/current/文件夹的几个文件: 1 current/ 2 |-- VERSION 3 |-- edits_* 4 |-- fsi ...

  3. Hadoop生态圈(十三)- Namenode元数据管理及各组件工作机制

    目录 前言 1. Namenode元数据管理 1.1 元数据是什么 1.2 元数据管理概述 1.2.1 内存元数据 1.2.2 磁盘元数据 1.2.2.1 fsimage内存镜像文件 1.2.2.2 ...

  4. Hadoop基础-镜像文件(fsimage)和编辑日志(edits)

    Hadoop基础-镜像文件(fsimage)和编辑日志(edits) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.查看日志镜像文件(如:fsimage_00000000000 ...

  5. 大数据之-Hadoop之HDFS_合并FsImage和Edits文件_之CheckPoint时间设置---大数据之hadoop工作笔记0072

    我们说,secondarynamenode会定时的,或者说等edits文件满了以后就会把, namenode节点的fsimage文件以及edits文件滚动出来一版,然后copy到secondaryna ...

  6. NameNode之文件系统目录树

    NameNode会为维护文件系统的命名空间,命名空间是以/目录为开始的整棵目录树,整棵目录树是通过FSDirectory来管理的. 在HDFS中,无论是目录还是文件都是,在文件系统目录树中都被看做是一 ...

  7. Hadoop namenode启动瓶颈分析

    转载:http://blog.csdn.net/AE86_FC/archive/2010/08/26/5842020.aspx NameNode启动过程详细剖析 NameNode中几个关键的数据结构 ...

  8. B05 - 033、元数据信息FSimage以及edits和secondaryNN的作用

    初学耗时:0.5h 注:CSDN手机端暂不支持章节内链跳转,但外链可用,更好体验还请上电脑端. 一.元数据信息FSimage以及edits和secondaryNN的作用   1.1  FSImage与 ...

  9. HDFS—Hadoop底层分布式文件存储系统

    声明:本文档所有内容均在本人的学习和理解上整理,仅供参考,欢迎讨论.不具有权威性,甚至不具有精确性,也会在以后的学习中对不合理之处进行修改. 在上一篇"浅谈Hadoop inFusionIn ...

最新文章

  1. 大数据背后的神秘定理:贝叶斯公式
  2. 2021年结婚登记创36年新低,六大原因值得注意
  3. Python中使用pip安装库时提示:远程主机强迫关闭了一个现有的连接
  4. 1355: [Baltic2009]Radio Transmission
  5. maven jacoco_使用JaCoCo Maven插件为单元和集成测试创建代码覆盖率报告
  6. python lxml xpath_Python/lxml/Xpath:如何找到包含特定文本的行?
  7. 简述html文件的基本标记组成_HTML是什么呢?
  8. 问题六十五:二叉查找树的一个应用实例——求解一元十次方程时单实根区间的划分
  9. ModelSim的使用详解
  10. 【Maven】阿里镜像仓库地址
  11. 语音系统智能AI机器人AI源码营销机器人电销机器人智能电话机器人拨号机器人语音机器人空号识别FreeSWITCH呼叫中心中间ipbxIPBX科大识别阿里识别语音识别语音翻译
  12. html+js 简单静态网页设计
  13. RationalDMIS 2020 最大位置度误差
  14. 面向对象之多态以及进阶
  15. 【AMD和CMD的区别】
  16. C 语言为什么不会过时?
  17. ST-BlueNrg-lp蓝牙芯片OTA升级过程
  18. 读书笔记-TCP简介
  19. fat32 ntfs有什么不同
  20. 获取新浪微博开发时的MD5签名

热门文章

  1. Linux进阶 | 实现负载均衡高可用(LB+HA)Web服务
  2. 【C语言练习——打印上三角及其变形(带空格版)】
  3. 通过GitHub和GoDaddy搭建静态个人博客
  4. AVCaptureDevice中通过调用VideoZoomFactor方法调整焦距实现拉近拉远镜头进行拍照录制视频(动画缩放画面,不闪屏)
  5. XShell下载安装并连接阿里云
  6. C++初学者必练基础编程题【第一期】
  7. 浮点型数据存储方式浅析
  8. Spring Boot使用jasypt处理加密问题
  9. 《青春无烦恼》基督之灵爱
  10. DOS中goto eof的作用