暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Hadoop大数据平台学习笔记之HDFS

运维路书 2023-09-12
63


篇文章对Hadoop的概念和基础理论做了简要介绍

《Hadoop大数据平台学习笔记之概念篇

接下来会对Hadoop的三大组件逐一的详细解析


本期先来看存储系统 HDFS




HDFS简介


HDFS: Hdaoop分布式文件系统


  • Hdaoop核心组件之一,位于大数据生态圈的最底层,用于解决海量数据存储问题。

  • HDFS是横跨多台计算机上的文件存储系统

  • HDFS是一种能够在普通硬件上运行的分布式文件系统,具有高度容错的特性,适用于大数据集的应用程序,适合存储TB和PB级别的数据

  • HDFS使用多台计算机存储文件,并且提供统一的访问接口,可以像访问一个普通的Linux文件系统一样使用分布式文件系统

 


HDFS应用场景


适合场景:

大文件

数据流式访问

一次写入多次读取

低成本部署,廉价PC

高容错


不适合场景:

小文件

数据交互式访问

频繁任意修改

低延迟处理



HDFS特性



官方HDFS架构图



概述:

  • 主从架构

  • 分块存储

  • 副本机制

  • 元数据记录

  • 抽象统一的目录结构(namespace)

 



1

主从架构

HDFS集群是标准的 master/slave主从架构集群一个HDFS集群由一个NameNode和一定数目的DataNode组成NameNode为主节点,DataNode为从节点,两种角色各司其职,协同完成分布式的文件存储服务官方图中为一主五从的架构,5个datanode分别放置在两个不同的机架上另外还可以再增加一个 SecondaryNameNode作为主节点的备份节点



2

分块存储

HDFS中的文件在物理上是分块存储(block)的,默认大小为128M,不足128M则本身就是一块块的大小可以通过参数来配置,参数位于hdfs-default.xml中dfs.blocksize



3

副本机制

文件的所有block都会有副本,副本系数可以在文件创建时指定,也可以在之后通过命令改变副本数由参数dfs.replication控制,默认值是3,也就是额外会在复制两份。‍



4

元数据管理

HDFS中NameNode管理的元数据有两种类型:文件自身属性信息文件名称、权限、修改时间、文件大小、副本数、数据块大小文件块位置映射信息记录文件块和DataNode之间的映射关系,即哪个块存储在哪个节点上




5

NameSpace

