栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 数据挖掘与分析

【面试】HDFS

【面试】HDFS

问题大纲
  • 一、HDFS基础
    • 1、NameNode、DataNode与Secondary NameNode 作用(*2),SNN能接替NN吗?
    • 2、HDFS HA架构?如何实现NameNode HA(*3)?如何实现HA的选举,如NameNode选举。
    • 3、HDFS DataNode死了怎么办,NameNode发生了什么变化?
    • 4、HDFS EditLog写入了,但NameNode元信息没保存在内存中,数据不一致怎么办?
  • 二、HDFS 读写流程
    • 1、HDFS介绍,特性,可存储的文件格式
    • 2、HDFS读写流程(*3)
      • 追问1:写入时,小文件过多会怎样 ?
      • 追问2:写文件如何保证正确性?
      • 追问3:零拷贝模式是什么?
    • 3、HA HDFS ZooKeeper什么作用,为什么要ZooKeeper?(*2)
  • 三、参考

一、HDFS基础 1、NameNode、DataNode与Secondary NameNode 作用(*2),SNN能接替NN吗?

节点作用
NameNode管理整个文件系统的元数据,记录DataNode名称及存放路径
DataNode管理用户的文件数据块,定期向NameNode发送所存储的块(block)的列表
Secondary NameNode合并NameNode的edit logs到fsimage中

说明:

1、fsimage && edit logs

  • fsimage :NameNode启动时,对整个文件系统的快照。
  • edit logs:NameNode启动后,对文件系统的改动序列。

2、NameNode结构抽象图:

3、NameNode将信息持久化到磁盘:

4、Secondary NameNode工作

NameNode运行很长时间后,edit logs会变得很大,上面的改动合并到fsimage会花费很长时间,所以设置助手节点–Secondary NameNode定时查询NameNode的edit logs,将改动合并到fsimage上,再拷贝回fsimage。所以在社区内被认为是检查节点,不是NameNode的备份。

2、HDFS HA架构?如何实现NameNode HA(*3)?如何实现HA的选举,如NameNode选举。

2.1、NameNode HA主体思路

  • 1)NN竞争在ZooKeeper上注册,即create一个临时节点,写入成功的那个就是Active;

  • 2)注册成功后,通过create后的watcher机制,FailoverController会发送命令给各个NN,并确定各自状态和职责;

  • 3)Monitor Health会定时监控NN状态,有问题可能触发重新选举,即重复1-2;

  • 4)FailoverController会与ZooKeeper保持心跳,注册的临时节点消失后,也会触发重新选举。

主要组件:
1、DFSZKFailoverController(继承自抽象类ZKFailoverController):ZKFC,
故障转移控制器,守护进程,负责总体故障转移和命令发布;

2、ActiveStandbyElector:实现Active、Standby选举;
3、HealthMonitor:健康监视器,实现NN状态的定时监控。

2.2、如何实现HA的选举,如NameNode选举

答:ZooKeeper提供了简单的机制来实现Acitve Node选举,如果当前Active失效,Standby将会获取一个特定的排他锁,那么获取锁的Node接下来将会成为Active。

补充:

1、NameNode选举具体过程:
Namenode(包括YARN ResourceManager) 的主备选举是通过ActiveStandbyElector 完成,主要利用了
Zookeeper 的写一致性和临时节点机制,具体过程如下:

Step 1. 创建锁节点

1)HealthMonitor 检测NameNode,状态正常就有资格参加 Zookeeper的主备选举。
2)没有发起过主备选举,ActiveStandbyElector 就会尝试在 Zookeeper 上创建一个临时节点。
   其写一致性保证只有有一个创建成功,
3)成功的 ActiveStandbyElector 对应的 NameNode 就会成为主 NameNode,回调 ZKFailoverController 方法将其切换为 Active 状态。而失败的切换为standby。

Step 2. 注册 Watcher 监听。
不管创建临时节点是否成功,ActiveStandbyElector 随后向 Zookeeper 注册一个 Watcher 来监听这个节点的状态变化事件,主要关注这个节点的 NodeDeleted 事件

