Hadoop基础——HDFS知识点梳理

HDFS基础知识

1. 介绍一下HDFS组成架构?

组成部分:

  • HDFS Client,
  • NameNode,
  • DataNode
  • Secondary NameNode( HA模式下是 StandBy NameNode)
  1. Client: 客户端
    1. 文件切分,文件上传HDFS时,client将文件切分成一个一个的block,然后进行存储。
    2. 与NN交互,获取文件的位置信息。
    3. 与DN交互,读取或者写入数据。
    4. Client提供一些命令来管理HDFS, 比如启动或者关闭HDFS
    5. Client可以通过一些命令来访问HDFS
  2. NameNode: master,
    1. 管理hdfs的命名空间
    2. 管理数据块的映射信息
    3. 处理客户端的读写请求
    4. 配置副本策略
  3. DateNode: slave,NN下达命令,DN执行实际的操作
    1. 存储实际的数据块
    2. 执行数据块的读写操作
  4. Secondary NameNode:
    1. 辅助NN,分担其工作量。
    2. 定期合并fsimage和edits log,生成新的fsimage替换旧的fsimage。
    3. 在紧急情况下辅助恢复NN。

2. NameNode 和 SecondaryNameNode 的区别与联系

  1. 区别:
    1. namenode 负责管理整个文件系统的元数据,以及命名空间。
    2. secondary name node 负责定期合并fsimage和edit log。
  2. 联系:
    1. secondary name node 中保存了一份和namenode一致的fsimage(镜像文件)和edits log(编辑日志)。
    2. 在namenode 发生故障时, 可以从secondary namenode恢复数据。

3. NN和DN的区别和联系?

  1. 从角色来看:
    1. NN是master,承担管理者的角色,
    2. DN 是slave, 承担具体执行者的角色。
  2. 从工作内容:
    1. NN管理HDFS的名称空间,数据块的映射信息,处理客户端读写请求。
    2. DN 存储实际的数据块, 执行数据块的读/写操作。

4. HDFS在HA模式下的工作流程?

相较于非HA模式,多了3部分:

  1. 负责负载均衡的ZK集群。
  2. Edits log文件管理系统Qjournal。
  3. ZKFailoverController负责监测NN是否健康。
    Hadoop基础——HDFS知识点梳理_第1张图片

5. ZKFailoverController的作用?(HA NameNode的工作模式)

  1. 健康监测: 周期性的向它监控的NN发送健康探测命令,从而确定某个NN是否处于健康状态,如果机器宕机,心跳失败,zkfc就会标记该NN处于一个不健康的状态。
  2. 会话管理: 如果NN是健康的,zkfc就会在zk 中保持一个打开的会话,如果NN同时还是Active状态,那么zkfc还会在Zookeeper中占有一个类型为短暂类型的znode,当这个NN挂掉后,znode也将会被删掉,然后备用的NN,将会得到这把锁,升级为主NN,同时标记状态为Active。
  3. 当宕机的NN新启动时,会再次注册zk, 发现已有znode锁,会自动变为standby状态(防止脑裂,出现两个active node)
  4. master选举:通过在zk中维持一个短暂类型的znode, 来实现抢占式的锁机制,从而判断哪个NameNode为Active状态。

6. HDFS的存储机制

写数过程:

  1. 客户端通过 Distributed FileSystem模块向NN发其文件上传请求, NN检查目标文件是否已存在,父目录是否存在
  2. NN返回是客户端是否可以上传
  3. 客户端请求第一个block上传到哪几个dn服务器上
  4. NN返回3个dn节点,分别为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的服务器。
    Hadoop基础——HDFS知识点梳理_第2张图片

读数过程:

  1. 客户端通过 Distribued FileSystem 向NameNode请求文件,NameNode通过查询元数据,找到文件所在的DataNode地址。
  2. 挑选一台DataNode(就近原则)服务器,请求读取数据。
  3. DataNode开始传输数据给客户端(从磁盘里读取数据输入流,以packet为单位来做校验)
  4. 客户端以packet为单位接收,现在本地缓存,然后写入目标文件。
    Hadoop基础——HDFS知识点梳理_第3张图片

7. Secondary NN 和 HA模式下的StandbyNN的区别

  1. 首先强调,SecondaryNN 不是NN的备份,只能算是辅助,负责定期合并fsimage和edits log,形成新的fsimage 以替换旧的fsimage。简单理解:Secondry NN负责的是定期存档,方便那天NN异常退出,可以快速回复。
  2. HA下的Standby NN可以理解为是Active的备份,实时合并fsimage和edits log,将合并后的fsimage 替换旧的fsimage。一旦Active NN挂了,Standby NN 就可以转正,继续提供服务,无需等待,即高可用性的含义
  3. 对比,secondary nn 架构简单,但是存在元数据丢失的问题;HA架构复杂,但是元数据不会丢失。

8. HDFS中负责存储的是哪一部分

DateNode,DN 负责具体的数据存储操作

9. HDFS中的Block默认大小是多少?为什么这么设计?

Block默认大小:
1.X版本是64MB,2.X和3.X是128MB。
Block的大小是不能太大,也不能太小,这样做的目的是尽量减少寻址时间在总时间中的占比。
这么理解:

  • 文件块越大,寻址时间越短,但磁盘传输时间越长;
  • 文件块越小,寻址时间越长,但磁盘传输时间越短。

至于为什么是128M,根据统计,HDFS中平均寻址时间大概为10ms,经过测试,寻址时间为传输时间的1%时,为最佳状态
那么按照公式计算:
最佳传输时间为10ms/0.01=1000ms=1s
目前磁盘的传输速率普遍为100MB/s:
最佳block大小:100MB/s x 1s = 100MB
处于对2进制的执着,block设计为128MB。

你可能感兴趣的:(大数据组件,hdfs,hadoop,大数据)