HDFS支持传统的层次型文件组织结构。用户可以创建目录,然后将文件保存在这些目录里。NameNode负责维护文件系统的namespace名称空间,任何对文件系统名称空间或属性的修改都将被NameNode记录下来。HDFS会给客户端提供一个统一的抽象目录树,客户端通过路径来访问文件,形如:

    hdfs://namenode:port/dir-a/dir-b/file.data



    6

    数据块存储

    文件的各个block的具体存储管理由DataNode节点承担每一个block都可以在多个DataNode上存储


    HDFS角色与职责



    主角色:NameNode

    NameNode 职责:


    NameNode仅存储HDFS的元数据:文件系统中所有文件的目录树,并跟踪整个集群中的文件,不存储实际数据。


    NameNode 知道HDFS中任何给定文件的块列表及其位置,使用此信息NameNode知道如何从块中构建文件。


    NameNode 不持久化存储每个文件中给个块所在的datanode的位置信息,这些信息会在系统启动时从DataNode中重建。


    NameNode 是Hadoop集群中的单点故障。‍


    NameNode 所在机器通常会配置大量内存。

     

    从角色:DataNode

    DataNode 职责:


    DataNode 负责最终数据块block的存储。


    DataNode启动时,会将自己注册到NameNode并汇报自己负责持有的块列表。


    当某个DataNode关闭时,不会影响数据的可用性,NameNode将安排由其他DataNode管理的块进行副本复制。


    DataNode所在机器通常配置大量的硬盘空间,因为实际数据存储在DataNode中。‍


     

    主角色辅助角色:SecondaryNameNode

    注意:不是namenode的备份节点

     

    Secondary NameNode 充当NameNode 的辅助节点,但不能替代NameNode 。

    主要是帮助主角色进行元数据文件的合并动作,可以通俗理解为主角色的 “秘书”。

     


    HDFS写文件流程


    核心概念


    1






    Pipeline管道


    • Pipeline, 管道,这是HDFS在上传文件写数据过程中采用的一种数据传输方式。

    • 客户端将数据块写入第一个数据节点,

      第一个数据节点保存数据之后再将块复制到第二个数据节点,

      后者保存后将其复制到第三个数据节点。




    为什么DataNode之间采用pipeline线性传输?


    为什么不是一次性发送给三个DataNode的拓扑式传输呢?‍





    01

    数据以管道的方式,顺序沿着一个方向传输,这样能够充分利用每台机器的带宽,避免网络瓶颈和高延迟时的连接,最小化推送所有数据的延时



    02

    在线性推送模式下,每台机器所有的出口带宽都用于以最快的速度传输数据,而不是在多个接收者之间分配带宽。‍




    2






    ACK应答响应


    • ACK (Acknowledge character) 即确认字符,在数据通信中,接收方发给发送方的一种传输类控制字符。表示发来的数据已确认接收无误。

    • HDFS pipeline管道传输数据的过程中,传输的反方向会进行ACK校验,确保数据的传输安全。

     

     

    3






    默认3副本存储策略


    默认副本存储策略由 BlockPlacementPolicyDefault指定

    • 第一块副本:优先客户端本地,否则随机。

    • 第二块副本:不同于第一块副本的不同机架

    • 第三块副本:第二块副本相同机架的不同机器

    • 如果不存在多个机架或者没有机架感知,则第二三块副本选择随机存储,总之不能将三个副本存储在同一台机器上。

     


    写文件流程



    HDFS写文件流程图

     



    1.

    HDFS客户端创建对象实例DistributedFileSystem,该对象中封装了与HDFS文件系统交互的操作方法。



    2.

    调用DistributedFileSystem对象的create()方法,通过RPC请求NameNode创建文件。NameNode执行各种检查判断:目标文件是否存在、父目录是否存在、客户端是否具有创建该文件的权限。检查通过,NameNode就会为本次请求记下一条记录,返回FSDataOutputStream输出流对象给客户端用于写数据。



    3.

    客户端通过FSDataOutputStream输出流开始写入数据。



    4.

    客户端写入数据时,将数据分成一个个的数据包(packet 默认64K),内部组件DataStreamer请求NameNode挑选出适合存储数据副本的一组DataNode地址,默认是3副本存储。


    4.1.

    DataStreamer将数据包流式传输到pipeline的DataNode1



    4.2.

    DataNode1存储数据包后将它发送到pipeline的DataNode2



    4.3.

    DataNode2存储数据包后将它发送到pipeline的DataNode3



    5.

    传输的反方向上,会通过ACK机制校验数据包传输是否成功。



    6.

    客户端完成数据写入后,在FSDataOutputStream输出流上调用close()方法关闭。



    7.

    DistributedFileSystem联系NameNode告知其文件写入完成,等待NameNode确认。

    因为NameNode已经知道文件由哪些块组成(DataStream请求分配数据块),因此仅需等待最小副本数上传成功,即可成功返回。最小副本数由参数dfs.namenode.replication.min指定,默认值是1。

     


    小结


    小结

      • NameNode是HDFS系统访问的唯一入口,只有访问NameNode才能告诉客户端能不能上传以及把数据上传到哪。因为NameNode维护着元数据,管理着DataNode的状态。

      • 数据实际上传过程是客户端直接与DataNode交互,采用pipeline管道的方式,以数据包的形式传输数据。同时在传递的反方向上进行ACK校验。

      • 数据存储默认采用三副本策略




    文章转载自运维路书,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

    评论