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

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


一. NameNode 元数据相关文件目录架构

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

$HADOOP_HOME/bin/hdfs namenode -format
  • 1

格式化完成之后,将会在 $dfs.namenode.name.dir/current 目录下如下的文件结构

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

其中的 dfs.namenode.name.dir 是在 hdfs-site.xml 文件中配置的,默认值如下:

<property>
  <name>dfs.namenode.name.dir</name>
  <value>file://${hadoop.tmp.dir}/dfs/name</value>
</property>
  • 1
  • 2
  • 3
  • 4

hadoop.tmp.dir 是在 core-site.xml 中配置的,默认值如下

<property>
  <name>hadoop.tmp.dir</name>
  <value>/tmp/hadoop-${user.name}</value>
  <description>A base for other temporary directories.</description>
</property>
  • 1
  • 2
  • 3
  • 4
  • 5

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



二. 元数据相关文件解析

下面对 $dfs.namenode.name.dir/current/ 目录下的文件进行解释


2.1 VERSION 文件

VERSION 文件是 Java 属性文件,内容大致如下:

#Sun Dec 20 03:37:06 CST 2015
namespaceID=555938486
clusterID=CID-6d9c34e0-9d84-45be-8442-be73a03ddea8
cTime=0
storageType=NAME_NODE
blockpoolID=BP-391569129-10.6.3.43-1450226754562
layoutVersion=-59
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

其中

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

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

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

4. blockpoolID:是针对每一个 Namespace 所对应的 blockpool 的 ID,上面的这个 BP-391569129-10.6.3.43-1450226754562 就是在我的 nameserver1 的 namespace下的存储块池的 ID,这个 ID 包括了其对应的 NameNode 节点的 ip 地址。

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

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

  • 使用如下命令格式化一个 Namenode:
$HADOOP_HOME/bin/hdfs namenode -format [-clusterId <cluster_id>]
  • 1

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

  • 使用如下命令格式化其他 Namenode:
$HADOOP_HOME/bin/hdfs namenode -format -clusterId <cluster_id>
  • 1
  • 升级集群至最新版本。在升级过程中需要提供一个 ClusterID,例如:
$HADOOP_PREFIX_HOME/bin/hdfs start namenode   --config $HADOOP_CONF_DIR  -upgrade -clusterId <cluster_ID>
  • 1

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


2.2 seen_txid 文件

$dfs.namenode.name.dir/current/seen_txid 这个文件非常重要,是存放 transactionId 的文件,format 之后是 0,它代表的是 namenode 里面的 edits_*文件的尾数,namenode 重启的时候,会按照 seen_txid 的数字,循序从头跑 edits_0000001~ 到 seen_txid 的数字。所以当你的 hdfs 发生异常重启的时候,一定要比对 seen_txid 内的数字是不是你 edits 最后的尾数,不然会发生建置 namenode 时 metaData 的资料有缺少,导致误删 Datanode 上多余 Block 的资讯。


2.3 fsimage 和 edits 及 md5 校验文件

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



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

其中存在大量的以 edits 开头的文件和少量的以 fsimage 开头的文件。那么这两种文件到底是什么,有什么用?下面对这两中类型的文件进行详解。在进入下面的主题之前先来搞清楚 edits 和 fsimage 文件的概念:


3.1 edits 和 fsimage 文件的概念

1. fsimage文件 
fsimage 文件其实是 Hadoop 文件系统元数据的一个永久性的检查点,其中包含 Hadoop 文件系统中的所有目录和文件 idnode 的序列化信息;

2. edits文件 
存放的是 Hadoop文件系统的所有更新操作的路径,文件系统客户端执行的所以写操作首先会被记录到 edits文件中。


3.2 fsimage 和 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 启动的时候非常长!


其他信息

备用 NameNode

