• Hadoop-HDFS分布式文件系统基础


    分布式存储的核心属性和功能作用

    为什么使用分布式文件系统?

    当存储海量数据时,当磁盘空间不够时,往往是通过扩容来解决,但是升级扩容的成本高。

    单节点不能完成高并发,需要支撑海量数据的计算。

    分布式存储能无线拓展,不像单机主板有限,连接的磁盘有限。

    元数据记录

    分布式文件系统如何快速定位文件?通过元数据去记录,元数据相当于书的目录,是记录数据的数据,记录文件名,大小,存储机器IP这些信息。

    NameNode记录的元数据类型有两种:

    • 文件自身的属性信息

    文件名称,权限,修改时间,大小等

    • 文件块位置映射信息

    记录文件块和DataNode之间的映射信息,即哪个块位于哪个结点上

    分块存储

    文件过大,导致单机装不下,将文件分块存储,对每个块进行并行操作,能提高操作效率,但记录时也要记录每个块的存储信息,也就是元数据。当文件大小超过128M就分块,所以一个块的大小小于等于128M。

    副本机制

    不同机器设置备份,冗余存储,保障数据安全,比如node1存储第一个文件块和第二个文件块的备份,node2存储第二个文件块和第一个文件块的备份。文件的所有block都有副本,副本系数可以在文件创建时指定,也可以在之后改变,副本系数由dfs.replication控制,默认值是3,也就是会算复制两份,连同本身共三份。

    主从架构

    提供给用户统一个接口去访问,一个HDFS集群由一个NameNode和一定数量的DataNode组成,各司其职,主角色来维护元数据和目录树结构,DataNode需要去管理具体的数据块,将存储信息反馈给主角色NameNode,例如要删除一个文件,用户去操作NameNode,而真正干活的是DataNode,NameNode去指挥DataNode删除文件。

    namespace

    HDFS支持传统的层次型文件组织结构,用户可以创建删除目录文件,NameNode负责维护文件系统的namespace名称空间,任何对文件系统名称或属性的修改都将被NameNode记录下来,HDFS给客户端提供一个统一的抽象目录树,客户端通过路径(url)来访问资源,如hdfs://192.168.88.151:9870/dir-a/file.data

    HDFS简介

    HDFS(Hadoop Distributed File System)Hadoop分布式文件系统

    HDFS的架构图 

    HDFS使用多台计算机存储文件,并提供一个统一的访问接口

    HDFS的设计目标

    HDFS适合大文件处理,并不适合小文件的处理

    HDFS更注重数据的吞吐,不注重数据的交互式访问,所以处理延迟较高

    HDFS不能编辑修改

    HDFS Shell命令行

    介绍

    通过Shell命令行来操作文件系统

    HDFS Shell CLI(command-line interface 命令行界面)支持多种文件系统,包括本地文件系统和分布式文件系统,具体操作什么文件系统取决于命令行中的文件路径URL的前缀协议。

     可以在/export/server/hadoop-3.3.0/etc/hadoop/core-site.xml中设置默认访问的文件系统

     hdfs dfs也可以访问文件系统,只不过只能访问HDFS文件系统。

    可以通过hadoop fs -help来查看每个命令的用法

    创建文件夹

     查看指定目录内容

    上传文件到HDFS指定目录下

    localsrc的标准格式是  file:///

    dst的标准格式是 hdfs://node1:8020/

     查看HDFS文件内容

     下载HDFS文件

     指定到本地目录的具体某个文件名(这个文件可有可无),就等于给下载的文件改名。

    拷贝HDFS文件

    追加数据到HDFS文件中

    将本地文件追加到HDFS文件里

    HDFS的各角色职责

    主角色:NameNode

    是分布式文件系统的核心,架构中的主角色,维护和管理文件系统的元数据,包括名称空间目录树结构,文件块的位置信息,访问权限,它是访问HDFS的唯一入口

    NameNode元数据的存储

    内存读写速度快,但断电丢失数据,所以还要硬盘定时的进行持久化。

    NameNode的数据保存在内存中,当系统重启时,需要DataNode向NameNode重新汇报信息。

    单点故障:一个地方出现了问题,导致整体不能工作

    主角色需要大内存

    从角色:DataNode

    负责具体数据块的存储,扩容集群指的是增加DataNode节点.

    从角色需要大磁盘

    主角色辅助角色:secondarynamenode

    是NameNode的辅助节点,但不能替代NameNode,主要是帮助主角色进行元数据文件的合并动作。

    HDFS的写数据流程(上传文件)

    几个概念

    Pipeline:管道,上传文件的一种传输方式。

    客户端上传到node1的HDFS文件系统(即保存到DataNode中),node1保存数据后再复制到第二个节点依此类推。

    线性传输沿着一个方向传输,充分利用每台机器的带宽,能够减少延迟,而不是采用拓扑式传输,让客户端发给node1-node3。

    ACK应答响应

    • ACK(AcKnowledeg character)即确认字符,在数据通信中,接收方发给发送方的一种传输类控制字符,表示发送的数据已经确认接收无误。比如node1给node2发送数据abc,那么node2按字符给node1发送确认。
    • 在HDFS的pipeline管道传输数据的过程中,传输的反方向会进行ACK校验,确保传输安全

    默认三副本存储策略

    • 第一块副本:看用户客户端本地有没有DataNode,也就是客户端这台机器是否在集群中,否则就近随机。
    • 第二块副本:不同于第一块副本的不同机架。
    • 第三块副本:第二块副本相同机架的不同机器。

     流程

    • 1.HDFS客户端创建对象实例DistributeFileSystem,该对象封装了与HDFS文件系统操作的相关方法。
    • 2.调用DistributedFileSystem对象的create()方法,通过RPC请求NameNode创建文件。

    NameNode执行各种检查判断:目标文件是否存在,父目录是否存在,客户端是否具有创建权限。

    检查通过后,NameNode为本次请求记下一条记录,返回FSDataOutputStream输出流对象给客户端用于写数据。

    • 3.客户端通过FSDataOutputStream输出流开始写入数据。
    • 4.写入数据时,将数据分成一个个数据包(packet 默认64k),内部组件DataStreamer请求NameNode挑选出适合存储数据副本的一组DataNode地址,默认是3副本存储。

    • 5.传输的反方向上,通过ACK机制校验数据包传输是否成功。
    • 6.客户端完成数据写入后,在FSDataOutputStream输出流上调用close()方法关闭
    • 7.DistributedFileSystem联系NameNode告知其文件写入完成,等待NameNode确认。

     如果有至少一个上传成功,客户端通知NameNode,如果有缺失的副本(即复制传输失败),NameNode会找其他的机器进行复制。

  • 相关阅读:
    Linux安装ES最新版
    Apache Doris (四十五): Doris数据更新与删除 - Sequence 列
    【S0062-ssh(CNN个性化推荐算法)-基于CNN的个性化音乐推荐检索系统的设计与实现-哔哩哔哩】 https://b23.tv/zTrbnPR
    小红书和达人合作步骤是什么?对接达人合作流程分享
    2093409-57-3,DBCO-PEG3-amine,DBCO-PEG3-NH2,二苯并环辛炔-三聚乙二醇-氨基供应
    Java-day15(Java常用类)
    猿创征文 | 【Rust指南】解析struct 结构体的定义、实例化、方法、所有权、关联函数
    扩展pytest接口自动化框架-MS数据解析功能
    Linux/Validation
    Vue3中jsx父子传值、provide和inject、v-memo指令、Teleport内置组件、KeepAlive缓存组件、transition过渡组件
  • 原文地址:https://blog.csdn.net/weixin_52972575/article/details/125881846