分布式存储系统HDFS

article/2025/10/5 13:16:57

3.1 HDFS简介

Hadoop平台解决两大核心问题:

  • 分布式存储
  • 分布式处理
    HDFS就是解决海量数据分布式存储

背景:大数据时代,对于海量的数据,单个计算机无法处理,只能借助整个集群来处理海量数据。


文件系统结构(主从结构):
在这里插入图片描述
主节点:承担起目录作用,比如元数据服务。
从节点:实现数据存取的任务。
在这里插入图片描述
概念:HDFS是分布式文件系统,即文件通过网络在多个主机共享的文件系统,让多个机器的多个用户分享文件和存储空间。
特点:通透性:DFS是通过网络完成访问文件的动作,由用户和程序来看就像访问本地磁盘一样。
HDFS架构:采用master/salve结构,是管理者-工作者模式。
实现目标:

  • 兼容廉价的硬件设备
  • 实现流数据读写(对于数据整个读写或者大部分读写,不会访问某一个子集,或一个块),满足海量数据批处理需求
  • 支持大数据集
  • 支持简单的文件模型,牺牲一些相关的性能,但是获取批量数据的特性,只允许追加不允许修改
  • 强大的跨平台兼容性,基于java语言开发的,java具有良好的跨平台特性

自身局限性:

  • 不适合低延迟数据访问,只能批量的读取数据,不能精确的定位到某一条数据,不能满足实时的处理需求(HBS可以)
  • 无法高效存储大量小文件,如果小文件太多,索引节点太多,索引效率过低
  • 不支持多用户写入和任意修改文件(设计的时候就是只允许追加不允许修改)

3.2 HDFS相关概念


(1)联系:为了分摊磁盘的读写开销
(2)区别:比普通的文件(64M)系统块大很多
(3)设计目的:

  • 支持面向大规模数据存储
  • 降低分布式节点的寻址开销:三级寻址(元数据目录,数据节点,块)

(4)缺点:如果块太大会导致Mapredecu就一两个任务在执行,完全牺牲了Mapreduce的并行度,发挥不了分布式并行处理的效果

使用块的好处:
(1)支持大规模文件存储:把大文件进行切割,分布式的存储到不同机器上
(2)简化系统设计:块大小是固定的,文件除以块的大小,可以算出块需要多少,元数据设计简单
(3)适合数据备份:一个块存储到多个荣誉的节点上


HDFS组件:

  • 名称节点:
    (1)名称节点是一个中心服务器,负责管理文件系统的命名空间
    (2)协调客户端对文件的访问
    (3)执行对命名空间的操作
    (4)记录每个文件数据块在数据节点的位置和副本信息
  • 数据节点:
    (1)负责所在物理节点的管理,是真正数据存储的地方
    (2)负责处理客户端的文件读写请求
    (3)在名称节点的指挥下负责数据块的创建、删除、复制
    (4)周期性的向名称节点汇报数据块信息
  • 客户端节点:
    (1)把文件切分成一个个数据包
    (2)访问或命令行管理HDFS
    (3)与名称节点交互,获取文件位置信息
    (4)与数据节点交互,读取和写入数据

元数据信息:

  • 文件是什么
  • 文件被分成多少块
  • 每个块和文件是怎么映射的
  • 每个块 被存储在哪个服务器上

名称节点的数据结构:

  • FsImage:保存系统文件树
  • EditLog:记录对数据进行的诸如创建、删除、重命名等操作

FsImage负责:

  • 块大小以及组成文件的块
  • 文件的复制等级
  • 修改和访问时间
  • 访问权限

其中数据块存放在哪些节点不是通过FsImage,而是以下过程
过程:
当数据节点加入到一个集群中去,数据节点像名称节点汇报自己节点上保存了哪些数据块,名称节点就可以自己构建一个清单,这些信息保存在内存中。


名称节点运行机制
首先将FsImage从磁盘读入到内存,和EditLog各项操作进行合并,FsImage存储是历史数据,通过EditLog记录的操作得到最新的元数据,把新版的FsImage保留下来,把旧版的删除,同时创建一个空的EditLog文件。
优点:FsImage对于大数据来讲规模非常大,每次不断改FsImage,会导致系统运行很慢。把更新的部分单独存储起来,EditLog规模很小,操作效率很高。
存在的问题:EditLog会不断增大,大到一定程度又会影响系统性能

第二名称节点
任务:
(1)名称节点的冷备份
(2)对EditLog不断增大的处理

第二名称节点运行机制
定期地与名称节点通信,在阶段会请求名称节点停止使用EditLog文件,此时名称节点生成一个edit.new文件,把新到达地更新全部写到edit.new文件中,第二名称节点通过HTTPget方式把原来旧的FsImage和EditLog下载到本地,在第二名称对FsImage更新(FsImage和EditLog合并操作)得到一个新的FsImage,再发送个名称节点,edit.new更改为edit
在这里插入图片描述

