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

你可能感兴趣的文章
NIFI大数据进阶_Kafka使用相关说明_实际操作Kafka生产者---大数据之Nifi工作笔记0036
查看>>
NIFI大数据进阶_NIFI的模板和组的使用-介绍和实际操作_创建组_嵌套组_模板创建下载_导入---大数据之Nifi工作笔记0022
查看>>
NIFI大数据进阶_NIFI监控功能实际操作_Summary查看系统和处理器运行情况_viewDataProvenance查看_---大数据之Nifi工作笔记0026
查看>>
NIFI大数据进阶_NIFI监控的强大功能介绍_处理器面板_进程组面板_summary监控_data_provenance事件源---大数据之Nifi工作笔记0025
查看>>
NIFI大数据进阶_NIFI集群知识点_认识NIFI集群以及集群的组成部分---大数据之Nifi工作笔记0014
查看>>
NIFI大数据进阶_NIFI集群知识点_集群的断开_重连_退役_卸载_总结---大数据之Nifi工作笔记0018
查看>>
NIFI大数据进阶_使用NIFI表达式语言_来获取自定义属性中的数据_NIFI表达式使用体验---大数据之Nifi工作笔记0024
查看>>
NIFI大数据进阶_内嵌ZK模式集群1_搭建过程说明---大数据之Nifi工作笔记0015
查看>>
NIFI大数据进阶_内嵌ZK模式集群2_实际操作搭建NIFI内嵌模式集群---大数据之Nifi工作笔记0016
查看>>
NIFI大数据进阶_外部ZK模式集群1_实际操作搭建NIFI外部ZK模式集群---大数据之Nifi工作笔记0017
查看>>
NIFI大数据进阶_实时同步MySql的数据到Hive中去_可增量同步_实时监控MySql数据库变化_实际操作_03---大数据之Nifi工作笔记0035
查看>>
NIFI大数据进阶_实时同步MySql的数据到Hive中去_可增量同步_实时监控MySql数据库变化_操作方法说明_01---大数据之Nifi工作笔记0033
查看>>
NIFI大数据进阶_实时同步MySql的数据到Hive中去_可增量同步_实时监控MySql数据库变化_操作方法说明_02---大数据之Nifi工作笔记0034
查看>>
NIFI大数据进阶_离线同步MySql数据到HDFS_01_实际操作---大数据之Nifi工作笔记0029
查看>>
NIFI大数据进阶_离线同步MySql数据到HDFS_02_实际操作_splitjson处理器_puthdfs处理器_querydatabasetable处理器---大数据之Nifi工作笔记0030
查看>>
NIFI大数据进阶_离线同步MySql数据到HDFS_说明操作步骤---大数据之Nifi工作笔记0028
查看>>
NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027
查看>>
NIFI数据库同步_多表_特定表同时同步_实际操作_MySqlToMysql_可推广到其他数据库_Postgresql_Hbase_SqlServer等----大数据之Nifi工作笔记0053
查看>>
NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南001---大数据之Nifi工作笔记0068
查看>>
NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南002---大数据之Nifi工作笔记0069
查看>>