Step 3. 自动触发主备选举。
HealthMonitor 检测到 NameNode 的状态异常时, ZKFailoverController 会主动删除当前在 Zookeeper 上建立的临时节点,这样处于 Standby NameNode 注册的监听器就会收到这个节点的NodeDeleted 事件,收到后马上创建临时节点流程,创建成功就会被选举为Active NameNode。
当然,如果是 Active 状态的 NameNode 所在的机器整个宕掉的话,那么根据 Zookeeper 的临时节点特性,临时节点会自动被删除,从而也会自动进行一次主备切换。

2、防止脑裂(双主现象):
Zookeeper“假死”可能导致出现两个Active NameNode,都可以对外提供服务,无法保证数据一致性。

ActiveStandbyElector通过隔离(Fencing)机制防止脑裂现象。

当某NameNode竞选成功,成功创建ActiveStandbyElectorLock临时节点后会创建另一个名为ActiveBreadCrumb的持久节点,该节点保存了NameNode的地址信息,正常情况下删除ActiveStandbyElectorLock节点时会主动删除ActiveBreadCrumb。

但如果由于异常情况导致Zookeeper Session关闭,此时临时节点ActiveStandbyElectorLock会被删除,但持久节点ActiveBreadCrumb并不会删除,当有新的NameNode竞选成功后它会发现已经存在一个旧的NameNode遗留下来的ActiveBreadCrumb节点,此时会通知ZKFC。
3、HDFS DataNode死了怎么办,NameNode发生了什么变化?
  1. 剩余2个正常DataNode会发一个标识给NameNode,然后NameNode会从原pipeline删除故障节点;
  2. NameNode会通过新构建的pipeline给两个正常节点写数据;
  3. 下次HDFS使用该Block,会检测到备份数为2,然后会重新备份,让replication数达到3,将DataNode状态置为正常。
4、HDFS EditLog写入了,但NameNode元信息没保存在内存中,数据不一致怎么办?

Secondary NameNode会将Editlog改动信息更新到fsimage,NameNode启动时会首先把fsimage文件加载到内存中形成文件系统镜像。

二、HDFS 读写流程 1、HDFS介绍,特性,可存储的文件格式

1)介绍:HDFS-Hadoop Distributed File System,分布式文件系统。

2)特性:

  • 海量数据、 高容错性(多副本)、 廉价机器

局限性:

  • 延迟较高。HDFS为了处理大型数据集,高吞吐量的代价是较高延迟,10毫秒下访问无法做到。(hbase可以弥补)
  • 大量小文件效率低。NameNode节点内存中存在整个文件系统元数据(150字节/个),因此文件数量受到限制。
  • 不支持多用户写入 & 修改文件。不支持多用户对同一文件进行操作,而且写操作只能在文件末尾完成,即追加操作。

4)可存储文件格式:

  • 行式存储:SequenceFile、MapFile、Avro Datafile
  • 列式存储:Rcfile、Orcfile、Parquet
2、HDFS读写流程(*3)

读文件:

  1. 客户端调用 open 方法,打开一个文件。
  2. NN根据拓扑结构返回距Client最近的DN(block-location)。
  3. 客户端直接访问 DN 读取 block 数据并计算校验和,整个数据流不经过 NN。
  4. 读取完一个 block 会读取下一个 block。
  5. 所有 block 读取完成,关闭文件。

写文件:

  1. client 调用 create 方法,NN会做创建新文件的各种校验。(校验:如文件是否已经存在,客户端是否有权限等)
  2. 若校验通过,client 开始写数据到 DN(DataNode)。文件会按照 block 大小进行切块,默认 128M(可配置),DataNode 构成 pipeline 管道,client 端向输出流对象中写数据,传输的时候是以比 block 更小的 packet 为单位进行传输,packet 又可拆分为多个 chunk,每个 chunk 都携带校验信息。
  3. 每个 DataNode 写完一个块后会返回确认信息。并不是每个 packet 写成功就返回一次确认。
  4. 写完数据,关闭文件。
