我们先了解下基本概念:
- Fsimage文件:HDFS文件系统元数据的一个永久性检查点,其中包含HDFS文件系统的所有目录和文件inode的序列化信息
- Edits文件:存放HDFS文件系统的所有更新操作的路径,文件系统客户端执行的所有写操作首先会被记录到Edits文件中
- seen_txid文件:保存最后一个edits_的数字
1. 镜像文件Fsimage详解
- 我们先把DataNode容器停止,然后删除对应挂载的current目录,此步骤是为了解决namenode格式化后datanode无法启动(也可以直接修改namenode格式化后version中集群的id也可启动),如下图所示
- 在namenode节点中执行
hdfs namenode -format
cd /hadoop/dfs/name/current
ls
cat version
cat seen_txid
- 我们停止集群并重新启动,我在再次查看namenode发现多了edits_inprogress文件,并且datanode集群id与namenode格式化后集群id一致
docker-compose down
docker-compose up -d
- 查看Fsimage文件
// 已xml格式处理fsimage_文件为fsimage.xml
# hdfs oiv -p XML -i fsimage_0000000000000000000 -o fsimage.xml
# cat fsimage.xml
2. 编辑日志Edits详解
// hdfs oev查看edits文件具体内容
# hdfs oev -p XML -i edits_inprogress_0000000000000000001 -o edits.xml
# cat edits.xml
- 如果fsimage当前编号为fsimage_0000000000000000520,则说明edits编号小于等于520的文件已合并完成,后续合并只需合并大于该编号的
- 根据之前的写流程我们知道edits_inprogress的文件编号始终为最大的
了解完后,fsimage与edits文件不知道你有没有想起与redis7中rdb与aof十分类似呢?
链接直达 18.Redis系列之AOF方式持久化
欢迎关注公众号算法小生