1. NameNode与Secondary NameNode
简述
NameNode负责管理编辑日志(edits文件)和记录镜像(fsimage);
NameNode在运行过程,所有的HDFS的操作都会被记录在当前edits文件中,且按照操作序号进行排序。
SecondrayNameNode协助NameNode,在每一个checkPoint定时1小时(或一百万条操作)对历史edits文件进行合并。在合并时,snn会从nn复制全部的数据到自身。
功能:根据edits文件和fsimage文件,就可以恢复一个hdfs的系统状态。
注:系统中数据块的位置不存放在namenode上,而是存放在datanode上。namenode只保留块位置信息的映射表。
具体如下图所示:
checkpoint配置
<property>
<name>dfs.namenode.checkpoint.txns</name>
<value>1000000</value>
<description>操作动作次数</description>
</property>
<property>
<name>dfs.namenode.checkpoint.check.period</name>
<value>60</value>
<description> 1分钟检查一次操作次数 </description>
</property>
2. 镜像文件和编辑日志文件
文件目录
在namenode的dfs/name目录下存放edits文件、fsimage文件、seen_xid文件。
- edits是当前的编辑日志,每个操作都会记录,且保留操作的序号在文件名上
- fsimage是操作的镜像存档文件
-
seen-xid是当前操作的id,对应edits文件的最后末尾数字
查看edits和fsimage
- oiv命令
用于格式化并查看fsimage文件
# hdfs -oiv -p [格式化文件类型] -i [fsimage文件] -o [输出文件位置]
hdfs oiv -p XML -i fsimage_0000000000000000151 -o /opt/fsimage.xml
输出结果包括基础配置,块信息、目录结构、文件状态等
- oev命令
用于格式化并查看edits文件
# 命令规则同上
hdfs oev -p XML -i edits_0000000000000000147-0000000000000000151 -o /opt/edits.xml
输出文件如下:
可以看出两个操作记录Record,创建hello/world目录,删除/hello目录
- 滚动编辑日志
HDFS文件系统在更新操作时,会滚动编辑日志。也可以手动执行滚动
hdfs dfsadmin -rollEdits
3. 安全模式
HDFS的安全模式是指,客户端在该模式下只读,没有任何写操作权限。目的在于保护hdfs文件系统。
- 何时进入安全模式?
NameNode系统启动时,创建和载入edits和fsimage文件阶段是安全模式;
运行过程中,hdfs检查文件副本数量低于“最小副本级别”时,进入安全模式 。刚刚格式化的hdfs系统,没有副本时不会进入安全模式
最小副本级别指实际副本数量占配置副本数量的比例
<property>
<name>dfs.safemode.threshold.pct</name>
<value>0.999f</value>
<description>最小比例</description>
</property>
基本指令
hdfs dfsadmin -safemode get # 获取状态
hdfs dfsadmin -safemode enter # 进入安全模式
hdfs dfsadmin -safemode leave # 离开安全模式
hdfs dfsadmin -safemode wait # 等待安全模式状态