首页 > 其他分享 >HDFS分布式文件系统

HDFS分布式文件系统

时间:2024-03-18 13:56:34浏览次数:12  
标签:HDFS 文件 DataNode NameNode 分布式文件系统 数据 block

HDFS分布式文件系统

一、HDFS概念

HDFS介绍

HDFS是 Hadoop Distribute File System 的简称,意为:Hadoop分布式文件系统。是Hadoop核心组件之一,作为最底层的分布式存储服务而存在。

分布式文件系统解决的问题就是大数据存储。它们是横跨在多台计算机上的存储系统。分布式文件系统在大数据时代有着广泛的应用前景,它们为存储和处理超大规模数据提供所需的扩展能力。

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

image-20240316174921808

HDFS设计目标

  1. 硬件故障是常态, HDFS将有成百上千的服务器组成,每一个组成部分都有可能出现故障。因此故障的检测和自动快速恢复是HDFS的核心架构目标。
  2. HDFS上的应用与一般的应用不同,它们主要是以流式读取数据。HDFS被设计成适合批量处理,而不是用户交互式的。相较于数据访问的反应时间,更注重数据访问的高吞吐量
  3. 典型的HDFS文件大小是GB到TB的级别。所以,HDFS被调整成支持大文件。它应该提供很高的聚合数据带宽,一个集群中支持数百个节点,一个集群中还应该支持千万级别的文件。
  4. 大部分HDFS应用对文件要求的是write-one-read-many访问模型。一个文件一旦创建、写入、关闭之后就不需要修改了。这一假设简化了数据一致性问题,使高吞吐量的数据访问成为可能。
  5. 移动计算的代价比之移动数据的代价低。一个应用请求的计算,离它操作的数据越近就越高效,这在数据达到海量级别的时候更是如此。将计算移动到数据附近,比之将数据移动到应用所在显然更好。
  6. 在异构的硬件和软件平台上的可移植性。这将推动需要大数据集的应用更广泛地采用HDFS作为平台。

二、HDFS重要特性

首先,HDFS 是一个文件系统,用于存储文件,通过统一的命名空间目录树来定位文件

其次,它是分布式的,由很多服务器联合实现其功能,集群中的服务器有各自的角色

主从架构

  • HDFS集群式标准的master/slave主从架构集群
  • 一般一个HDFS集群是由一个NameNode和一定数目的Datanode组成
  • Namenode是HDFS主节点,Datanode是HDFS从节点,两种角色各司其职,共同协调完成分布式的文件存储服务。

分块存储

  • HDFS中的文件在物理上是分块存储(block)的,默认大小是128M,不足128M则本身就是一块

  • 块(block)的大小可用通过配置参数来规定,参数位于hdfs-default.xml中:dfs.blocksize。(默认是134217728,即128M)

  • 分块存储好处:针对块并行操作提高效率

image-20240316183627685

副本机制

  • 文件的所有block都会有副本。副本系数可以在文件创建的时候指定,也可以在之后通过命令改变。
  • 副本数由参数dfs.replication控制,默认值为3,也就是额外再复制2份,连同本身总共3份副本
  • 设置副本备份的作用:冗余存储,保障数据安全

Namenode 元数据管理

我们把目录结构及文件分块位置信息叫元数据。Namenode负责维护整个hdfs文件系统的目录树结构,以及每一个文件对应的block块信息(block的id,及所在datanode服务器)

在HDFS中,Namenode管理的元数据具有两种类型:

  • 文件自身的属性信息

    • 文件名称、权限、修改时间、文件大小、复制因子、数据块大小
  • 文件块位置映射信息

    • 记录文件块和DataNode之间的映射信息,即哪个位于哪个节点上
  • 元数据记录的功能:快速定位文件位置便于查找

Datanode数据存储

文件的各个block的具体存储管理由datanode节点承担。每一个block都可以在多个datanode上。Datanode需要定时向Namenode汇报自己持有的block信息

名字空间(Namespace)

HDFS支持传统的层次型文件组织结构。用户或者应用程序可以创建目录,然后将文件保存在这些目录里。文件系统名字空间的层次结构和大多数现有的文件系统类似:用户可以创建、修改、删除、移动或重命名文件。

Namenode负责维护文件系统的名字空间,任何对文件系统名字空间或属性的修改都会被Namenode记录下来。

HDFS会给客户端提供一个统一的抽象目录树,客户端通过路径来访问文件,形如:hdfs://namenode:port/dir-a/dir-b/dir-c/file.data。

