HDFS的元数据持久化

dfs.name.dir

 

这个参数设置HDFS的元数据信息存放在本地操作系统的目录,如果有多个目录用逗号分开。

目录里的文件示例见下图

 

 1049092     2009-11-12 09:15    edits 
 17678000   2009-11-12 08:50    fsimage
 8                 2009-11-12 08:50    fstime 
 100             2009-11-12 08:50    VERSION
 

EditLog

 

Namenode用edits文件来保存对元数据进行的每次操作,比如创建文件,删除文件。类似于mysql中的binlog机制。

 

SecondNameNode

 

SecondNamenode其实只是一个简单的元数据备份进程,它会定期(缺省是1小时)把edits文件的内容合并到fsimage文件,同时保存最新的元数据副本在SecondNamenode进程所在机器的文件系统里

 

Fileimage

 

fsimage+edits才能准确表示内存中的元数据信息,NameNode启动的时候会合并edits文件到fsimage,然后load这个image到内存。这个时候系统处于safemode,等待DataNode上报各自的block数据块信息。

 

SafeMode

 

dfs.safemode.threshold.pct(缺省值0.999f)表示HDFS启动的时候,如果DataNode上报的block个数达到了元数据记录的block个数的0.999倍才可以离开安全模式,否则一直是这种只读模式。如果设为1则HDFS永远是处于SafeMode。

 

下面这行摘录自NameNode启动时的日志(block上报比例1达到了阀值0.9990)

The ratio of reported blocks 1.0000 has reached the threshold 0.9990. Safe mode will be turned off automatically in 18 seconds.

 

Format HDFS系统

 

hadoop namenode -format命令用来初始化HDFS系统,具体就是把dfs.name.dir目录中的四个文件edits,fsimage,fstime ,VERSION初始化。

 

NameSpaceID

NameNode初始化的时候会产生一个随机ID,记录在VERSION文件中的namespaceID字段。

 

cat VERSION
#Thu Nov 12 08:50:20 CST 2009
namespaceID=897887053
cTime=0
storageType=NAME_NODE
layoutVersion=-18

 

DataNode的VERSION文件中的namespaceID必须和NameNode中的一致,否则DataNode注册会失败。

你可能感兴趣的:(hadoop,mysql,image,数据备份)