HDFS面试题(详解)

  • 本文会对HDFS常见面试题进行详解,并且后续持续更新

本次内容:

1.hdfs写流程
2.hdfs读流程
3.hdfs的体系结构
4.一个datanode 宕机,怎么一个流程恢复
5.hadoop 的 namenode 宕机,怎么解决
6.namenode对元数据的管理、
7. namenode工作原理

1. hdfs写流程(必背)

  • 我们来看一下这张图片,步骤都有序号,看五分钟肯定能看会,理解记忆就行了
    在这里插入图片描述

1)客户端通过Distributed
FileSystem模块向NameNode请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在。
2)NameNode返回是否可以上传。 3)客户端请求第一个 Block上传到哪几个DataNode服务器上。
4)NameNode返回3个DataNode节点,分别为dn1、dn2、dn3。
5)客户端通过FSDataOutputStream模块请求dn1上传数据,dn1收到请求会继续调用dn2,然后dn2调用dn3,将这个通信管道建立完成。
6)dn1、dn2、dn3逐级应答客户端。
7)客户端开始往dn1上传第一个Block(先从磁盘读取数据放到一个本地内存缓存),以Packet为单位,dn1收到一个Packet就会传给dn2,dn2传给dn3;dn1每传一个packet会放入一个应答队列等待应答。
8)当一个Block传输完成之后,客户端再次请求NameNode上传第二个Block的服务器。(重复执行3-7步)。

2. hdfs读流程(必背)
下面也需要理解记忆的,需要到什么程度呢?在一张纸上,能不用任何提示,把这张图片画出来。
在这里插入图片描述

1)客户端通过Distributed
FileSystem向NameNode请求下载文件,NameNode通过查询元数据,找到文件块所在的DataNode地址。
2)挑选一台DataNode(就近原则,然后随机)服务器,请求读取数据。
3)DataNode开始传输数据给客户端(从磁盘里面读取数据输入流,以Packet为单位来做校验)。
4)客户端以Packet为单位接收,先在本地缓存,然后写入目标文件。

3. hdfs的体系结构(必背)

  • hdfs有namenode、secondraynamenode、datanode组成。为n+1模式
  • NameNode负责管理和记录整个文件系统的元数据
  • DataNode 负责管理用户的文件数据块,文件会按照固定的大小(blocksize)切成若干块后分布式存储在若干台datanode上,每一个文件块可以有多个副本,并存放在不同的datanode上,Datanode会定期向Namenode汇报自身所保存的文件block信息。namenode则会负责保持文件的副本数量HDFS的内部工作机制对客户端保持透明,客户端请求访问HDFS都是通过向namenode申请来进行
  • secondraynamenode负责合并日志

4. 一个datanode 宕机,怎么一个流程恢复

  • Datanode宕机了后,如果是短暂的宕机,可以实现写好脚本监控,将它启动起来。如果是长时间宕机了,那么datanode上的数据应该已经被备份到其他机器了,那这台datanode就是一台新的datanode了,删除他的所有数据文件和状态文件,重新启动。

5. hadoop 的 namenode 宕机,怎么解决

  • 先分析宕机后的损失,宕机后直接导致client无法访问,内存中的元数据丢失,但是硬盘中的元数据应该还存在,如果只是节点挂了,重启即可,如果是机器挂了,重启机器后看节点是否能重启,不能重启就要找到原因修复了。但是最终的解决方案应该是在设计集群的初期就考虑到这个问题,做namenode的HA。

6. namenode对元数据的管理

  • namenode对数据的管理采用了三种存储形式:
    内存元数据(NameSystem)
    磁盘元数据镜像文件(fsimage镜像)
    数据操作日志文件(可通过日志运算出元数据)(edit日志文件)

7. namenode工作机制
在这里插入图片描述

    1. 第一阶段:NameNode启动
      (1)第一次启动NameNode格式化后,创建Fsimage和Edits文件。如果不是第一次启动,直接加载编辑日志和镜像文件到内存。
      (2)客户端对元数据进行增删改的请求。
      (3)NameNode记录操作日志,更新滚动日志。
      (4)NameNode在内存中对数据进行增删改。
    1. 第二阶段:Secondary NameNode工作
      (1)Secondary NameNode询问NameNode是否需要CheckPoint。直接带回NameNode是否检查结果。
      (2)Secondary NameNode请求执行CheckPoint。
      (3)NameNode滚动正在写的Edits日志。
      (4)将滚动前的编辑日志和镜像文件拷贝到Secondary NameNode。
      (5)Secondary NameNode加载编辑日志和镜像文件到内存,并合并。
      (6)生成新的镜像文件fsimage.chkpoint。
      (7)拷贝fsimage.chkpoint到NameNode。
      (8)NameNode将fsimage.chkpoint重新命名成fsimage。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

若能绽放光丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值