元数据生成与备份
- 集群启动 nameNode 节点下会生成 edit 操作日志和 fsImage 元数据文件镜像 两类数据磁盘备份, 并加载到内存中
- 客户端向 nameNode 请求对数据操作(增删改)
- nameNode 想 edit 操作日志文件追加操作记录(增删改)
- 文件数据追加结束后, 将 nameNode 元数据进行修改
- secondary NameNode 会定期检查 nameNode 中的 fsImage 和 edit 操作日志是否由于长时间追加操作导致数据量过大, 效率降低, (默认 edit 操作日志到达 100 万条, 请求 checkPoint 操作)
- 开始请求 checkPoint, 对元数据备份进行整理
- nameNode 将 增加edit 操作日志, 后续操作追加到新的 edit 操作中, 防止数据整理, 不能对数据写的问题
- nameNode 将 edit 操作日志和 fsImage 文件发送到 secondary NameNode
- secondary NameNode 将 edit 操作日志和 fsImage 加载到内存合并
- secondary NameNode 将内存中的数据写入到 fsImage.checkPoint文件中
- secondary NameNode 将 fsImage.checkPoint 发送到 NameNode 中
- NameNode 将 fsImage.checkPoint 重命名 fsImage 替换原来的 fsImage 文件
磁盘备份文件
-
nameNode 节点元数据磁盘备份位置
-
edits_000000000000001-00000000000000009 操作记录, 每次的操作
-
edits_inprogress_00000000000000000095 累计的操作记录
转成 xml 查看操作 edits_0000000000000000010-000000000000000055 记录了 55-10 次操作
hdfs oev -p XML -i edits_0000000000000000010-000000000000000055 -o 55.xml
第 11 次操作 创建一个新的文件夹 路径/user 空间 15853658… 用户 hadoop 用户组 supergroup
-
fsImage_00000000000000094 元数据镜像
hdfs oiv -p XML -i fsImage_00000000000000092 -o fs.xml
-
seen_txid 记录 操作次数 位置
checkPoint 检查配置
<!-- hdfs-default.xml -->
<property>
<name>dfs.namenode.checkpoint.period</name>
<value>3600</value>
<description>设置 secondary NameNode 间隔时长 1h 执行 checkPoint 操作</description>
</property>
<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 >
nameNode 故障处理
当 nameNode 中的数据丢失或其它原因数据不全时, 可以通过 secondary NameNode 对 NameNode 数据恢复
直接拷贝
-
停止 nameNode 节点
kill -9 nameNodeId
-
删除 nameNode 中name 数据
rm -rf /opt/modules/hadoop/data/tmp/dfs/name/*
-
拷贝 secondary NameNode 数据到 nameNode 下
scp -r hadoop@hadoop164:/opt/modules/hadoop/data/tmp/dfs/namesecondary/* /opt/modules/hadoop/data/tmp/dfs/name/
-
启动 nameNode 节点
hadoop-daemon.sh start namenode
-
启动时,刷新网页页面提示安全模式
importCheckPoint 恢复
-
修改hdfs-site.xml中的配置
<!--减小检查时间--> <property> <name>dfs.namenode.checkpoint.period</name> <value>120</value> </property> <!--指定 nameNode 的 name 数据目录--> <property> <name>dfs.namenode.name.dir</name> <value>/opt/module/hadoop/data/tmp/dfs/name</value> </property>
-
停止 nameNode 节点
kill -9 nameNodeId
-
删除 nameNode 中name 数据
rm -rf /opt/modules/hadoop/data/tmp/dfs/name/*
-
secondNameNode 与 nameNode 不在同一节点时, 将 secondaryNameNode中的数据拷贝到 nameNode 下
scp -r hadoop@hadoop164:/opt/module/hadoop/data/tmp/dfs/namesecondary /opt/module/hadoop/data/tmp/dfs/namesecondary
-
删除 in_use.lock
cd namesecondary/ rm -f in_use.lock
-
导入检查点数据(过一会 ctrl+c)
hdfs namenode -importCheckpoint
-
启动 nameNode 节点
hadoop-daemon.sh start namenode
-
启动时,刷新网页页面提示安全模式
安全模式
-
NameNode 启动
NameNode 启动时, 首先将镜像文件(FsImage) 载入内存, 并执行编辑日志(Edits) 中的各项操作, 一旦在内存中成功建立文件系统元数据的映像, 则创建一个新的 FsImage 文件和一个空的编辑日志. 此时, NameNode 开始监听 DataNode 请求. 这个过程期间, NameNode 一直运行在安全模式,即 NameNode 的文件系统对客户端来说是只读的.
-
DataNode 启动
系统中的数据块的位置并不是由 NameNode 维护的, 而是以块列表的形式存储在 DataNode 中, 在系统的正常操作期间, NameNode 会在内存中保留所有块位置的映射信息. 在安全模式下, 各个 DataNode 会向 NameNode 发送最新的块列表信息, NameNode 了解到足够多的块位置信息后, 即可高效运行文件系统.
-
安全模式退出判断
如果满足"最小副本条件", NameNode 会在 30 秒后退出安全模式. 最小副本条件指的是在整个文件系统中 99.9%的块满足最小副本级别(默认值:dfs.replication.min=1). 在启动一个刚刚格式化的 HDFS 集群时, 因为系统中没有任何块, 所有不会进入安全模式
-
命令操作
hdfs dfsadmin -safemode get (功能描述:查看安全模式状态) hdfs dfsadmin -safemode enter (功能描述:进入安全模式状态, 此时不允许操作数据) hdfs dfsadmin -safemode leave (功能描述:离开安全模式状态) hdfs dfsadmin -safemode wait (功能描述:等待安全模式状态, 等待安全模式退出后执行后续操作)