博客
关于我
给字节面试官看了珍藏的网盘资源后,我两对视一笑,顺利通过面试
阅读量: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/

你可能感兴趣的文章
NIFI1.21.0_Mysql到Mysql增量CDC同步中_日期类型_以及null数据同步处理补充---大数据之Nifi工作笔记0057
查看>>
NIFI1.21.0_Mysql到Mysql增量CDC同步中_补充_插入时如果目标表中已存在该数据则自动改为更新数据_Postgresql_Hbase也适用---大数据之Nifi工作笔记0058
查看>>
NIFI1.21.0_Mysql到Mysql增量CDC同步中_补充_更新时如果目标表中不存在记录就改为插入数据_Postgresql_Hbase也适用---大数据之Nifi工作笔记0059
查看>>
NIFI1.21.0_NIFI和hadoop蹦了_200G集群磁盘又满了_Jps看不到进程了_Unable to write in /tmp. Aborting----大数据之Nifi工作笔记0052
查看>>
NIFI1.21.0_Postgresql和Mysql同时指定库_指定多表_全量同步到Mysql数据库以及Hbase数据库中---大数据之Nifi工作笔记0060
查看>>
NIFI1.21.0最新版本安装_连接phoenix_单机版_Https登录_什么都没改换了最新版本的NIFI可以连接了_气人_实现插入数据到Hbase_实际操作---大数据之Nifi工作笔记0050
查看>>
NIFI1.21.0最新版本安装_配置使用HTTP登录_默认是用HTTPS登录的_Https登录需要输入用户名密码_HTTP不需要---大数据之Nifi工作笔记0051
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增删改数据分发及删除数据实时同步_通过分页解决变更记录过大问题_02----大数据之Nifi工作笔记0054
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_增加修改实时同步_使用JsonPath及自定义Python脚本_03---大数据之Nifi工作笔记0055
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表多表增量同步_插入修改删除增量数据实时同步_通过分页解决变更记录过大问题_01----大数据之Nifi工作笔记0053
查看>>
NIFI1.21.0通过Postgresql11的CDC逻辑复制槽实现_指定表或全表增量同步_实现指定整库同步_或指定数据表同步配置_04---大数据之Nifi工作笔记0056
查看>>
NIFI1.23.2_最新版_性能优化通用_技巧积累_使用NIFI表达式过滤表_随时更新---大数据之Nifi工作笔记0063
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_根据binlog实现update数据实时同步_实际操作05---大数据之Nifi工作笔记0044
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_根据binlog实现数据实时delete同步_实际操作04---大数据之Nifi工作笔记0043
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置binlog_使用处理器抓取binlog数据_实际操作01---大数据之Nifi工作笔记0040
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_实现数据插入数据到目标数据库_实际操作03---大数据之Nifi工作笔记0042
查看>>
NIFI从MySql中增量同步数据_通过Mysql的binlog功能_实时同步mysql数据_配置数据路由_生成插入Sql语句_实际操作02---大数据之Nifi工作笔记0041
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_03_来吧用NIFI实现_数据分页获取功能---大数据之Nifi工作笔记0038
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_不带分页处理_01_QueryDatabaseTable获取数据_原0036---大数据之Nifi工作笔记0064
查看>>
NIFI从MySql中离线读取数据再导入到MySql中_无分页功能_02_转换数据_分割数据_提取JSON数据_替换拼接SQL_添加分页---大数据之Nifi工作笔记0037
查看>>