给字节面试官看了珍藏的网盘资源后,我两对视一笑,顺利通过面试

点击上方 "大数据肌肉猿"关注, 星标一起成长

后台回复【加群】,进入高质量学习交流群

2021年大数据肌肉猿公众号奖励制度

大家好,我是峰哥!

2021年我新开了一个专题,叫【大数据面试知识点】,这里的内容都是真实的企业级面试题,包括我自己遇到以及读者遇过的。我自己微信没有1W也有8000道,本来想打算写书用的,现在不写了,接下去会以比较通俗的语言分享到公众号上。希望大家多多留言转发、点赞在看,这样我就更有动力去更新了。

------

今天这道题是峰哥读者字节二面的面试题。

面试官问的是这样一个问题:为什么 editlog 文件放在共享存储 NFS 中,而不是放在主节点,让备节点从主节点同步呢?

这个问题是大数据框架Hadoop里组件HDFS的一个知识点。

要是面试官问我这个问题的话,我会打开我网盘里的小电影,然后把这个画面给他看,我们会心照不宣的对视一下,然后直接通过面试。为什么小电影有这么强大的功能呢?且听峰哥讲解。

峰哥有一个习惯,就是在资源群一看到比较好看的小电影就会马上下载到本地,而不是存在网盘上吗,网盘是百度公用的资源,一旦相应号召就会马上河蟹。这是峰哥作为一个程序员的基本素质,及时备份,避免单点故障带来的不快乐。

所以,这题其实也很简单,就是为了解决单点问题

我先简单介绍下 editlog。NameNode 存储了 HDFS 集群的元数据信息,存储元数据的介质当然是一个文件,这个文件叫 FsImage,看名字就能猜出它的意思:FS(文件系统)的 Image(镜像)。

每次对 HDFS 做修改,比如新建一个文件,其实都会写到元数据中。HDFS 存储的数据非常多,如果每次修改元数据都对 FsImage 直接修改,那肯定慢的一批。

于是就有了 editlog,看名字也能猜出它的意思:edit(修改)、log(日志),每次修改都记录到 editlog 中,HDFS 会定期将 editlog 中的文件汇总到 FsImage,并将新的数据写入到新的 editlog,把旧的给删了。

定期其实就是达到触发条件 checkpoint,有两个:

  • 指定时间间隔,通过 dfs.namenode.checkpoint.period 进行配置,默认是一小时;

  • 指定 editlog 文件大小,通过 dfs.namenode.checkpoint.txns 进行配置,默认是 1 百万条事务记录;

我们来看一张 Hadoop1.x 的流程图加深下理解。   

  1. 检查是否触发 checkpoint 条件;

  2. 触发 checkpoint,NameNode 停止向 edits 中写新的记录,另外生成一个 edits.new 文件,将新的事务记录在此文件中;

  3. SecondaryNameNode 通过 HTTP 请求,从 NameNode 下载 fsimage 和 edits 文件,合并生成 fsimage.chkpoint 文件;

  4. SecondaryNameNode 再将新生成的 fsimage.chkpoint 上传到 NameNode 并重命名为 fsimage,直接覆盖旧的 fsimage,实际上中间的过程还有一些 MD5 完整性校验,检查文件上传下载后是否完整;

  5. 将 edits.new 文件重命名为 edits 文件,旧的 edits 文件已经合并到 fsimage;

HDFS 元数据一旦丢失,那整个集群就 GG 了,所以 editlog 的重要性你可清楚了?

既然这么重要,那当然得具备高容错性,不能有单点故障。HDFS2.x 开始支持 NameNode HA,一个 Active 节点,一个 Standby 节点,一旦 Active 节点挂了,Standby 能马上接管。

要做到马上接管,就得保证 Standby 节点中的信息与 Active 节点信息是同步的,如果 editlog 文件存储在 NameNode 上,NameNode 挂了,元数据不就丢失了么,所以需要一个第三方来存储 editlog,这个第三方就是共享文件。当然这个共享文件最好不是在单节点机器上,否则又出现单点问题,这不就套娃了么。

我们来总结下整个流程,主节点只要发生元数据变动,就将信息写入到共享存储的 editlog 文件中,备节点会定期去拉取共享存储的 editlog 文件,并与 FsImage 完成合并,之后将最新的 FsImage 信息推送给主节点。

共享存储不是一个常用的方案,更推荐的方案是用 QJM(Quorum Journal Manager) 来实现 NameNode HA,原理基本一致,只是配置和优缺点不同,有兴趣自行了解即可。

再回顾下开头的故事,把网盘比喻成主节点,我自己的电脑比喻成备节点,我的本地磁盘比喻成共享存储 NFS。小电影在网盘这个主节点更新,只要有新资源,我就会把她们下载同步到共享存储,当 网盘资源挂了,我只要用我的电脑访问磁盘就可以继续看了。

挂了对我有影响么?没有。你学废了吗哈哈。

·················END·················

你好,我是峰哥,一个骚气的肌肉男。

二本车辆工程转型大数据开发,拿过66个大数据offer

毕业一年,完全靠自己在上海买房,点此看我2020年总结。

同时,我独自穷游过15个国家,60座城市,还是一位拥有国家教练资格证的健美选手。


不定时在朋友圈更新健身、旅行、技术感悟,欢迎添加我的微信 Fawn0504 一起交流进步。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值