三、HDFS工作流程与机制

HDFS集群角色

主角色:namenode

  • NameNode是Hadoop分布式文件系统的核心,架构中的主角色。
  • NameNode维护和管理文件系统元数据,包括名称空间目录树结构、文件和块的位置信息、访问权限等信息。
  • 基于此,NameNode成为了访问HDFS的唯一入口

从角色:datanode

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

主角色辅助角色: secondarynamenode

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

Namenode职责

  • NameNode仅存储HDFS的元数据:文件系统中所有文件的目录树,并跟踪整个集群中的文件,不存储实际数据。
  • NameNode知道HDFS中任何给定文件的块列表及其位置。使用此信息NameNode知道如何从块中构建文件
  • NameNode不持久化存储每个文件中各个块所在的datanode的位置信息,这些信息会在系统启动时从DataNode重建。
  • NameNode对于HDFS至关重要,当NameNode关闭时,HDFS / Hadoop集群无法访问。
  • NameNode是Hadoop集群中的单点故障
  • NameNode所在机器通常会配置有大量内存(RAM)

DataNode 职责

  • NameNode和DataNode会保持不断通信。
  • DataNode启动时,它将自己发布到NameNode并汇报自己负责持有的块列表。
  • 当某个DataNode关闭时,它不会影响数据或群集的可用性。NameNode将安排由其他DataNode管理的块进行副本复制。
  • DataNode所在机器通常配置有大量的硬盘空间。因为实际数据存储在DataNode中。
  • DataNode会定期(dfs.heartbeat.interval配置项配置,默认是3秒)向NameNode发送心跳,如果NameNode长时间没有接受到DataNode发送的心跳, NameNode就会认为该DataNode失效。
  • block汇报时间间隔取参数dfs.blockreport.intervalMsec,参数未配置的话默认为6小时.(报活)

HDFS的工作机制

NameNode负责管理整个文件系统元数据;DataNode负责管理具体文件数据块存储;Secondary NameNode协助NameNode进行元数据的备份。

HDFS的内部工作机制对客户端保持透明,客户端请求访问HDFS都是通过向NameNode申请来进行。

image-20240316220707444

HDFS写数据流程

image-20240316220732389

  1. client发起文件上传请求,通过RPC与NameNode建立通讯,NameNode检查目标文件是否已存在,父目录是否存在,返回是否可以上传

  2. client 请求第一个block该传输到哪些DataNode服务器上

  3. NameNode根据配置文件中指定的备份数量及副本放置策略进行文件分配,返回可用的DataNode的地址,如:A,B,C

    注:默认存储策略由BlockPlacementPolicyDefault类支持。也就是日常生活中提到最经典的3副本策略。

    1st replica 如果写请求方所在机器是其中一个datanode,则直接存放在本地,否则随机在集群中选择一个datanode.

    2nd replica 第二个副本存放于不同第一个副本的所在的机架.

    3rd replica 第三个副本存放于第二个副本所在的机架,但是属于不同的节点

    image-20240316221352858

  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将pipeline ack发送给client

  7. 当一个block传输完成之后,client再次请求NameNode上传第二个block到服务器

HDFS 读数据流程

image-20240316222906323

  1. Client 向NameNode发起RPC请求,来确定请求文件block所在的位置
  2. NameNode会视情况返回文件的部分或全部block列表,对于每个block,NameNode都会返回含有该block副本的DataNode地址
  3. 这些返回的DN地址,会按照集群拓扑结构得出DataNode与客户端的距离,然后进行排序,按照两个规则:网络拓扑结构中距离Client近的排靠前;心跳机制中超时汇报的DN状态为STALE,这样的靠后排
  4. Client 选取排序靠前的DataNode来读取block,如果客户端本身就是DataNode,那么将从本地直接获取数据;
  5. 底层上本质是建立FSDataInputStream,重复的调用父类DataInputStream的read方法,直到这个块上的数据读取完毕;一旦到达块的末尾,DFSInputStream关闭连接并继续定位下一个块的下一个Datanode
  6. 当读完列表的block后,若文件读取还没结束,客户端会继续先NameNode获取下一批的block列表;一旦客户端完成读取,它就会调用close()方法
  7. 读取完一个block都会进行checksum验证,如果读取DataNode时出现错误,客户端会通知NameNode,然后再从下一个拥有该block副本的DataNode继续读。
  8. NameNode只是返回Client请求包含块的DataNode地址,并不是返回请求块的数据
  9. 最终读取来所有的block会合并成一个完整的最终文件