补充:
1、写入详细过程可参考14。

2、DN发给NN完成信号的时机取决于集群是强一致性还是最终一致性
 - 强一致性:所有DataNode写完后才向NameNode汇报;(HDFS一般情况)
 - 最终一致性:任意一个DataNode写完后就能向NameNode汇报。
追问1:写入时,小文件过多会怎样 ?
  1. 通用方案:
  • 1)Hadoop Archive:将小文件打包成HAR文件放入HDFS块中的文件存档工具,可以减少 NN 内存使用,仍允许对文件进行透明访问。
  • 2)Sequence file:一系列二进制key/value组成,如果为key小文件名,value为文件内容,则可以将大批小文件合并成一个大文件。
  1. 底层方案:
  • 1)HDFS-8998:DN 划分小文件区专门存储,一个block满才使用下一个。
  • 2)HDFS-8286:将元数据从 NN 从内存移到第三方k-v存储系统中。
  • 3)HDFS-7240:Apache Hadoop Ozone,hadoop子项目,为扩展hdfs而生。
追问2:写文件如何保证正确性?
  1. WAL-write ahead log,先写Log,再写内存。EditLog记录最新写操作。如果后续失败,操作被先写入EditLog,可根据其中记录恢复。

  2. client 通过 NN 分配的 pipeline 向 DN 写入packet,这个packet便直接在 pipeline传给第2,3个。packet中每个chunk都携带校验信息。

追问3:零拷贝模式是什么?

答:零拷贝(zero-copy)"是一种系统调用机制,就是跳过“用户缓冲区”的拷贝,建立一个磁盘空间和内存的直接映射,数据不再复制到“用户态缓冲区”。
系统上下文切换减少为2次,可以提升一倍的性能

3、HA HDFS ZooKeeper什么作用,为什么要ZooKeeper?(*2)

答:Zookeeper保证在Active NameNode失效时及时将Standby NameNode修改为Active状态,解决了单点故障问题。

三、参考

1、Hadoop中的Namenode、Datanode和Secondary Namenode
2、HDFS详解一:namenode、datanode工作原理
3、Secondary NameNode 的作用
4、Hadoop写文件时datanode发生故障的处理过程
5、HDFS NameNode HA 实现综述
6、大数据之Hadoop HDFS-HA架构
7、HDFS NameNode的高可用 面试版
8、Hadoop之HDFS简介
9、HDFS主要特性和体系结构
10、刚哥谈架构 (七)- 大数据的文件存储
11、4.初识Hadoop文件格式
12、Hadoop 小文件处理- 一剑风徽- 博客园
13、[Hadoop]大量小文件问题及解决方案
14、HDFS写文件流程(详细必看)
15、零复制
16、原来 8 张图,就可以搞懂「零拷贝」了
17、深入剖析Linux IO原理和几种零拷贝机制的实现
18、Hadoop中Shuffle过程
19、MapReduce shuffle过程详解
20、hadoop中shuffle过程详解
21、Spark详解04Shuffle 过程Shuffle 过程
22、MapReduce程序中的经过几次排序?三次
23、MapReduce 的 shuffle 过程中经历了几次 sort ?
24、剖析Hadoop和Spark的Shuffle过程差异
25、Spark专题(二):Hadoop Shuffle VS Spark Shuffle
26、MapReduce Shuffle 和 Spark Shuffle 区别看这篇就够了
26、Mapreduce中Mapper、Partition、Reducer数目的确定与关系
27、MapReduce 中 map 和 reduce 数量之间的关系
28、MongoDB、ElasticSearch、Redis、Hbase这四种热门数据库的优缺点及应用场景
29、聊聊MySQL、Hbase、ES的特点和区别
30、Elasticsearch、MongoDB和Hadoop比较
31、以wordcount为例详细描述mr执行过程

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/278602.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号