ameNode保存了文件系统的修改信息,并将其作为一个本地的日志文件edits。当NameNode启动时,它从映像文件fsimage中读取HDFS的状态,并开始操作一个空的edits文件。由于NameNode仅在启动时合并fsimage和各edits文件,所以日志文件edits在一个很忙的集群上会变得越来越大。大日志文件edits另一个副作用是会使NameNode在下次启动时变长。

备用NameNode周期性地合并fsimage和edits文件,将edits限制在一个范围内,备用NameNode与主NameNode通常运行在不同的机器上,因为备用NameNode与主NameNode有同样的内存要求。

备用NameNode上检查点进程的运行受两个配置参数控制:

dfs.namenode.checkpoint.period,两次连续的检查点之间的最大的时间间隔,缺省值是1小时
dfs.namenode.checkpoint.txns,最大的没有没有执行检查点的事务数目,即使执行检查点的周期未到,也将执行一次紧急检查点,缺省值是1百万
  • 1
  • 2
  • 3

备用NameNode存储最新的检查点,它目录结构与主NameNode一致,所以这个备用的检查点映像在主NameNode需要时,总是能访问的。

Checkpoint节点

NameNode采用两个文件来保存命名空间的信息:fsimage,它是最新的已执行检查点的命名空间的信息;edits,它是执行检查点后命名空间变化的日志文件。当NameNode启动时,fsimage和edits合并,提供一个最新的文件系统的metadata,然后NameNode将新的HDFS状态写入fasimage,并开始一个新的edits日志。

Checkpoint节点周期性地创建命名空间的检查点。它从NameNode下载fsimage和edits,在本地合并它们,并将其发回给活动的NameNode。Checkpoint节点通常与NameNode不在同一台机器上,因为它们有同样的内存要求。Checkpoint节点由配置文件中的bin/hdfs namenode –checkpoint来启动。

Checkpoint(或Backup)节点的位置以及附带的web接口由dfs.namenode.backup.address anddfs.namenode.backup.http-address参数指定。

Checkpoint进程的运行受两个配置参数控制:

dfs.namenode.checkpoint.period,两次连续的检查点之间的最大的时间间隔,缺省值是1小时
 dfs.namenode.checkpoint.txns,最大的没有没有执行检查点的事务数目,即使执行检查点的周期未到,也将执行一次紧急检查点,缺省值是1百万
  • 1
  • 2
  • 3

Checkpoint节点上保存的最新的检查点,其目录结构与NameNode上一样,这样,如果需要,NameNode总是可以读取这上面的已执行检查点的文件映像。参见“import checkpoint”。

多个Checkpoint节点可以在集群的配置文件中指定。

参考 http://blog.csdn.net/guxch/article/details/18189105

Hadoop2.2.0安装配置手册!完全分布式Hadoop集群搭建过程

PS:dataNode 无法启动是配置过程中最常见的问题,主要原因是多次format namenode 造成namenode 和datanode的clusterID不一致。建议查看datanode上面...
  • zzu09huixu
  • zzu09huixu
  • 2014年04月29日 16:48
  • 5929

hadoop新框架Yarn详解

  • lifuxiangcaohui
  • lifuxiangcaohui
  • 2014年09月06日 23:16
  • 6441
Hadoop MapReduceV2(Yarn) 框架简介 原 Hadoop MapReduce 框架的问题 对于业界的大数据存储及分布式处理系统来说,Hadoop 是耳熟能详的卓越开源分...
广告

Hadoop HDFS本地存储目录结构解析

  • opensure
  • opensure
  • 2016年05月19日 11:38
  • 14960
HDFS metadata以树状结构存储整个HDFS上的文件和目录,以及相应的权限、配额和副本因子(replication factor)等。本文基于Hadoop2.6版本介绍HDFS Namenod...

名字节点(NameNode)目录结构

  • yang004
  • yang004
  • 2016年12月16日 09:46
  • 719
名字节点(NameNode)目录结构介绍

hadoop2解决 NameNode 单点故障问题的 高可用集群配置