数据节点
运行机制
Blockreport:当数据节点启动后,扫描本地文件系统,生成HDFS数据块系统列表,像名称节点发送一个报告
过程:
Datanode启动后向名称节点注册,注册成功后,以后每一个周期上报自己所有数据块信息,然后每4秒给名称节点发送心跳,心跳返回名称节点给数据节点的命令,如果一段时间没有心跳认为该数据节点不可用。
在这里插入图片描述


3.3 HDFS体系结构(主从架构)

客户端读数据:先访问名称节点,知道文件存储在哪些数据节点,从而客户端去各个数据节点的位置获取数据

客户端写数据:先访问名称节点,知道文件存储到哪些数据节点,从而客户端去各个数据节点的位置存储数据

HDFS命名空间:
包括目录文件块
/+目录名称

通信协议:
HDFS的通信协议都是构建在TCP/IP上,客户端到名称节点使用TCP客户端协议,名称节点到数据节点使用专门数据协议
客户端取数据使用远程的RPC协议

局限性:

  • 命名空间限制:名称节点是保存在内存中的,因此名称节点能容纳的对象(文件、块)的个数会受到空间大小限制
  • 性能的瓶颈:整个分布式文件的吞吐量,受限于单个节点的吞吐量
  • 隔离问题:由于集群中只有一个名称节点,只有一个命名空间,因此无法对不同的应用程序进行隔离
  • 集群的可用性:一旦这个唯一的名称节点发生故障,会导致整个集群变得不可用。

关于第二名称节点:由于他是冷备份所以不能解决集群单点故障问题
冷备份:不能保证发生故障就可以立马代替故障节点,必须停止一段时间,慢慢恢复,再提供对外恢复。


3.4 HDFS存储原理

数据冗余保存(默认是3)
好处:

  • 加快数据传输速度:同样的任务可以并行访问冗余的节点
  • 容易检查错误数据:通过和备份的数据对比
  • 保证数据可靠性:一但系统探测到副本发生故障,会自动复制,把整个副本数恢复到原来数目。

数据块存放:
首先对块复制三份,第一份放在上传文件的数据节点,如果提交数据的请求不是来自集群内布,HDFS随机挑选一个磁盘不太满,CPU不太忙的数据节点放置,第二节点放在与第一节点不同的机架上。第三个副本放在第一个副本相同机架的其他节点上

数据读取
就近读取:HDFS提供一个API可以确定一个数据节点所属的机架ID,客户端也可以调用自己API获取自己所属的机架ID。
过程:客户端从名称节点获得数据块不同副本的存放位置列表,列表中包含了副本所在的数据节点,调用API确定客户端和数据节点的机架ID,优先从ID相同的机架读取,如果没有就随机读取。

数据的错误和恢复
名称节点出错:
通过第二名称节点备份恢复(1.0)
数据节点:
定期向名称节点发送心跳信息,告诉自己活着,一旦一段时间名称节点收不到信息,知道它发送故障,将其标记为宕机,把凡是存储在故障机上的数据重新分发到其他可以的机器上。
数据出现错误:
磁盘损坏等。
客户端读取数据使用校验码校验,如果出现错误,就会发现不对。对冗余数据进行复制。


3.5 HDFS读写过程

读过程:
(1)打开文件:
HDFS客户端发起,生成DistributedFileSystem类对象,创建一个FSDataInputStream
(2)获取数据块信息:
通过远程调用从名称节点获取数据块信息,名称节点会把文件开始的一部分文件信息返回
(3)读取请求:
客户端收到文件信息列表,执行read函数,从距离客户端最近的数据节点建立连接。读完以后关闭输入流和数据节点连接
(4)获取数据块信息:
再去输入流去获取文件的下一个数据块信息
(5)读取数据

(6)关闭文件
在这里插入图片描述
写过程:
(1)创建文件请求:
客户端节点创建文件请求,创建分布式文件系统和一个输出流
(2)创建文件元数据:
输出流调用名称节点,让名称节点在命名空间中新建一个文件,名称节点会检查文件是否存在,客户端是否有权限创建。如果都通过就会创建
(3)写数据:
把数据分成一个个分包,分别放入输出流的内部队列,输出流向名称节点申请保存这些数据块的数据节点,把分包发到第一个数据节点,第一个数据节点再发到第二个数据节点,第二个数据节点再发到第三个数据节点
(4)返回确认包:
由最后一个节点传给前一个节点,依次往前。
(5)关闭文件

在这里插入图片描述


