一、介绍

HDFS metadata以树状结构存储整个HDFS上的文件和目录,以及相应的权限、配额和副本因子(replication factor)等。本文基于Hadoop2.6版本介绍HDFS Namenode本地目录的存储结构和Datanode数据块存储目录结构,也就是hdfs-site.xml中配置的dfs.namenode.name.dir和dfs.datanode.data.dir

二、NameNode

HDFS metadata主要存储两种类型的文件

1、fsimage:记录某一永久性检查点(Checkpoint)时整个HDFS的元信息

2、edits:所有对HDFS的写操作都会记录在此文件中

HDFS会定期(dfs.namenode.checkpoint.period,默认3600秒)的对最近的fsimage和一批新edits文件进行Checkpoint(也可以手工命令方式),Checkpoint发生后会将前一次Checkpoint后的所有edits文件合并到新的fsimage中,HDFS会保存最近两次checkpoint的fsimage。Namenode启动时会把最新的fsimage加载到内存中。

标准的dfs.namenode.name.dir目录结构,注意edits和fsimage也可以通过配置放到不同目录中

  1. ├── current
  2. ├── VERSION
  3. ├── edits_0000000000000000001-0000000000000000007
  4. ├── edits_0000000000000000008-0000000000000000015
  5. ├── edits_0000000000000000016-0000000000000000022
  6. ├── edits_0000000000000000023-0000000000000000029
  7. ├── edits_0000000000000000030-0000000000000000030
  8. ├── edits_0000000000000000031-0000000000000000031
  9. ├── edits_inprogress_0000000000000000032
  10. ├── fsimage_0000000000000000030
  11. ├── fsimage_0000000000000000030.md5
  12. ├── fsimage_0000000000000000031
  13. ├── fsimage_0000000000000000031.md5
  14. └── seen_txid
  15. └── in_use.lock

1、VERSION

  1. #Thu May 19 10:13:22 CST 2016
  2. namespaceID=1242163293
  3. clusterID=CID-124668a8-9b25-4ca7-97bf-5dd5c25041a9
  4. cTime=1455091012961
  5. storageType=NAME_NODE
  6. blockpoolID=BP-180412957-192.168.1.8-1419305031110
  7. layoutVersion=-60
  • layoutVersion - HDFS metadata版本号,通常只有HDFS增加新特性时才会更新这个版本号
  • namespaceID/clusterID/blockpoolID - 这三个ID在整个HDFS集群全局唯一,作用是引导Datanode加入同一个集群。在HDFS Federation机制下,会有多个Namenode,所以不同Namenode直接namespaceID是不同的,分别管理一组blockpoolID,但是整个集群中,clusterID是唯一的,每次format namenode会生成一个新的,也可以使用-clusterid手工指定ID
  • storageType - 有两种取值NAME_NODE /JOURNAL_NODE,对于JournalNode的参数dfs.journalnode.edits.dir,其下的VERSION文件显示的是JOURNAL_NODE
  • cTime - HDFS创建时间,在升级后会更新该值

2、edits_start transaction ID-end transaction ID

finalized edit log segments,在HA环境中,Standby Namenode只能读取finalized log segments,

3、edits_inprogress__start transaction ID

当前正在被追加的edit log,HDFS默认会为该文件提前申请1MB空间以提升性能

4、fsimage_end transaction ID

每次checkpoing(合并所有edits到一个fsimage的过程)产生的最终的fsimage,同时会生成一个.md5的文件用来对文件做完整性校验

5、seen_txid

保存最近一次fsimage或者edits_inprogress的transaction ID。需要注意的是,这并不是Namenode当前最新的transaction ID,该文件只有在checkpoing(merge of edits into a fsimage)或者edit log roll(finalization of current edits_inprogress and creation of a new one)时才会被更新。

这个文件的目的在于判断在Namenode启动过程中是否有丢失的edits,由于edits和fsimage可以配置在不同目录,如果edits目录被意外删除了,最近一次checkpoint后的所有edits也就丢失了,导致Namenode状态并不是最新的,为了防止这种情况发生,Namenode启动时会检查seen_txid,如果无法加载到最新的transactions,Namenode进程将不会完成启动以保护数据一致性。

6、in_use.lock

防止一台机器同时启动多个Namenode进程导致目录数据不一致

三、DataNode

一个标准的dfs.datanode.data.dir目录结构

  1. ├── current
  2. ├── BP-1079595417-192.168.2.45-1412613236271
  3. ├── current
  4. ├── VERSION
  5. ├── finalized
  6. └── subdir0
  7. └── subdir1
  8. ├── blk_1073741825
  9. └── blk_1073741825_1001.meta
  10. │── lazyPersist
  11. └── rbw
  12. ├── dncp_block_verification.log.curr
  13. ├── dncp_block_verification.log.prev
  14. └── tmp
  15. └── VERSION

1、BP-random integer-NameNode-IP address-creation time

BP代表BlockPool的意思,就是上面Namenode的VERSION中的集群唯一blockpoolID,如果是Federation HDFS,则该目录下有两个BP开头的目录,IP部分和时间戳代表创建该BP的NameNode的IP地址和创建时间戳

2、VERSION

3、finalized/rbw目录