四、namenode、datanode之间的通信

概述

  • 启动时,DataNode需要向NameNode注册自己并汇报自己持有的数据块信息;
  • 工作时,主从之间有心跳机制,数据块汇报机制;
  • DataNode会定期(dfs.heartbeat.interval配置项配置,默认是3秒)向NameNode发送心跳,如果NameNode长时间没有接受到DataNode发送的心跳, NameNode就会认为该DataNode失效。
  • DataNode会定期向NameNode进行自己持有的数据块信息汇报,汇报时间间隔取参数dfs.blockreport.intervalMsec,参数未配置的话默认为6小时。

fd8fb2c75497193b5680f1c4cb042b6

标签:HDFS,文件,DataNode,NameNode,分布式文件系统,数据,block
From: https://www.cnblogs.com/luoluoange/p/18080249

相关文章

  • HDFS的垃圾回收机制
    HDFS的垃圾回收机制1.垃圾桶机制解析每一个文件系统都会有垃圾桶机制,便于将删除的数据回收到垃圾桶里面去,避免某些误操作删除一些重要文件。回收到垃圾桶里里面的资料数据,都可以进行恢复。2.垃圾桶机制配置HDFS的垃圾回收的默认配置属性为0,也就是说,如果不小心误删除了某样东西......
  • HDFS 安全模式
    HDFS安全模式安全模式概述:安全模式是HDFS所处的一种特殊状态,在这种状态下,文件系统只接受读数据请求,而不接受删除、修改等变更请求,是一种保护机制,用于保证集群中的数据块的安全性。在NameNode主节点启动时,HDFS首先进入安全模式,集群会开始检查数据块的完整性。DataNode在启动的......
  • HDFSDATANODE数据传输详解
    本文主要阐述datanode中一个socket连接接收字节流的构成,帮助datanode的接收与处理数据。注意hadoop版本为3.1.1。写在前面Datanode本质上也是TCPServer,一般的TCPServer接到客户端请求以后会分配一个线程处理,对于Datanode而言,这个线程可以叫做Op处理连接。每个OP连接会多次和客户......
  • 猫头虎分享已解决Bug || 分布式文件系统问题(Distributed File System Issue):DFSUnavail
    博主猫头虎的技术世界......
  • Hadoop大数据应用:Linux 部署 HDFS 分布式集群
    目录  一、实验1.环境2.Linux部署HDFS分布式集群3.Linux使用 HDFS文件系统二、问题1.ssh-copy-id报错2.如何禁用sshkey检测3.HDFS有哪些配置文件4.hadoop查看版本报错5.启动集群报错6.hadoop的启动和停止命令7.上传文件报错8.HDFS使用命令  ......
  • HDFSRPC协议详解
    本文主要阐述HDFSRPCserver端一个socket连接接收字节流的构成,帮助读者理解HDFSRPC协议。注意hadoop版本为3.1.1。写在前面关于proto写入和读取,使用writeDelimitedTo和read,应该是通用的方式,不作过多的介绍。处理rpc各种情况以后server都会使用统一的应答格式(包含错误与正确),......
  • 七、hive、hdfs、hbase查询总结
    【hive】1.连接hive:hive2.hive中查询:同mysql,如select* fromtablename;  注意:hive中的操作一定要加分号;否则语句一直不结束 【hdfs】1.查询文件或目录hdfsdfs-ls目录名  如:hdfsdfs-ls/winhadoop/org/ipva_third_data/2024/03/07查看根目录hdfsdfs......
  • HDFS读数据流程、NN和2NN工作机制、DataNode工作机制、数据完整性
    HDFS读数据流程    事件描述:客户端要下载一个200m的数据文件,hdfs是如何读取的。   两个对象:一个客户端、一个集群   流程:       1.客户端创建一个分布式文件系统(DistributedFileSystem),向集群NameNode请求下载文件。       ......
  • hdfs文件传输到ods层的脚本
     #!/usr/bin/python3#coding=utf-8importsysfrombaseimportget_yesterday,APPimportsubprocessdate=get_yesterday()tables=['ods_log_inc','ods_activity_info_full','ods_activity_rule_full','ods_base_categ......
  • hdfs基本命令
    创建目录hadoopfs–mkdir[-p]<path>查看目录下的内容hadoopfs–ls[-h][-R][<path>]-h人性化显示文件大小-R递归查看指定目录及子目录上传文件hadoopfs–put[-f][-p]<localsrc><dst>-f覆盖目标文件(若文件已存在)-p保留访问和修改时间、......