3.6 HDFS的稳健性

1、故障类型

  • 节点故障
  • 通讯故障
  • 数据损坏
    (1)数据在网络中损坏
    (2)数据存储在硬盘中损坏

2、故障检测

  • 节点故障检测:
    数据节点每三秒发送一个心跳信号,如果名称节点10分钟没有接受到,就认为数据节点挂掉了。
  • 网络故障检测:
    没测发送数据时,接收者会回复一个应答信号,如果没有收到应答信号(多次尝试),发送者就会认为主机已经挂掉,或者发送网络错误。
  • 数据损坏故障检测:
    HDFS客户端实现对文件内容的校验和,HDFS写入的时候计算校验和,然后每次读的时候再计算校验和,硬盘存储数据的同时也会存储校验和
    在这里插入图片描述
    在这里插入图片描述

3.7 HDFS的可访问性

(1)提供一个命令行接口让用户和HDFS数据交互
(2)通过原生的FileSystem Java API接口访问
(3)通过浏览器的方式访问HDFS中的实例文件


3.8 HA架构

1、解决的问题:
为了解决名称节点单点故障的问题,为名称节点保存一个热备,两个独立的机器作为名称节点:Active Namenode,Standby Namenode。任何时候只有一个节点处于Active状态,另一个处于Standby状态。前者用于接受客户端请求,后者作为salve保持群的状态数据以备快速failover。

2、HA结构
在这里插入图片描述

3、快速failover
数据节点需要同时配置两个名称节点地址,同时建立心跳链接,并把块位置发给他们。当Active失效后,Standby切换成Active
在这里插入图片描述

4、两种常见方案

(1)NFS

  • 实现机制:
    active和standby需要共享一个存储目录,active把数据变更日志保存在该目录,同时standby监视更新,保持数据同步,为了保证active挂了以后不再有新数据写入,Fencing逻辑切断所有与active连接。
  • 局限性:
    1)只支持一个数据变更共享目录,导致HA能力受限于该目录。
    2)为防止共享目录的单点失效,对共享目录有额外的要求。
    3)NFS方式部署更复杂。

(2)QJM

  • 实现机制:
    两个节点都与一组称为JNS的互相独立的进程保持通信,当active更新命名空间,把修改日志发送给JNS的多数派,standby从JNS读取edit,持续关注日志变更,把变更应用到自己的命名空间中。
    在这里插入图片描述

5、两者比较
(1)共同点:

  • 都是热备方案
  • 都是一个active和一个standby
  • 都使用ZK quorum和ZKFC实现自动恢复
  • 在失效恢复时都需要配置fencing方法来断开active

(5)不同点

  • 分享的数据方式不同
  • 参与HA的不同角色

3.9 HDFS优缺点

(1)优点:
在这里插入图片描述
(2)缺点:
在这里插入图片描述
(3)主要问题:
在这里插入图片描述


http://chatgpt.dhexx.cn/article/CU5PEdcm.shtml

相关文章

分布式MySQL架构

