博客
关于我
给字节面试官看了珍藏的网盘资源后,我两对视一笑,顺利通过面试
阅读量:553 次
发布时间:2019-03-09

本文共 2228 字,大约阅读时间需要 7 分钟。

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

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

大家好,我是峰哥!

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·················

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

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

毕业一年,完全靠自己在上海买房,

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

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

转载地址:http://vygiz.baihongyu.com/

你可能感兴趣的文章
Node-RED中使用html节点爬取HTML网页资料之爬取Node-RED的最新版本
查看>>
Node-RED中使用JSON数据建立web网站
查看>>
Node-RED中使用json节点解析JSON数据
查看>>
Node-RED中使用node-random节点来实现随机数在折线图中显示
查看>>
Node-RED中使用node-red-browser-utils节点实现选择Windows操作系统中的文件并实现图片预览
查看>>
Node-RED中使用node-red-contrib-image-output节点实现图片预览
查看>>
Node-RED中使用node-red-node-ui-iframe节点实现内嵌iframe访问其他网站的效果
查看>>
Node-RED中使用Notification元件显示警告讯息框(温度过高提示)
查看>>
Node-RED中使用range范围节点实现从一个范围对应至另一个范围
查看>>
Node-RED中实现HTML表单提交和获取提交的内容
查看>>
Vue3+elementplus实现图片上传下载(最强实践)
查看>>
Node-RED中将CSV数据写入txt文件并从文件中读取解析数据
查看>>
Node-RED中建立TCP服务端和客户端
查看>>
Node-RED中建立Websocket客户端连接
查看>>
Node-RED中建立静态网页和动态网页内容
查看>>
Vue3+Element-ul学生管理系统(第二十二课)
查看>>
Node-RED中怎样让网站返回JSON数据
查看>>
Node-RED中根据HTML文件建立Web网站
查看>>
Node-RED中解析高德地图天气api的json数据显示天气仪表盘
查看>>
Node-RED中连接Mysql数据库并实现增删改查的操作
查看>>