HDFS 核心组件数据目录元数据介绍

分享 青牛 ⋅ 于 2016-12-16 11:23:40 ⋅ 最后回复由 databoy 2016-12-16 11:25:47 ⋅ 6286 阅读

HDFS元数据

HDFS元数据用树形结构保存了hdfs目录和文件结构,同时保存权限/所有者/容量/副本等信息。不要去修改hdfs元数据目录和文件否则会造成数据丢失。

持久化hdfs元数据主要有两类数据

  • fsimage 保存整个文件系统在某个时间点的完整状态,简单理解为元数据内存结构的持久化文件。所有的文件系统改动都会分配一个自增的事务ID,fsimage代表文件系统在截止到某个事务ID所有改动的最终状态。
  • edits 记录了fsimage状态后每次文件系统的改动(创建,删除,修改),fsimage加上edits记录回放可以使文件系统达到最新状态。

NameNode

元数据目录配置在 dfs.namenode.name.dir 参数中,默认存放了fsimage和edits文件。

root@3849e631794f:~# tree .
.
|-- current
|   |-- VERSION
|   |-- edits_0000000000000000126-0000000000000000127
|   |-- edits_0000000000000000128-0000000000000000129
|   |-- edits_0000000000000000130-0000000000000000131
|   |-- edits_0000000000000000132-0000000000000000133
|   |-- edits_0000000000000000134-0000000000000000135
|   |-- edits_0000000000000000136-0000000000000000137
|   |-- edits_0000000000000000138-0000000000000000139
|   |-- edits_0000000000000000140-0000000000000000141
|   |-- edits_0000000000000000142-0000000000000000344
|   |-- edits_0000000000000000345-0000000000000000346
|   |-- edits_inprogress_0000000000000000347
|   |-- fsimage_0000000000000000344
|   |-- fsimage_0000000000000000344.md5
|   |-- fsimage_0000000000000000346
|   |-- fsimage_0000000000000000346.md5
|   `-- seen_txid
`-- in_use.lock

root@3849e631794f:~# cat VERSION
namespaceID=399137647
clusterID=CID-b751f050-9af4-43d6-9230-00df3bf8022c
cTime=0
storageType=NAME_NODE
blockpoolID=BP-617896218-172.17.0.2-1467167865960
layoutVersion=-60
  • VERSION
    layoutVersion 表示hdfs meta文件的格式版本,不同版本的hdfs格式可能不一样
    namespaceID/clusterID/blockpoolID hdfs集群的唯一标实,防止datanode注册错误,
    storageType meta文件类型,NAME_NODE or JOURNAL_NODE
    cTime 记录文件系统升级的时间
  • edits_start transaction ID-end transaction ID: edits log的一段,记录两个事物ID间的文件系统操作,此文件不会再被修改
  • edits_inprogress_start transaction ID: 当前开始事务ID的所有文件系统操作
  • fsimage_end transaction ID: 事务ID后的完整状态的fsimage,还有一个md5文件做校验,防止磁盘错误。
  • seen_txid: 最后一个检查点的事务ID
  • in_use.lock: namenode进程的锁文件,防止多个NameNode并发修改

NameNode 在执行 HDFS 客户端提交的创建文件或者移动文件这样的写操作的时候,会首先把这些操作记录在 EditLog 文件之中,然后再更新内存中的文件系统镜像。内存中的文件系统镜像用于 NameNode 向客户端提供读服务,而 EditLog 仅仅只是在数据恢复的时候起作用。记录在 EditLog 之中的每一个操作又称为一个事务,每个事务有一个整数形式的事务 id 作为编号。EditLog 会被切割为很多段,每一段称为一个 Segment。正在写入的 EditLog Segment 处于 in-progress 状态,其文件名形如 editsinprogress${start_txid},其中${starttxid} 表示这个 segment 的起始事务 id。而已经写入完成的 EditLog Segment 处于 finalized 状态,其文件名形如 edits${start_txid}-${end_txid},其中${start_txid} 表示这个 segment 的起始事务 id,${end_txid} 表示这个 segment 的结束事务 id。

DataNode

DataNode 的元数据和数据目录,由dfs.datanode.data.dir 参数配置

root@3849e631794f:~# tree .
.
|-- current
|   |-- BP-617896218-172.17.0.2-1467167865960
|   |   |-- current
|   |   |   |-- VERSION
|   |   |   |-- finalized
|   |   |   |   `-- subdir0
|   |   |   |       `-- subdir0
|   |   |   |           |-- blk_1073741825
|   |   |   |           |-- blk_1073741825_1001.meta
|   |   |   |           |-- blk_1073741830
|   |   |   |           |-- blk_1073741830_1006.meta
|   |   |   |           |-- blk_1073741831
|   |   |   |           |-- blk_1073741831_1007.meta
|   |   |   |           |-- blk_1073741840
|   |   |   |           |-- blk_1073741840_1016.meta
|   |   |   |           |-- blk_1073741841
|   |   |   |           |-- blk_1073741841_1017.meta
|   |   |   |           |-- blk_1073741842
|   |   |   |           |-- blk_1073741842_1018.meta
|   |   |   |           |-- blk_1073741849
|   |   |   |           |-- blk_1073741849_1025.meta
|   |   |   |           |-- blk_1073741850
|   |   |   |           |-- blk_1073741850_1026.meta
|   |   |   |           |-- blk_1073741851
|   |   |   |           |-- blk_1073741851_1027.meta
|   |   |   |           |-- blk_1073741852
|   |   |   |           `-- blk_1073741852_1028.meta
|   |   |   `-- rbw
|   |   |-- dncp_block_verification.log.curr
|   |   |-- dncp_block_verification.log.prev
|   |   `-- tmp
|   `-- VERSION
`-- in_use.lock

root@3849e631794f:~# cat VERSION
storageID=DS-60143603-ddf2-4422-9e81-adcbcd72f017
clusterID=CID-b751f050-9af4-43d6-9230-00df3bf8022c
cTime=0
datanodeUuid=1150ac32-5f4a-45b2-a8a3-d8032dcd846e
storageType=DATA_NODE
layoutVersion=-56

root@3849e631794f:~/current# cat VERSION
namespaceID=399137647
cTime=0
blockpoolID=BP-617896
  • BP-random integer-NameNode-IP address-creation time: blockpoolID的名字, “BP” 是 “block pool” 缩写。如果是federated 部署会有多个BP目录。
  • VERSION:和namenode定义相似,namespaceID/clusterID/blockpoolID要和相应的namenode配置一致
  • finalized/rbw:这两个目录都是存储block数据,rbw存放的是正在复制副本。
  • lazyPersist:hdfs新特性,数据可先写入内存延迟写入磁盘。如果开启此特性才有
  • dncp_block_verification.log:周期性做block校验日志,.curr和.prev两个文件切换
  • in_use.lock: datanode进程的锁文件,防止多个DataNode并发修改
版权声明:原创作品,允许转载,转载时务必以超链接的形式表明出处和作者信息。否则将追究法律责任。来自海汼部落-青牛,http://hainiubl.com/topics/20
本帖由 青牛 于 6年前 解除加精
回复数量: 0
    暂无评论~~
    • 请注意单词拼写,以及中英文排版,参考此页
    • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
    • 支持表情,可用Emoji的自动补全, 在输入的时候只需要 ":" 就可以自动提示了 :metal: :point_right: 表情列表 :star: :sparkles:
    • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif,教程
    • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
    Ctrl+Enter