欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

HDFS 面试篇(超全超详细) 欢迎补充

程序员文章站 2022-06-27 19:50:02
HDFS 简介HDFS (全称:Hadoop Distribute File System,Hadoop 分布式文件系统)是 Hadoop 核心组成,是分布式存储服务。分布式文件系统横跨多台计算机,在大数据时代有着广泛的应用前景,它们为存储和处理超大规模数据提供所需的扩展能力。HDFS是分布式文件系统中的一种。Hdfs的block和spark的partition有什么区别吗?1.在hdfs中的block是分布式存储的最小单元,等分,并且可以设置冗余,这样设计会出现一部分磁盘空间的浪费,但是整齐...

HDFS 简介

HDFS (全称:Hadoop Distribute File System,Hadoop 分布式文件系统)是 Hadoop 核心组
成,是分布式存储服务。
分布式文件系统横跨多台计算机,在大数据时代有着广泛的应用前景,它们为存储和处理超大规模
数据提供所需的扩展能力。
HDFS是分布式文件系统中的一种。

HDFS 整体架构介绍

HDFS 面试篇(超全超详细) 欢迎补充

1)Client:就是客户端。
(1)文件切分。文件上传HDFS的时候,Client将文件切分成一个一个的Block,然后进行存储;
(2)与NameNode交互,获取文件的位置信息;
(3)与DataNode交互,读取或者写入数据;
(4)Client提供一些命令来管理HDFS,比如启动或者关闭HDFS;
(5)Client可以通过一些命令来访问HDFS;
2)NameNode:就是Master,它是一个主管、管理者。
(1)管理HDFS的名称空间;namespace
(2)管理数据块(Block)映射信息;
(3)配置副本策略(默认): 3
(4)处理客户端读写请求。
3) DataNode:就是Slave。NameNode下达命令,DataNode执行实际的操作。
(1)存储实际的数据块;
(2)执行数据块的读/写操作。
4) SecondaryNameNode:并非NameNode的热备。当NameNode挂掉的时候,它并不能马上替换NameNode并提供服务。
(1)辅助NameNode,分担其工作量;
(2)定期合并Fsimage和Edits,并推送给NameNode;
(3)在紧急情况下,可辅助恢复NameNode。

NameNode内存包含哪些,具体如何分配

1)Namespace:维护整个文件系统的目录树结构及目录树上的状态变化;
2)BlockManager:维护整个文件系统中与数据块相关的信息及数据块的状态变化;
3)NetworkTopology:维护机架拓扑及DataNode信息,机架感知的基础;
4)其它:
  LeaseManager:读写的互斥同步就是靠Lease实现,支持HDFS的Write-Once-Read-Many的核心数据结构;
  CacheManager:Hadoop 2.3.0引入的集中式缓存新特性,支持集中式缓存的管理,实现memory-locality提升读性能;
  SnapshotManager:Hadoop 2.1.0引入的Snapshot新特性,用于数据备份、回滚,以防止因用户误操作导致集群出现数据问题;
  DelegationTokenSecretManager:管理HDFS的安全访问;
  另外还有临时数据信息、统计信息metrics等等。
  NameNode常驻内存主要被Namespace和BlockManager使用,二者使用占比分别接近50%。其它部分内存开销较小且相对固定,与Namespace和BlockManager相比基本可以忽略。

HDFS 读取数据流程解析

HDFS 面试篇(超全超详细) 欢迎补充

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

HDFS写数据流程

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步)。

NN和2NN工作机制

HDFS 面试篇(超全超详细) 欢迎补充

  1. 第一阶段:NameNode启动
    (1)第一次启动 NameNode 格式化后,创建 fsimage 和 edits 文件。如果不是第一次启动,直接加载编辑日志和镜像文件到内存。
    (2)客户端对元数据进行增删改的请求。
    (3)NameNode记录操作日志,更新滚动日志。
    (4)NameNode在内存中对数据进行增删改查。
  2. 第二阶段: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。

Fsimage与Edits文件解析

HDFS 面试篇(超全超详细) 欢迎补充

  1. Fsimage文件:是namenode中关于元数据的镜像,一般称为检查点,这里包含了HDFS文件系统
    所有目录以及文件相关信息(Block数量,副本数量,权限等信息)
  2. Edits文件:存储了客户端对HDFS文件系统所有的更新操作记录,Client对HDFS文件系统所有的
    更新操作都会被记录到Edits文件中(不包括查询操作)
  3. seen_txid:该文件是保存了一个数字,数字对应着最后一个Edits文件名的数字
  4. VERSION:该文件记录namenode的一些版本号信息,比如:CusterId,namespaceID等

HDFS 安全模式

安全模式是HDFS所处的一种特殊状态,在这种状态下,文件系统只接受读数据请求,而不接
受删除、修改等变更请求。在NameNode主节点启动时,HDFS首先进入安全模式,DataNode在
启动的时候会向NameNode汇报可用的block等状态,当整个系统达到安全标准时,HDFS自动离
开安全模式。如果HDFS出于安全模式下,则文件block不能进行任何的副本复制操作,因此达到
最小的副本数量要求是基于DataNode启动时的状态来判定的,启动时不会再做任何复制(从而达
到最小副本数量要求),HDFS集群刚启动的时候,默认30S钟的时间是出于安全期的,只有过了
30S之后,集群脱离了安全期,然后才可以对集群进行操作。

本文地址:https://blog.csdn.net/BoomLee/article/details/110437145