HDFS之SecondaryNameNode

1、回顾HDFS架构体系

之前有简单提及过,HDFS的架构中,除了NameNodeDataNode外,还有个SecondaryNameNode也扮演着重要的角色。再来简单回顾下HDFS的架构体系

(1)Client

文件切分,文件上传 HDFS 的时候,Client 将文件切分成 一个一个的Block,然后进行存储
与 NameNode 交互,获取文件的位置信息
与 DataNode 交互,读取或者写入数据
Client 提供一些命令来管理 HDFS,比如启动或者关闭HDFS
Client 可以通过一些命令来访问 HDFS,如增删改查

(2)NameNode

集群的管理者,不实际存储数据
管理 HDFS 的名称空间,维护着文件系统树以及整个树的所有文件和目录(FsImage、Edits)
管理数据块(Block)映射信息
配置副本策略
处理客户端读写请求

(3)DataNode

接收 NameNode 下达的命令,执行实际的操作
存储实际的数据块
执行数据块的读/写操作

(4)SecondaryNameNode

辅助 NameNode,分担其工作量
定期合并 FsImage 和 Edits,并推送给 NameNode,紧急情况下,可辅助恢复 NameNode

这一篇中,就来简单讲讲 SecondaryNameNode。

2、SecondaryNameNode

首先,我们知道,NameNode 管理着集群的名称空间等元数据,而元数据是需要频繁进行随机访问的,如果将 NameNode 的管理的元数据存储在磁盘中,那效率必然比不上内存,但是如果存储在内存中,一旦断电,元数据丢失,整个集群就无法工作了。因此产生在磁盘中备份元数据的FsImage,以fsimage_为前缀,是序列化存储的元数据的整体快照。

既然有备份,那必然会涉及到数据的一致性问题。

当内存中的元数据更新时,如果同时更新FsImage则会影响效率,而不更新则会带来一致性问题。所以,又引入了Edits文件(又称Edit log),以edits_为前缀,是顺序存储的元数据增量修改事务日志。每当元数据有更新或者添加元数据时,修改内存中的元数据并追加到Edits中。这样,一旦NameNode节点断电,可以通过FsImage和Edits的合并,合成元数据。

但是,如果长时间添加数据到Edits中,会导致该文件数据过大,效率降低,而且一旦断电,恢复元数据需要的时间过长。因此,需要定期进行FsImage和Edits的合并,如果这个操作由NameNode节点完成,又会效率过低。因此,引入一个新的节点SecondaryNamenode,专门用于FsImage和Edits的合并。

为了避免edits文件过大,以及缩短 NameNode 启动时恢复元数据的时间,需要定期地将edits文件合并到fsimage文件,该合并过程叫做checkpoint

checkpoint的触发由hdfs-site.xml中的两个参数来控制:

  • dfs.namenode.checkpoint.period:触发checkpoint的周期长度,默认为1小时。
  • dfs.namenode.checkpoint.txns:两次checkpoint之间最大允许进行的操作数,默认为100万。

两个参数只要满足其一,就会触发checkpoint过程。默认情况下,SNN每隔1小时进行一次checkpoint,但如果还没到1小时,距离上一次checkpoint后事务累积已经超过了1百万,就会立刻触发一次checkpoint。

大致流程如下

  • 当触发checkpoint条件后,NameNode 停止使用edits文件,并生成一个新的临时edits文件,后续的操作将记录在新的文件中
  • SecondaryNameNode 通过http的get方式获取 NameNode 节点上的edits和fsimage文件
  • SecondaryNameNode将fsimage载入内存并逐一执行edits文件中的操作
  • 执行完毕后,生成fsimage的临时文件,通过http的put请求将文件传到 NameNode
  • NameNode 更新fsimage临时文件中的记录检查点执行时间,改名为fsimage文件
  • edits临时文件更名为edits文件

通过 SecondaryNameNode 的辅助,减小了Edits文件的大小,加快了集群二次启动的速度。

3、FsImage与Edits的查看

(1)查看FsImage文件

hdfs oiv -p 文件类型 -i 镜像文件 -o 转换后文件输出路径

# 进入文件夹
cd /opt/module/hadoop-3.3.2/data/dfs/name/current

# 转换文件为fsimage.xml
hdfs oiv -p XML -i fsimage_0000000000000000025 -o /opt/module/hadoop-3.3.2/fsimage.xml

# 查看转换后文件内容
cat /opt/module/hadoop-3.3.2/fsimage.xml

(2)查看Edits文件

hdfs oev -p 文件类型 -i 编辑日志 -o 转换后文件输出路径

hdfs oev -p XML -i edits_0000000000000000012-0000000000000000013 -o /opt/module/hadoop-3.3.2/edits.xml

cat /opt/module/hadoop-3.3.2/edits.xml
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值