Namenode如何保存文件信息Namenode如何查找文件

原文链接

过程总览

hdfs文件均存放在datanode上,namenode上不会存放文件。当客户上传一个文件后,namenode会先对文件作相应的处理(比如按照block大小进行分割)。这里主要讲述存放的一个整体过程以及如何快速的找到存放的节点位置信息。

实现namenode的源码中有一个与文件系统存储和管理有关的关键类FSNameSystem,里面有以下的一些概念:

INode: 用来存放文件及目录的基本信息:名称,父节点、修改时间,访问时间以及UGI信息。
INodeFile: 继承自INode,除INode信息外,还有组成这个文件的Blocks列表,重复因子,Block大小
INodeDirectory:继承自INode,此外还有一个INode列表来组成文件或目录树结构
Block(BlockInfo):组成文件的物理存储,有BlockId,size ,以及时间戳
BlocksMap: 保存数据块到INode和DataNode的映射关系
FSDirectory:保存文件树结构,HDFS整个文件系统是通过FSDirectory来管理
FSImage:保存的是文件系统的目录树
FSEditlog: 文件树上的操作日志
FSNamesystem: HDFS文件系统管理

思路一

Namenode内有两张重要的映射关系表:文件系统的命名空间,文件-block映射表。这对应了两个步骤:1. 文件按照blocksize分割成文件块 2. 文件块和block块的映射。

至此,我们给出一个查找文件存放位置的思路,即首先找到每个文件对应的文件块。具体来说,可以通过 workspce/hdfs/name/current 目录下的edits和fsimage文件查看。

注意,这里的workspace目录即为hdfs-site.xml等配置文件中所指路径。

通过文件块给出的block的id号找到block信息,即可找到对应位置。这中间会找到一个BlockMap,详见参考[1]。

current下主要有两大类文件 Edits 和 Fsimage([2][3]):

Fsimage(文件系统元数据):是 Hadoop 文件系统元数据的一个永久性的检查点,其中包含Hadoop文件系统中的所有目录和文件 idnode 的序列化信息

Edits(编辑日志):存放的是 Hadoop 文件系统的所有更新操作的路径,文件系统客户端执行的所有写操作首先会被记录到 edits 文件中

直接vim上面两种文件得到的是相关的序列化信息(总之类似乱码,看不懂);需要运用 hadoop 提供的相关机制进行查看(参考[4][5])。

– Fsimage

$cd ~/workspace/…/current
$hdfs oiv -p XML -i /home/hadoop/cloud/workspace/hdfs/name/current/fsimage_xxx -o fsimage1.xml
$vim fsimage1.xml
– Edits

$cd ~/workspace/…/current
$hdfs oev -i /home/hadoop/cloud/workspace/hdfs/name/current/edits_xxx -o edits1.xml
$vim edits.xml
相关的fsimage和edits的资料可参见[6][7]。

在上面提到的datanode下的current下面会有一个BP开头的目录,里面有个current/finalized,这就是存储的各个文件块block。

思路二

Hadoop直接提供了查找datanode信息的指令fsck [8]

$hdfs fsck /input -files -blocks -locations -racks
files 代表检出所有文件状态
blocks 代表打印文件的block报告
locations代表打印出文件存放的datanode(分成多少文件块就打印出多少条信息)
racks代表打印出存放的机架位置

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值