这两个目录都是用于实际存储HDFS BLOCK的数据,里面包含许多block_xx文件以及相应的.meta文件,.meta文件包含了checksum信息。

rbw是“replica being written”的意思,该目录用于存储用户当前正在写入的数据。

参考:

https://blog.csdn.net/opensure/article/details/51452058?utm_source=copy

http://www.360doc.com/content/19/0907/09/5731319_859613182.shtml

https://blog.csdn.net/m0_37613244/article/details/109920466

HDFS存储目录分析的更多相关文章

  1. Hadoop HDFS元数据目录分析

    元数据目录分析 在第一次部署好Hadoop集群的时候,我们需要在NameNode(NN)节点上格式化磁盘: $HADOOP_HOME/bin/hdfs namenode -format 格式化完成之后 ...

  2. Hadoop 目录分析及存储机制

    NameNode元数据目录分析 在第一次部署好Hadoop集群的时候,我们需要在NameNode(NN)节点上格式化磁盘: $HADOOP_HOME/bin/hdfs namenode -format ...

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

    转自:https://blog.csdn.net/superman_xxx/article/details/51689398 HDFS metadata以树状结构存储整个HDFS上的文件和目录,以及相 ...

  4. Hadoop2源码分析-HDFS核心模块分析

    1.概述 这篇博客接着<Hadoop2源码分析-RPC机制初识>来讲述,前面我们对MapReduce.序列化.RPC进行了分析和探索,对Hadoop V2的这些模块都有了大致的了解,通过对 ...

  5. Hbase写入hdfs源码分析

    版权声明:本文由熊训德原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/258 来源:腾云阁 https://www.qclo ...

  6. Hadoop HDFS DataNode 目录结构

    DataNode 目录结构 和namenode不同的是,datanode的存储目录是初始阶段自动创建的,不需要额外格式化. 1.    在/opt/module/hadoop-2.7.2/data/t ...

  7. HDFS源码分析之UnderReplicatedBlocks(一)

    http://blog.csdn.net/lipeng_bigdata/article/details/51160359 UnderReplicatedBlocks是HDFS中关于块复制的一个重要数据 ...

  8. HDFS源码分析数据块校验之DataBlockScanner

    DataBlockScanner是运行在数据节点DataNode上的一个后台线程.它为所有的块池管理块扫描.针对每个块池,一个BlockPoolSliceScanner对象将会被创建,其运行在一个单独 ...

  9. HDFS源码分析之UnderReplicatedBlocks(二)

    UnderReplicatedBlocks还提供了一个数据块迭代器BlockIterator,用于遍历其中的数据块.它是UnderReplicatedBlocks的内部类,有三个成员变量,如下: // ...

随机推荐

  1. 2021.08.16 P1260 工程规划(差分约束)

    2021.08.16 P1260 工程规划(差分约束) 重点: 1.跑最短路是为了满足更多约束条件. P1260 工程规划 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题意: 造 ...

  2. golang内存对齐分析(转载)

    问题 type Part1 struct { a bool b int32 c int8 d int64 e byte } 在开始之前,希望你计算一下 Part1 共占用的大小是多少呢? func m ...

  3. Vim 中进行文本替换

    Vim 中进行文本替换 格式 用法 :[range]s/from/to/[flags] tips: [] 表示该内容可选 参数 from 需要替换的字符串(可以是正则表达式) to 替换后的字符串 r ...

  4. vue 排错

    error The template root requires exactly one element vue/no-multiple-template-root ... 解决办法: .eslint ...

  5. 4.文件共享总结上篇-Windows之间文件共享

    本文章包含上篇和下篇两部分,今天我们主要讨论Windows系统之间的文件互访 Windows系统之间文件互传 1)利用Windows自带的文件共享服务 本次试验以Win7为服务器端,win10为客户端 ...

  6. LVM 逻辑卷学习

    一个执着于技术的公众号 前言 每个Linux使用者在安装Linux时都会遇到这样的困境:在为系统分区时,如何精确评估和分配各个硬盘分区的容量,因为系统管理员不但要考虑到 当前某个分区需要的容量,还要预 ...

  7. Linux嵌套目录权限的比较探究

    在/tmp目录下新建一个嵌套目录,名字分别为test_0.test_1.test_2.在test_2目录下新建普通文件,名为tryme.设置test_0和test_2的权限为777,设置test_1的 ...

  8. 四、针对redis容灾切换导致"脑裂"的情况

    网上参考到别人博客说,redis容灾切换的时候,有几率出现脑裂的情况. 什么是脑裂: sentinel判断master宕机,切换slave为新master的过程中,业务数据还在持续往原master写入 ...

  9. 好客租房48-组件的props(基本使用)

    组件是封闭的 要接受外部数据应该通过props来实现 props的作用:接受传递给组件的数据 传递数据:给组件标签添加属性 接收数据:函数组件通过参数props接收数据 类组件通过this.props ...

  10. [SQLServer]NetCore中将SQLServer数据库备份为Sql脚本

    NetCore中将SQLServer数据库备份为Sql脚本 描述: 最近写项目收到了一个需求, 就是将SQL Server数据库备份为Sql脚本, 如果是My Sql之类的还好说, 但是在网上搜了一大 ...