以前用hadoop2.2.0只搭建了hadoop的高可用,但在hadoop2.2.0中始终没有完成YARN HA的搭建,直接下载了hadoop最新稳定版本2.6.0完成了YARN HA及HADOOP ...
  • XuekunLu
  • XuekunLu
  • 2016年01月13日 14:53
  • 3599

白话聊聊Hadoop的Namenode是怎么管理元数据的?

什么是元数据呢?百度百科的解释是这样的,描述数据的数据(data about data),主要是描述数据属性(property)的信息,用来支持如指示存储位置、历史数据、资源查找、文件记录等功能。元...
  • lepton126
  • lepton126
  • 2016年11月16日 09:19
  • 1772

hadoop分析之一HDFS元数据解析

  • kntao
  • kntao
  • 2012年07月20日 23:33
  • 18707
1、元数据(Metadata):维护HDFS文件系统中文件和目录的信息,分为内存元数据和元数据文件两种。NameNode维护整个元数据。 HDFS实现时,没有采用定期导出元数据的方法,而是采用元数据...

NameNode中几个关键的数据结构

  • wuzongpo
  • wuzongpo
  • 2012年03月27日 17:50
  • 3473
转载地址:http://blog.csdn.net/AE86_FC/article/details/5842020 NameNode启动过程详细剖析 NameNode中几个关键的数据结构 F...

hadoop集群中的日志文件

  • jediael_lu
  • jediael_lu
  • 2015年02月28日 20:37
  • 10606
hadoop存在多种日志文件,其中master上的日志文件记录全面信息,包括slave上的jobtracker与datanode也会将错误信息写到master中。而slave中的日志主要记录完成的ta...

hadoop日志存放路径(日志讲解好文章)&hadoop历史服务器

Hadoop的日志有很多种,很多初学者往往遇到错而不知道怎么办,其实这时候就应该去看看日志里面的输出,这样往往可以定位到错误。Hadoop的日志大致可以分为两类:(1)、Hadoop系统服务输出的日志...
  • qq_27231343
  • qq_27231343
  • 2016年05月03日 16:29
  • 2720

hadoop namenode启动不了解决方案

  • qq_23617681
  • qq_23617681
  • 2016年04月26日 10:55
  • 9303
hadoop集群启动namenode时,用jps查看datanode没有启动。 原因分析: 由于在core-site.xml,hdfs-site.xml文件中,我没有设置如下内容。 core-si...

解决Hadoop namenode无法启动以及修改hdfs的存放位置

重启之后,遇到了一个问题,执行start-all.sh之后,执行JPS发现namenode没有启动。 每次开机都得重新格式化一下namenode才可以。hadoop.tmp.dir是hadoop文件...
  • scgaliguodong123_
  • scgaliguodong123_
  • 2015年03月20日 22:02
  • 7152

hdfs搭建2 启动backupNode和SecondaryNamenode

1.       根据上一章配好的集群,现为Myhost1配置backupNode和SecondaryNamenode, 由于机器有限,这里就不为Myhost2配置backupNode和Secon...
  • lskyne
  • lskyne
  • 2013年05月07日 16:46
  • 2188

hadoop 0.23 HDFS的搭建与配置

  • bertzhang
  • bertzhang
  • 2011年12月07日 17:52
  • 9396
hadoop 0.23.0比先前的0.20版本有了很大的改动,而我目前最感兴趣的还是HDFS部分的federation部分,由于相关配置资料比较少,下面就把这两天配置情况总结一下作为备忘: 要配置h...

HADOOP之NAMENODE元数据管理(一点理解记下来只是为了帮助自己记忆)

最近一直在研究hadoop,看了一遍培训的视频,没怎么记住,然后又开始看第二遍,感觉懂了好多,随手记下来.hadoop的元数据是由namenode管理的,但是怎么保持读取速度和写的时候不会冲突呢.如果...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值