一、为什么namenode持久化
namenode通过内存存储hdfs集群的元数据(目录结构 文件信息 块对应关系),如果内存出现问题,那么会数据丢失,需要通过持久化,把内存中的数据定期的存储在硬盘中,进而保证namenode的数据安全。
二、持久化的原理
1、FSImage (某一时刻 namenode镜像数据)
默认存储位置
/opt/install/hadoop-2.5.2/data/tmp/dfs/name
2、EditsLog (某一时刻后的,写日志操作)
FSImage 会在集群格式化时,生成空的FSImage ,后续用户的操作都会写入到EditsLog中
每一次重启namenode时,把EditsLog和FSImage的数据在内存中合并,并生成一哥新的EditsLog,
时间没到制定时间点或没有到事务数 FSImage时不会和EditsLog合并
时间到制定时间点或到事务数 FSImage时会和EditsLog合并,生成新的FSImage(有数据)和新的EditsLog
相关配置可以打开http://hadoop.apache.org/docs/r2.5.2/
配置这些文件要在
cd /opt/install/hadoop-2.5.2/etc/hadoop
找到hdfs-site.xml文件添加
<property>
<name>dfs.namenode.name.dir </name>
<value>/opt/suns/fsimage</value>
</property>
<property>
<name>dfs.namenode.edits.dir </name>
<value>/opt/suns/editslog</value>
</property>
安全模式 safemode
namenode从新启动时,通过安全模式保证EditsLog和FSImage的合并,在这个过程中,只允许client进行读操作,而不能进行写操作。
原文地址:https://www.cnblogs.com/zhu-lin-11211/p/12115726.html