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

程序源代码

共 2361字,需浏览 5分钟

 ·

2021-01-15 00:36

点击上方 "大数据肌肉猿"关注, 星标一起成长
后台回复【加群】,进入高质量学习交流群
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 一起交流进步。


浏览 37
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报