首页 > 代码库 > NameNode跟secondarynamenode的执行过程

NameNode跟secondarynamenode的执行过程

一、NameNode详解
文件包括:
fsimage:元数据镜像文件。存储某一时段NameNode内存元数据信息。
edits:操作日志文件。
fstime:保存最近一次checkpoint的时间
以上这些文件是保存在linux的文件系统中。
/data/hadoop/hdfs/name
[hadoop@master name]$ ls
current  image  in_use.lock  previous.checkpoint
[hadoop@master name]$ cd current/
[hadoop@master current]$ ls
edits  fsimage  fstime  VERSION
如果想使用命令hadoop namenode –format命令格式化namenode 发现这个namenode下面的in_use.lock 就不能格式化
More in_use.lock 发现是空的 ----- 表示这个文件存在 就是在使用中
说一下current 进入这个文件夹
有四个文件 有一个VERSION 
打开这个 
namespace ---- 命令空间是相对独立的名称空间
namespaceID=-xxxx ---- 指的是文件系统的ID
datanode中的块一定要和namenode之间有匹配关系 ----- 如果两边的namespaceID相同的 --- 这样 通过namespaceID相同 就匹配datanode和
多次执行 hadoop -format 多次之后  出错 因为namespaceID被格式化之后改变了 和datanode中的namespaceID对应不上  ----- 所以第一次之后就出错了 
提示:in_use.lock :如果你想格式化这个namenode的话,hadoop会找这个文件,如果存在的话会提示你Re-format filesystem in /data/hadoop/hdfs/name ? (Y or N) ,以此为凭据知道namenode是否已经格式化过。

二、namenode跟secondarynamenode的执行过程


fsimage很重要,所以被备份了

core-default.xml

<property>

  <name>hadoop.tmp.dir</name>

  <value>/tmp/hadoop-${user.name}</value>

  <description>A base for other temporary directories.</description>

</property>

hdfs-default.xml

<property>

  <name>dfs.name.dir</name>

  <value>${hadoop.tmp.dir}/dfs/name</value>

  <description>Determines where on the local filesystem the DFS name node

      should store the name table(fsimage).  If this is a comma-delimited list

      of directories then the name table is replicated in all of the

      directories, for redundancy. </description>

</property>

HA的一个解决方案。但不支持热备。配置即可。

(见源码)

执行过程:从NameNode上下载元数据信息(fsimage,edits),然后把二者合并,生成新的fsimage,在本地保存,并将其推送到NameNode,同时重置NameNode的edits.

默认在安装在NameNode节点上,但这样...不安全!

Datanode的数据并不是无限存储的,决定与namenode的fsimage,因为fsimage是放在内存中的,内存不可能上百T吧!(内存中放不下了,fsimage设计的时候是被放在内存中的)namenode的元数据信息占内存。

1、给namenode加内存

2、尽量传大文件。

3、SequenceFile

4、增加block块的大小(这个看环境,就是看一般上传的文件有多大来设计的)