分布式存储 HDFS原理

article/2025/10/5 14:16:36

思维导图:

分布式存储

一、NameNode

1接收客户端的请求

  1. 管理元数据(文件上传时间、文件权限、文件属主、大文件的block数及blockId号)

  2. 管理集群

二、SecondaryNameNode

持久化内存中的元数据。

因为内存不稳定,可以将数据持久化到磁盘上。

持久化的详细过程:

NameNode启动的时候会创建两个文件:edit(日志文件)和fsimage

触发合并条件后,将edit和fsimage拉到secondNameNode中,之后会根据edit里面的操作进行重演(产生相同的元数据),重演之后将元数据写在fsimage中,产生的fsimageckpt推给namenode。

为了防止持久化的数据丢失,在重演过程中对edit文件的改变写到edit.new中。重演结束后,edit.new改名为edit

合并触发机制:1、超过3600毫秒

                         2、edit文件超过64m

并不是所有的元数据都会持久化:

除了block的位置信息,其他的元数据都会持久化(block的位置变动频率高、变动大)

这样的话,当HDFS集群重启,namenode中的元数据就会有所缺失无法对外提供服务

解决方案:HDFS启动的时候,所有的DN都会向NN汇报当前节点的block信息

使用SecondaryNameNode的原因:

一旦namenode宕机,用于恢复的fsiamge数据很旧,会造成大量数据的丢失。

因为需要合并大量的edits文件生成fsimage,导致namenode重启时间过长。 

若nameNode进行持久化,会造成nameNode负载太高,集群不可用。所以将持久化的工作交给SecondaryNameNode(NameNode的助理)去做。

三、DataNode

  1. 存储源数据,以block块的形式存储
  2. 接收客户端的读请求

四、写的流程

      1、如果要上传一个大文件,client进行切割、计算大文件的block数

      2、Client对nameNode进行汇报:

            1)、当前大数据文件的block数

           2)、权限

           3)、上传时间

for(Block block:blocks){

      3、client切割出来一个block

      4、Client请求block块的id号及地址

      5、因为nameNode能够掌控全局、那么他将负载不高的DataNode地址返回给client

      6、Client拿到地址后去找到该DataNode,上传该block的数据(下面有client向dataNode传数据的详细流程)

      7、DataNode将block存储完成后会想nameNode汇报存储情况

}

 

        Client向DataNode写数据的详细流程

      1、客户端发送请求到namenode,告诉namenode上传文件的文件名、文件大小、文件拥有者。

      2、namenode根据以上信息算出文件需要切成多少块block,以及block要存放在哪个datanode上,并将这些信息返回给客户端。

      3、客户端首先将其中一个block写在datanode上,每一个block默认都有3个副本,并不是由客户端分别往3个datanode上写3份,而是由已经上传了block的datanode产生新的线程,由这个namenode按照放置副本规则往其它datanode写副本,这样的优势就是快。

      4、写完后返回给客户端一个信息,然后客户端在将信息反馈给namenode。

      5、需要注意的是上传文件的拥有者就是客户端上传文件的用户名,举个例子用windows客户端上传文件,那么这个文件的拥有者就是administrator,和linux上的系统用户名不是一样的。

 

五、读的流程

      1、客户端发送请求到Namenode,获得block的位置信息,因为真正的block是存在Datanode节点上的,而namenode里存放了block位置信息的元数据。

      2、Namenode返回所有block的位置信息,并将这些信息返回给客户端。

      3、客户端拿到block的位置信息后通过管道并行的读取block信息,block默认有3个副本,每一个block只需要从一个副本读取就可以。

      4、datanode返回给客户端。

 

六、备份机制

       集群的dataNode节点数要大于等于副本数+1。

       集群外提交:客户端,是外人。集群内提交:dataNode节点作为客户端进行提交(不提倡,有网络io问题)

             1、第一个block存储在一个负载不是很高的服务器上。

             2、第一个备份存储在与第一个block不同机架的随机的一个服务器上

             3、第二个备份存储在与第一个备份相同的机架的随机服务器上。

             4、  其他备份可以随机

七、权限

       依据系统的用户系统,防君子

八、安全模式

     1、加载fsimage,加载到内存中

     2、如果edits文件不为空,那么nameNode自己来合并

     3、检查DataNode的健康状况

     4、如果有DataNode挂掉了,指挥做备份

九、大数据概述

     大数据简介:短时间内快速的产生海量各种各样有价值的数据。

     大数据技术:

              1、分布式存储

              2、分布式计算

                     分布式批处理(攒一段时间的数据,在某个时间统一处理)

                     分布式流处理(每产生一条数据,立即处理)

             3、机器学习(预测类的需求需要用到机器学习)

十、知识点集锦

       nameNode元数据:

            角色在集群中都是由进程来表现的(一个节点由多个进程)。因为在node01节点上启动了nameNode进程,所以称node01为nameNode。

       Client:

             将数据切割成n个block块(默认block块大小:128M)。

             以读取字节的方式在客户端读取该大文件。读到128M时,形成一个Block块,向nameNode进行汇报。(block的数量=大文件的大小/128M)

       为什么要使用管道传输?为什么要将block切割成一个个的packet?

               并行存储

      处于安全fsimage已经加载到内存中,可以查看到文件目录,但是无法读取。

      HDFS集群不允许修改,文件一旦上传成功就不能修改block块大小。禁掉是为了防止集群泛滥。

十一、搭建集群

     角色=进程

     模式:

          1、伪分布式

                 在一台服务器上,启动多个进程,分别表示各个角色

         2、完全分布式

                在多台服务器上,每台服务器启动不同角色的进程,使用多台服务器组成HDFS集群

               Node01:namenode

               Node02:secondarynamenode   datanode

               Node03:datanode

               Node04:datanode

        3、高可用的安全分布式

              Node01:namenode

              Node02:secondarynamenode   datanode

              Node03:datanode  namenode

              Node04:datanode

 


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

相关文章

分布式存储系统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.内存指向问题为什么? 总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断发展,机器学习这门技术也越来越重要…

【Java】Java内存模型

1.什么是Java内存模型 Java内存模型(Java Memory Model,JMM)是一种抽象的,不存在的概念。是一种屏蔽了各种硬件和操作系统的访问差异的,保证了Java程序在各种平台下对内存的访问都能保证效果一致的机制及规范。 Java内…

2.什么是JAVA内存模型?

为什么要设计JAVA内存模型? 小陈:老王,看了上一篇的《CPU多级缓存模型》,有个疑问为什么还要有JAVA内存模型啊? 老王:这么来说吧,CPU多级缓存模型,只是一个规范,但是底层…

Java内存模型是什么

网上有很多关于Java内存模型的文章,在《深入理解Java虚拟机》和《Java并发编程的艺术》等书中也都有关于这个知识点的介绍。但是,很多人读完之后还是搞不清楚,甚至有的人说自己更懵了。本文,就来整体的介绍一下Java内存模型&#…

Java内存模型是什么,为什么要有Java内存模型,Java内存模型解决了什么问题等。。。

本文中,有很多定义和说法,都是笔者自己理解后定义出来的。希望能够让读者可以对Java内存模型有更加清晰的认识。当然,如有偏颇,欢迎指正。 为什么要有内存模型 在介绍Java内存模型之前,先来看一下到底什么是计算机内存…