Hadoop NameNode元数据相关文件目录解析

《Hadoop NameNode元数据相关文件目录解析》文章中提到NameNode的$dfs.namenode.name.dir/current/文件夹的几个文件:

1 current/
2 |-- VERSION
3 |-- edits_*
4 |-- fsimage_0000000000008547077
5 |-- fsimage_0000000000008547077.md5
6 `-- seen_txid

  其中存在大量的以edits开头的文件和少量的以fsimage开头的文件。那么这两种文件到底是什么,有什么用?下面对这两中类型的文件进行详解。在进入下面的主题之前先来搞清楚edits和fsimage文件的概念:
  (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上的数据!所以定期及时的备份fsimage和edits文件非常重要!

  在前面我们也提到,文件系统客户端执行的所以写操作首先会被记录到edits文件中,那么久而久之,edits会非常的大,而NameNode在重启的时候需要执行edits文件中的各项操作,那么这样会导致NameNode启动的时候非常长!在下篇文章中我会谈到在Hadoop 1.x版本和Hadoop 2.x版本是怎么处理edits文件和fsimage文件的。

时间: 2024-08-06 03:33:02

Hadoop NameNode元数据相关文件目录解析的相关文章

Hadoop namenode无法启动

最近遇到了一个问题,执行start-all.sh的时候发现JPS一下namenode没有启动        每次开机都得重新格式化一下namenode才可以        其实问题就出在tmp文件,默认的tmp文件每次重新开机会被清空,与此同时namenode的格式化信息就会丢失        于是我们得重新配置一个tmp文件目录        首先在home目录下建立一个hadoop_tmp目录                sudo mkdir ~/hadoop_tmp        然后修

hadoop namenode启动失败

hadoop version=3.1.2 生产环境中,一台namenode节点突然挂掉了,,重新启动失败,日志如下: Info=-64%3A1391355681%3A1545175191847%3ACID-9160c87b-3ab7-4372-98a1-536a59dd36ef&inProgressOk=true' to transaction ID 159168296 2019-03-05 14:38:06,460 INFO org.apache.hadoop.hdfs.server.name

Apache hadoop namenode ha和yarn ha ---HDFS高可用性

HDFS高可用性Hadoop HDFS 的两大问题:NameNode单点:虽然有StandbyNameNode,但是冷备方案,达不到高可用--阶段性的合并edits和fsimage,以缩短集群启动的时间--当NameNode失效的时候,Secondary NN并无法立刻提供服务,Secondary NN甚至无法保证数据完整性--如果NN数据丢失的话,在上一次合并后的文件系统的改动会丢失NameNode扩展性问题:单NameNode元数据不可扩展,是整个HDFS集群的瓶颈 Hadoop HDFS高

Hadoop Namenode不能启动

自己在虚拟机上建立伪分布环境,第一天还一切正常,后来发现每次重新开机以后都不能正常启动,在start-dfs.sh之后jps一下发现namenode不能正常启动,按提示找到logs目录下namenode的启动log发现如下异常. [email protected]:~$ jps 5096 ResourceManager 5227 NodeManager 5559 Jps 4742 DataNode 4922 SecondaryNameNode org.apache.hadoop.hdfs.ser

Hadoop NameNode is not formatted.

2014-08-26 20:27:22,712 WARN org.apache.hadoop.hdfs.server.namenode.FSNamesystem: Encountered exception loading fsimagejava.io.IOException: NameNode is not formatted. 1.启动Hadoop [email protected]_160_34_centos:/usr/local/hadoop-2.4.0> sbin/start-all.

hadoop namenode多次格式化后,导致datanode启动不了

jps hadoop namenode -format dfs directory : /home/hadoop/dfs --data --current/VERSION #Wed Jul 30 20:41:03 CST 2014 storageID=DS-ab96ad90-7352-4cd5-a0de-7308c8a358ff clusterID=CID-aa2d4761-974b-4451-8858-bbbcf82e1fd4 cTime=0 datanodeUuid=a3356a09-780

hadoop nameNode 无法启动

/************************************************************STARTUP_MSG: Starting NameNodeSTARTUP_MSG: host = master/192.168.2.1STARTUP_MSG: args = []STARTUP_MSG: version = 0.20.2STARTUP_MSG: build = https://svn.apache.org/repos/asf/hadoop/common/br

对hadoop namenode -format执行过程的探究

  引言 本文出于一个疑问:hadoop namenode -format到底在我的linux系统里面做了些什么? 步骤 第1个文件bin/hadoop Hadoop脚本位于hadoop根目录下的bin目录下, 打开之后阅读源代码: 在这里$1即为参数namenode 将COMMAND赋值为$1,那么COMMAND=namenode 条件判断语句的执行流到达#hdfs下的一行: 因为这一行判断COMMAND是否等于namenode secondarynamenode等之一: 接着往下读: 判断"

WCF关于svcutil生成关于绑定出现 元数据包含无法解析的引用的解决方案

元数据包含无法解析的引用. 没有终结点在侦听可以接受消息的 net.tcp://localhost:8000/service.这通常是由于不正确的地址或者 SOAP 操作导致的.如果存在此情况,请参阅 InnerException 以了解详细信息. 如果希望获取更多帮助,请键入"svcutil /?" 一查原来是没配置元数据端点,这是我重新更改后正确的服务端配置文件,可以比对一下: <?xml version="1.0" encoding="utf-