HADOOP大数据之HDFS架构原理

HDFS架构图

  • HDFS集群遵循主从架构( master/slave )。通常包括一个主节点和多个从节点。
  • 在内部,文件分块存储,每个块根据复制因子存储在不同的从节点计算机上形成备份。
  • 主节点存储和管理文件系统namespace,即有关文件块的信息,例如块位置,权限等﹔从节点存储文件的数据块。
  • 主从各司其职,互相配合,共同对外提供分布式文件存储服务。当然内部细节对于用户来说是透明的。
HDFS Architecture

NameNode

主角色: namenode

  • NameNode是Hadoop分布式文件系统的核心,架构中的主角色。
  • NameNode维护和管理文件系统元数据,包括名称空间目录树结构、文件和块的位置信息、访问权限等信息。
  • 基于此,NameNode成为了访问HDFS的唯一入口。
  • NameNode内部通过内存和磁盘文件两种方式管理元数据。
  • 其中磁盘上的元数据文件包括Fsimage内存元数据镜像文件和edits log ( Journal )编辑日志。
  • 在Hadoop2之前,NameNode是单点故障。Hadoop 2中引入的高可用性。Hadoop群集体系结构允许在群集中以热备配
    置运行两个或多个NameNode。
NameNode

DataNode

从角色: datanode

  • DataNode是Hadoop HDFS中的从角色,
  • DataNode的数量决定了HDFS集群的整体数据存储能力。通过和NameNode配合维护着数据块。

Secondarynamenode

主角色辅助角色: secondarynamenode

  • 除了DataNode和NameNode之外,还有另一个守护进程,它称为secondary NameNode。充当NameNode的辅助节点,但不能替代NameNode。
  • 当NameNode启动时,NameNode合并Fsimage和edits log文件以还原当前文件系统名称空间。如果edits log过大不利于加载,

HDFS重要特性

  1. 主从架构:(Namenode是HDFS主节点,Datanode是HDFS从节点)。
  2. 分块存储机制:HDFS中的文件在物理上是分块存储( block )的}\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管道
  • Pipeline,中文翻译为管道。这是HDFS在上传文件写数据过程中采用的一种数据传输方式。

  • 客户端将数据块写入第一个数据节点,第一个数据节点保存数据之后再将块复制到第二个数据节点,后者保存后将其复制到第三个数据节点。


  • 因为数据以管道的方式,顺序的沿着一个方向传输,这样能够充分利用每个机器的带宽,避免网络瓶颈和高延迟时的连接,最小化推送所有数据的延时。在线性推送模式下,每台机器所有的出口宽带都用于以最快的速度传输数据,而不是在多个接受者之间分配宽带。lb

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

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

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职责
  • NameNode是HDFS的核心,集群的主角色,被称为Master。
  • NameNode仅存储管理HDFS的元数据∶文件系统namespace操作维护目录树,文件和块的位置信息。
  • NameNode不存储实际数据或数据集。数据本身实际存储在DataNodes中。
  • NameNode知道HDFS中任何给定文件的块列表及其位置。使用此信息NameNode知道如何从块中构建文件。
  • NameNode并不持久化存储每个文件中各个块所在的DataNode的位置信息,这些信息会在系统启动时从DataNode汇报中重建。
  • NameNode对于HDFS至关重要,当NameNode关闭时,HDFS / Hadoop集群无法访问。NameNode是Hadoop集群中的单点故障。
DataNode职责
  • DataNode负责将实际数据存储在HDFS中。是集群的从角色,被称为Slave。
  • DataNode启动时,它将自己发布到NameNode并汇报自己负责持有的块列表。根据NameNode的指令,执行块的创建、复制、删除操作。
  • DataNode会定期( df.s..heartbeat..ntecxal配置项配置,默认是3秒)向NameNode发送心跳,如果NameNode长时间没有接受到
  • DataNode发送的心跳,NameNode就会认为该DataNode失效。
  • DataNode会定期向NameNode进行自己持有的数据块信息汇报,汇报时间间隔取参数dfs..blockrepoxt..intervalMsec,参数未配置的话默认为6小时.
  • DataNode所在机器通常配置有大量的硬盘空间。因为实际数据存储在DataNode中。

NameNode元数据管理

元数据管理概述
按存储形式分为和两种,分别存在内存和磁盘上。

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

    元数据本地存储目录:hdfs-site.xml配置文件中
SecondaryNameNode

主角色NameNode的辅助角色,定期做edit logs和fsimage文件的合并,更新NameNode元数据的内容,减小NameNode上的压力。
SecondaryNameNode Checkpoint流程


SecondaryNameNode Checkpoint流程
NameNode存储多目录

namenode元数据存储目录由参数: dfs.namenode.name.dir指定。
,各个目录存储的文件结构和内容都完全一样,相当于备份,这样做的好处是当其中一个目录损坏了,也不会影响到hadoop的元数据,特别是当其中一个目录是NFS(网络文件系统Network File System,NFS )之上,即使你这台机器损坏了,元数据也得到保存。

Hadoop Archive文件归档
  • Archive概述
    Hadoop Archives可以有效的处理以上问题,它可以把多个文件归档成为一个文件,归档成一个文件后还可以透明的访问每一个文件。
  • 查看Archive--查看归档之前的样子
    在查看har文件的时候,如果没有指定访问协议,默认使用的就是hdfs ://,此时所能看到的就是归档之后的样子。此外,Archive还提供了自己的har uri访问协议。如果用har uri去访问的话,索引、标识等文件就会隐藏起来,只显示创建档案之前的原文件:
    Hadoop Archives的URI是︰
    har : / / scheme-hostname : port/archivepath/fileinarchivescheme-hostname格式为hdfs-域名:端口。
Sequence File序列化文件

Sequence File是Hadoop提供的一种二进制文件存储格式。
一条数据称之为record (记录),底层直接以键值对形式序列化到文件中。

  • 优点
    二级制格式存储,比文本文件更紧凑。
    支持不同级别压缩(基于Record或Block压缩)。文件可以拆分和并行处理,适用于MapReduce程序。
  • 局限性
    二进制格式文件不方便查看。
    特定于hadoop,只有Java API可用于与之进行交互。尚未提供多语言支持。

你可能感兴趣的:(HADOOP大数据之HDFS架构原理)