分布式数据库一般是以下的这种结构,计算层获取元数据层信息进行路由。下面说下各个层级的目的: (1)计算层就是单机时的SQL层,用来对数据访问进行权限检查、路由访问,以及对计算结果等操作。 (2…

搭建分布式存储服务minio详细过程

最近项目的存储量比较大,考虑项目后期存储需要拓展,决定使用分布式存储,综合考察后,最终选定使用minio作为存储服务。以下是使用步骤,MARK一下! 1、服务器 192.168.40.124 192.168.40.1282、创建目录 本集…

分布式存储概述

一、数据分类及存储分类 数据分为元数据和数据 分布式数据存储的实现: 元数据即是文件的属性信息(文件名、权限(属主、属组)、大小、更新时间等),元数据就是有一种路由机制,即当客户端或者应用程序产生的客户端数据被写入到分布式存储系统的…

分布式存储 HDFS原理

思维导图: 分布式存储 一、NameNode 1接收客户端的请求 管理元数据(文件上传时间、文件权限、文件属主、大文件的block数及blockId号) 管理集群 二、SecondaryNameNode 持久化内存中的元数据。 因为内存不稳定,可以将数据持…

分布式存储系统Minio简介

Minio 是一个基于Go语言的对象存储服务。它实现了大部分亚马逊S3云存储服务接口,可以看做是是S3的开源版本,非常适合于存储大容量非结构化的数据,例如图片、视频、日志文件、备份数据和容器/虚拟机镜像等,而一个对象文件可以是任意…

分布式存储技术的对比分析与应用

主流分布式存储技术的对比分析与应用 随着数字化转型的深入,海量数据对存储提出了新的要求。传统存储虽然有技术成熟、性能良好、可用性高等优点,但面对海量数据,其缺点也越来越明显:如扩展性差、成本高等。为了克服上述缺点&…

分布式存储架构一-分布式存储概念

分布式存储系统是由大量廉价普通PC服务器通过Internet互联,对外作为一个整体提供服务的系统。它的规模大且成本低。 分布式存储系统的特性: 可扩展:分布式存储系统能扩展几百到几千台的规模,随着集群数量的提升,它的…

分布式系列之开源分布式存储技术分析

分布式存储在云计算及容器技术中将广泛使用,本文仅简单介绍了下几个主流的开源分布式技术,整个分布式存储系列相当复杂,文中介绍略微粗浅且当引子。 1、集中式存储和分布式存储 1.1 存储类型 常见的存储类型有三种:块存储、文件…

浅谈分布式存储架构: IPFS和HDFS

分布式存储架构是一个复杂的系统工程,针对特定应用的数据存储有不同的系统架构解决方案。不同的存储方法会影响存储性能、存储成本、冗余度、工程复杂性等。 分布式存储的历史 分布式存储最早是由谷歌提出的,其目的是通过廉价的服务器来解决大规模&…

开源分布式存储架构概览

关注「开源Linux」,选择“设为星标” 回复「学习」,有我为您特别筛选的学习资料~ 材料提纲包括三部分内容: 1、基本思想和关注的问题 2、四种开源分布式存储系统概览(HDFS 、GlusterFS 、OpenStack Swift、Ceph) 3、以…

FISCO BCOS 2.0原理解析: 分布式存储架构设计

FISCO BCOS 2.0新增对分布式数据存储的支持,克服了本地化数据存储的诸多限制。 在FISCO BCOS 1.0中,节点采用MPT数据结构,通过LevelDB将数据存储于本地,这种模式受限于本地磁盘大小,当业务量增大时数据会急剧膨胀&…

杉岩PACS影像系统分布式存储架构

该医院创建于1999年,是深圳市政府投资建成的集医疗、教学、科研和预防为一体的现代化三级综合性医院。2017年通过三级甲等医院复审。2018年,医院年门急诊总量约292万人次,年出院病人近7.4万人次,年手术量4.9万台次。 该院在深圳有…

Ceph分布式存储 原理+架构图详解

分布式存储Ceph ceph介绍 ceph是一个统一的、分布式的存储系统,设计初衷式提供较好的性能(io)、可靠性(没有单点故障)和可扩展性(未来可以理论上无限扩展集群规模),这三点也是集群架构所追求的。 统一性 : 意味着我们可以仅凭ceph这一套存储系统&…

几种分布式存储组网架构参考

作 者: NGDCN 原文链接:几种分布式存储组网架构参考 - NGDCN 版 权: 本文由 NGDCN 于2022-11-12原创发布在 NGDCN,未经许可,禁止转载。 1、名词解释 ◼ VBS:云硬盘备份(Volume …

谈谈Java内存模型

谈谈Java内存模型 什么是JMM为什么需要这种规范呢?三大特性在Java中是怎么满足的呢? 什么是JMM Java Memory Model ,Java内存模型,是一种共享内存系统中多线程程序读写操作行为的规范,它是一种屏蔽了各种硬件和操作系…

Java内存模型及管理

1. 概述 多任务和高并发是衡量一台计算机处理器的能力重要指标之一。一般衡量一个服务器性能的高低好坏,使用每秒事务处理数(Transactions Per Second,TPS)这个指标比较能说明问题,它代表着一秒内服务器平均能响应的请…

什么是Java内存模型

概述:本文向您介绍Java内存模型的概念,在C或C中, 利用不同操作平台下的内存模型来编写并发程序;Java利用了自身虚拟机的优势, 使内存模型不束缚于具体的处理器架构,真正实现了跨平台。 内存模型 (memory model) 内存模型描述的是程…

详说Java内存模型(JMM)

文章目录 什么是Java内存模型为什么提出内存模型Java主内存与工作内存JMM三大特性可见性有序性原子性 并发总结 什么是Java内存模型 Java内存模型就是(Java Memory Model),它规范了Java虚拟机与计算机内存是如何协同工作的。Java虚拟机就是一…

详解Java内存模型

文章目录 一、简介二、处理器、高速缓冲、主内存间的交互关系三、Java线程、工作内存和主内存的交互关系四、8大原子操作五、8大Happens-Before原则 一、简介 Java内存模型(JMM)是线程间通信的控制机制,JMM定义了主内存和线程工作内存之间的抽…

Java内存模型的一点理解

关于Java内存模型的问题 文章目录 前言一、Java内存模型二、其中一些指向问题1.内存指向问题为什么? 总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要…