一:Namenode内存设计
Namenode及其与元数据管理相关的内容,Namenode主要作用和启动流程,元数据组成部分:Fsimage和EditLog,Namenode内存中维护各个部分及其组成部分。
1.1 Namenodey
HDFS的主要功能是对文件进行存储,一方数据被保存在某些位置,另一方面需要的时候能够对被灵活地访问。
HDFS中一个完整的文件由两部分组成,一部分是meta,它由一些被称为namenode的服务节点管理,另一部分是block数据块,它由一些被称为Datanode的服务节点管理。
meta是文件索引(index),block数据块可以理解为真实的保存的数据.
管理元(meta)数据。一个集群保存的所有的文件都会在Namenode保存一份meta视图,以便对文件进行整体管理。
处理客户端请求:client在访问数据时,必须经过namenode。client的大多数访问都和数据相关,而元数据都由namenode管理,因此client第一步就要和namenode交互。
1.2 NameNode启动
要想启动namenode服务,首先要获取一个已编译完成的包。
在${hadoop_home}目录中的启动命令如下:
cd ${hadoop_home}
./sbin/hadoop-daemon.sh start namenode
这条命令本质上是启动namenode服务,将集群已存在meta数据载入namenode内存。入口为org.apache.hadoop.hdfs.server.namenode.NameNode#main().
public static void main(String argv[]) throws Exception {
if (DFSUtil.parseHelpArgument(argv, NameNode.USAGE, System.out, true)) {
System.exit(0);
}
try {
StringUtils.startupShutdownMessage(NameNode.class, argv, LOG);
NameNode namenode = createNameNode(argv, null);
if (namenode != null) {
namenode.join();
}
} catch (Throwable e) {
LOG.fatal("Exception in namenode join", e);
terminate(1, e);
}
}
1.2.1 NameNode启动主流程
NameNode启动过程主要完成3件事件:
(1)加载预先生成的持久化文件fsimage.
Fsimage是一种持久化到磁盘上的文件,里面包含了集群大部分meta数据,持久化