HADOOP大数据之HDFS架构原理

2023-03-07  本文已影响0人  奋斗的韭菜汪

HDFS架构图

HDFS Architecture

NameNode

主角色: namenode

NameNode

DataNode

从角色: datanode

Secondarynamenode

主角色辅助角色: secondarynamenode

HDFS重要特性

  1. 主从架构:(Namenode是HDFS主节点,Datanode是HDFS从节点)。
  2. 分块存储机制:HDFS中的文件在物理上是分块存储( block )的},块的大小可以通过配置参数来规定,参数位于hdfs-default.xml中: dfs.blocksize。\color{red}{默认大小是128M ( 134217728 )}$。
  3. 副本机制:所有block都会有副本,每个文件的block大小 ( dfs.blocksize )和副本系数(dfs.replication ),默认dfs.replication的值是3,也就是会额外再复制2份,连同本身总共3份副本。
  4. namespace:层次性文件组织结构(类windows)
  5. 元数据:文件自身属性信息、文件块位置映射信息
  6. 数据块存储:文件的各个block的具体存储管理由DataNode节点承担。

HDFS Web Interfes

  1. 模块功能解读-Utilities
    logs:各个datanode上的日志
    Configuration:查看配置文件是否生效
    Borwse the file system: 查看整个文件系统

HDFS写数据流程

核心概念--Pipeline管道
ACK应答响应
核心概念--默认3副本存储策略

默认副本存储策略是由\color{red}{BlockPlacementPolicyDefault}指定。
第一块副本∶优先客户端本地,否则随机
第二块副本∶不同于第一块副本的不同机架。
第三块副本:第二块副本相同机架不同机器。

HDFS默认副本存储策略示意图.jpg
hdfs写入数据流程
Data-Write-Mechanism-in-HDFS.gif
  1. Client 发起文件上传请求(HDFS客户端创建FileSystem对象实例DistributedFileSystem,FileSystem封装了与文件系统操作的相关方法。
    ),通过 RPC 与 NameNode 建立通讯, NameNode 检查目标文件是否已存在,父目录是否存在,返回是否可以上传;
  2. Client 请求第一个 block 该传输到哪些 DataNode 服务器上;
  3. NameNode 根据配置文件中指定的备份数量及机架感知原理进行文件分配, 返回可用的 DataNode 的地址如:A, B, C;
    Hadoop 在设计时考虑到数据的安全与高效, 数据文件默认在 HDFS 上存放三份, 存储策略为本地一份,同机架内其它某一节点上一份,不同机架的某一节点上一份。
  4. Client 请求 3 台 DataNode 中的一台 A 上传数据(本质上是一个 RPC 调用,建立 pipeline ),A 收到请求会继续调用 B,然后 B 调用 C,将整个 pipeline 建立完成, 后逐级返回 client;
  5. Client 开始往 A 上传第一个 block(先从磁盘读取数据放到一个本地内存缓存),以 packet 为单位(默认64K),A 收到一个 packet 就会传给 B,B 传给 C。A 每传一个 packet 会放入一个应答队列等待应答;
  6. 数据被分割成一个个 packet 数据包在 pipeline 上依次传输,在 pipeline 反方向上, 逐个发送 ack(命令正确应答),最终由 pipeline 中第一个 DataNode 节点 A 将 pipelineack 发送给 Client;
  7. 当一个 block 传输完成之后,Client 再次请求 NameNode 上传第二个 block,重复步骤 2;
hdfs读数据流程
Data-Read-Mechanism-in-HDFS.gif

1、HDFS客户端创建FileSystem对象实例DistributedFileSystem,FileSystem封装了与文件系统操作的相关方法。调用DistributedFileSystem对象的open()方法来打开希望读取的文件。
2、DistributedFileSystem使用RPC调用namenode来确定文件中前几个块的块位置(分批次读取)信息。
对于每个块,namenode返回具有该块所有副本的datanode位置地址列表,并且该地址列表是排序好的,与客户端的网络`拓扑距离近的排序靠前。
3、DistributedFileSystem将FSDataInputStream输入流返回到客户端以供其读取数据。FSDataInputStream类是DFSInputStream类的包装。
4、客户端在FSDataInputStream输入流上调用read()方法。然后,已存储DataNode地址的DFSInputStream连接到文件中第一个块的最近的DataNode。数据从DataNode流回客户端,结果客户端可以在流上重复调用read ( )。
5、当该块结束时,DFSInputStream将关闭与DataNode的连接,然后寻找下一个块的最佳datanode。这些操作对用户来说是透明的。所以用户感觉起来它一直在读取一个连续的流。
客户端从流中读取数据时,也会根据需要询问NameNode来检索下一批数据块的DataNode位置信息。
6、一旦客户端完成读取,就对FSDataInputStream调用close()方法。

HDFS集群角色职责

NameNode职责
DataNode职责

NameNode元数据管理

元数据管理概述
按存储形式分为\color{red}{内存元数据}\color{red}{元数据文件}两种,分别存在内存和磁盘上。

  1. 内存元数据
    为了保证用户操作元数据交互高效,延迟低) NameNode把所有的元数据都存储在内存中,我们叫做内存元数据。内存中的元数据是最完整的,包括文件自身属性信息、文件块位置映射信息。
    但是内存的致命问题是,断点数据丢失,数据不会持久化,因此NameNode又辅佐了元数据文件来保证元数据的安全完整。
  2. 元数据文件有两种:fsimage内存镜像文件、Edits log编辑日志。
    namenode元数据管理.jpg
    元数据本地存储目录:hdfs-site.xml配置文件中\color{red}{ \{dfs.namenode.dir\}/dfs/name}
上一篇 下一篇

猜你喜欢

热点阅读