Hadoop系列——HDFS相关架构,面试题,读数据/写数据/SecondaryNameNode的工作机制

一、HDFS文件块的大小

HDFS中的文件在物理上是分块存储(Block),块的大小可以通过参数配置,默认是128M。
HDFS文件块设置的太小会增加寻址时间;设置的太大会导致磁盘传输数据的时间远远大于定位块开始位置的时间;HDFS块大小的设置主要取决于磁盘的传输速率。

二、HDFS写数据流程

  1. 客户端通过DFSNamNode请求上传文件,NameNode检查文件是否存在,文件的父目录是否存在。
  2. NameNode返回Cli可以上传。
  3. Cli请求上传第一个数据块。
  4. NameNode返回3个DataNode节点:dn1,dn2,dn3
  5. Cli通过FSDataOutPutStream(一个类)向dn1请求上传数据,dn1调用dn2,dn2调用dn3,建立通讯管道。
  6. dn1,dn2,dn3逐级应答Cli。
  7. Cli开始向dn1上传第一个数据块Block,先从磁盘读取数据放到一个本地内存中缓存,然后以Package为单位向dn1发送数据,dn1收到Package后会传给dn2,dn2回传给dn3,dn1每传一个Package,就会放入一个应答队列等待应答。
  8. 当一个Block传输完以后,Cli再次请求NameNode上传第二个数据块。
    在这里插入图片描述
    小朋友,你是否有很多问好?反正我是有的,先记下来吧
  9. 第6步的逐级应答是什么
    正常情况下,这个应答会从管道的最后一个数据节点开始,往客户端方向发送,管道上的每一个节点都会等待这个应答,收到应答后,才会开始接受数据,也就是说,客户端会等待这个应答,然后才开始发送数据。
  10. 第7步中的应该队列是干嘛的?
    DFSOutputStream同时也维护着另一个中间队列——确认队列(ack queue),确认队列中的包只有在得到管道线中所有的datanode的确认以后才会被移出确认队列。

三、HDFS的读数据流程

  1. Cli通过DFS向NameNode请求下载数据
  2. NameNode查询元数据,返回数据所在的节点
  3. Cli根据就近原则,选择一个DataNode请求读取数据
  4. DataNode传输数据给Cli,并以Package为单位进行校验
  5. CliPackage为单位接受,先缓存在本地,然后写入目标文件
    在这里插入图片描述

四、NameNode的工作机制以及SeconaryNameNode的工作机制

NameNode阶段

  1. 如果是第一次启动NameNode,则将其格式化,创建FsimageEdits文件;不过不是第一次,则直接加载两个文件。
  2. Cli对元数据进行增删改请求
  3. NameNode记录操作日志,更新滚动日志。
  4. NameNode对内存中的数据进行增删改。

SecondaryNameNode阶段
5. SNNNN询问是否要进行checkPoint
6. SNN请求执行checkPoint
7. NN滚动正在写的Edits日志
8. NN将滚动前的FsimageEdits文件拷贝到SNN
9. SNN加载镜像文件和编辑日志到内存,并进行合并
10. 生成新的镜像文件Fsimage_chkpoint ,并拷贝到NN
11. NN将镜像文件重新命名为Fsimage
在这里插入图片描述

小朋友你是否又有问好了,这里为什么要有镜像文件和编辑日志,就需要你自己去查了,不再赘述。

猜你喜欢

转载自blog.csdn.net/Cxf2018/article/details/109427244