Namenode学习(1)--概述

来源:互联网 发布:面向对象程序设计java 编辑:程序博客网 时间:2024/05/22 17:48

首先先明确namenode节点需要完成什么工作。

了解一个东西,一般可以从了解它的数据结构(存放什么东西),推断出它担任着什么责任,从事什么工作。

对于namenode,它维护着两种重要的信息:

1:文件元数据(目录/文件名称等)和其数据块索引;--常称为第一种关系;

2:数据块和datanode节点的对应关系。 -常称为第二种关系;

其中:

1.对于文件元数据和数据块索引:

其内容会保存在FSImage(命令空间镜像)和Editlog(编辑日志)中,这数据非常关键,一旦丢失将不可恢复,所以必须做持久化,目前是被namenode持久化在本地硬盘上的,存放的路径通过配置项“dfs.name.dir”来确定的。

2.对于数据块和datanode节点的对应关系:

这是在namenode节点和datanode节点启动后,由datanode节点主动上报,动态建立的,放在内存上。为何不参考上面的方式来存放(做持久化)?我想有如下两种原因:原因1:信息丢失后不影响数据的完整性(多副本机制),同时也是可恢复的,datanode节点会定时上报块信息;原因2:数据变动相对来说比较大,信息量很大,做持久化的代价很大。

为了描述第一种关系,namenode参考了已有文件系统(linux文件系统)的数据结构,i-node(索引节点)是很经典也很成功的描述文件目录结构的数据结构。

原创粉丝点击