#Hadoop 管理(一)

namenode 结构目录

namenode 被格式化后所产生的目录

${dfs.name.dir}
|—–current
 |—-VERSION
 |—-edits
 |—-fsimage
 |—–fstime

version 文件

#Tue Mar 10 19:21:36 GMT 2009
namespaceID=134368441
cTime=0
storageType = NAME_NODE
layoutVersion = -18

VERSION 文件是一个Java属性文件
其中layoutVersion=-18,描述HDFS持久性数据结构(布局)的版本,但是该版本号与Hadoop发布包的版本号无关。重要布局变化,版本号便会递减。

namespaceIdD是文件系统的唯一标识
cTime 标记namenode的创建时间,刚刚格式化,这个值为0;但是文件系统升级后,该值会更新到新的时间戳
storageType说明存储目录包含的是namenode的数据结构
namenode 的存储目录还包含edits,fsimage,stime等二进制文件

文件系统映像和编辑日志

文件系统客户端执行写操作时(创建或者移动文件),这些操作首先被记录到编辑日志中。namenode在内存中维护文件系统的元数据;当编辑日志被修改时,相关元数据信息也同步更新。
fsiamge文件是文件系统元数据的一个永久性检查点。它是一个大型文件,不是每一个写操作都会更新此文件。一旦namenode发生故障,可以先把fsimage文件载入到内存重构新近的元数据,再执行编辑日志记录的各项操作。

fsimage 文件包含文件系统中的所有目录和文件inode的序列化信息,(inode是指在许多“类Unix文件系统”中的一种数据结构。 每个inode保存了文件系统中的一个文件系统对象(包括文件、目录、设备文件、socket、管道, 等等)的元信息数据,但不包括数据内容或者文件名)
数据块存储在datanode中,但fsimage文件并不描述datanode。取而代之的是,namenode将这种映射关系放在内存中。当datanode加入集群时,namenode向datanode索取块列表以建立映射关系;namenode还将定期征询datanode以确保它拥有最新的映射。

下图为创建检查点的过程
这里写图片描述
1. secondary namenode 请求primary namenode 停止使用edits文件,暂时将新的写操作记录到一个新文件中。
2. secondary namenode 从 primary namenode 获取 fsimage 和 edits (使用 http get )
3. secondary namenode 将 fsimage 文件加入 memory ,逐一执行edits文件中的操作,创建新的fsimage文件。
4. secondary namenode 将新的fsimage文件发送回primary namenode(使用 http post)
5. primary namenode用从secondary namenode接收的fsimage文件替换旧的fsimage文件;用步骤1产生的新的edits文件替换旧的edits文件。同时,还更新fstime文件来记录检查点执行的时间。

datanode的current目录中的其他文件都有blk_前缀,包含HDFS块文件和块的元数据文件(含.meta后缀)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章