首页 > 其他分享 >HDFS概述

HDFS概述

时间:2024-07-20 18:51:28浏览次数:5  
标签:HDFS 存储 文件 DataNode 概述 NameNode block 客户端

Hadoop的分布式文件系统

hadoop的三大核心子项目(HDFS,YARN,MapReduce)之一,用来解决海量数据存储问题

优点:

  • 海量数据存储,典型文件大小GB~TB,百万以上文件数量,PB以上数据规模(文件切分分散存储,128M)
  • 高容错(多副本策略),高可用(HA,安全模式),高可扩展(10K节点规模)
  • 构建成本低(构建在廉价商用机器上),安全可靠(提供容错机制)
  • 适合大规模离线批处理(流式数据访问,数据位置暴露给计算框架,如MR,Spark)

缺点:(不适合的场景)

  • 不适合低延迟的数据访问(文件拆分,存储,副本,位置记录等等,写延迟高,读取时需要寻址,获取数据后合并)
  • 不适合大量小文件存储(元数据占用NameNode大量空间,移动计算时任务数量增加)
  • 不支持并发写入(写入失败的话维护成本高)
  • 不支持文件随机修改,仅支持追加写入(多个节点的副本修改压力大)

系统架构

  •  典型的主从架构,主节点NameNode,从节点DataNode,NameNode存储元数据信息,触发容灾备份,DataNode存储Block
  • DataNode每隔3s需要向NameNode发送心跳,报告节点状态和数据块的信息

  •  文件切分在客户端完成
  • NameNode存储文件切分后的block信息,这部分信息会存储在内存中,且持久化到文件;block的位置信息只在内存中存储,因为DataNode会定时发送心跳汇报

 数据存储Block

  • Block是HDFS的最小存储单元
  • Block和元数据分开存储,Block存储在DataNode中,元数据存储在NameNode中

如何设置Block的大小?

  •     目标:最小化寻址开销,当前多数磁盘的读写速度是130-190MB/s,默认大小是128M
  •     两面性:块太大,增加了寻址开销,作业执行时间长,块太小,任务数太多,作业调度时间长

多副本

  •    默认副本数是3,可更改,但不建议
  •    自动机架感知,将副本存储到不同的DataNode上,实现数据的高容错
  •    副本均匀分布,提高访问带宽和读取性能,实现负载均衡

Block文件

  •    Block文件是DataNode本地磁盘中命名为blk_blockId的linux文件
  •    DataNode在启动时自动创建存储目录,无需格式化
  •    DataNode的current目录下的文件名都以blk_为前缀
  •    Block元数据文件(*.meta)由一个包含版本,类型信息的头文件和一系列的校验值组成

 Block副本放置策略(3.x开始)

  节点选择:同等条件下,优先选择空闲节点

  • 副本1:优先找离client网络位置最近的,空闲的DataNode节点,如果client在DataNode节点,则直接放在当前节点
  • 副本2:放在不同的机架节点上(2.x的副本2是选择当前机架上的不同节点,3.x是优先选择跨机架的节点)
  • 副本3:放在与第二个副本同一个机架的不同的节点上
  • 副本N:随机选择

metaData的存储与合并

元数据

  • 存放在NameNode内存中
  • 包含HDFS中文件及目录的基本属性信息(如文件的owner,权限信息,创建时间等),文件由哪些block构成,block的位置存放信息

元数据信息的持久化

  • fsimage文件,是文件系统的元数据的持久性检查点文件(类似于flink的checkpoint吧),文件名上会记录对应的transactionId,不包含block的位置信息
  • edits(编辑日志文件)---磁盘文件形式,后续对元数据的修改,以日志的形式追加到edits文件中,因为直接频繁修改fsimage,压力大
  • 文件系统客户端执行写操作的时候,首先会被记录在edit log中,通过前后缀记录当前的transactionId,记录后则认为是一次成功的操作
  • edits文件不能过大,需要定期合并到fsimage中
  • 通过fsimage+edits可以恢复某个时间点的元数据

 edits与fsimage的合并机制

 读写操作

写操作:

1、客户端请求上传文件,NameNode检查目录和权限,返回能否上传

2、客户端接收到允许上传,将文件切分为块

3、客户端上传block文件,NameNode检查DataNode信息池,返回要写入的DataNode列表

4、客户端请求建立block传输通道,传输管道依次建立

5、客户端以packet为单位发送数据,DataNode接收到数据后写入磁盘并分发给下一个DataNode

6、按照建立的管道顺序,依次返回写入成功直到第一个DataNode汇总,返回给客户端写入成功

7、重复3-6,直到所有的block传输完成,客户端向NameNode报告文件写入成功,NameNode记录元数据信息

注意:NameNode是在文件全部上传成功之后才会记录元数据信息,假设在block只有一部分写入成功,那么这部分block在发送心跳时,NameNode检查发现这部分是没有元数据信息记录的,视为脏数据,这部分数据就会被删掉

读操作:

1、客户端请求读取文件,NameNode检查目录树和权限

2、NameNode查询文件对应的block块信息,以及block块与DataNode的映射关系,按照DataNode与客户端的距离由近到远返回给客户端

3、客户端与最近的DataNode建立连接,读取block数据;每个block块重复同样的操作

4、客户端将组成文件的block的文件拼装成一个文件

 

标签:HDFS,存储,文件,DataNode,概述,NameNode,block,客户端
From: https://www.cnblogs.com/yb38156/p/18312958

相关文章

  • Golang的KisFlow流式计算框架概述
    1.1为什么需要KisFlow一些大型toB企业级的项目,需要大量的业务数据,多数的数据需要流式实时计算的能力,但是很多公司还不足以承担一个数仓类似,Flink+Hadoop/HBase等等。但是业务数据的实时计算需求依然存在,所以大多数的企业依然会让业务工程师来消化这些业务数据计算的工作......
  • SQL概述及其规则与规范
    SQL概述及其规则与规范1.SQL概述1.1SQL背景知识1946年,世界第一台电脑诞生,如今,互联网已经非常壮大,在这几十年间互联网得到了飞速的发展,无数的技术在其中起起伏伏,但是有一门技术从未消失,甚至愈发充满活力,那就是SQL1974年,IBM研究院发布了一片解开数据库技术的论文《SE......
  • Java JVM——12. 垃圾回收理论概述
    1.前言1.1 什么是垃圾?在提到什么是垃圾之前,我们先看下面一张图:从上图我们可以很明确的知道,Java和C++语言的区别,就在于垃圾收集技术和内存动态分配上,C++语言没有垃圾收集技术,需要我们手动的收集。垃圾收集,不是Java语言的伴生产物,早在1960年,第一门开始使用......
  • 第一章 操作系统的概述
    操作系统的概论操作系统的概念操作系统是计算机系统中的一个系统软件,有效的组织和管理计算机系统当中的硬件和软件资源,合理组织计算机的工作流程,控制程序的执行,并给用户提供各种服务,是计算机系统可以高效的运行(资源管理和控制程序的执行)有效:考虑用户的需求,提高系统的资源利用率......
  • S50IC卡防碰撞机制概述
    一、防碰撞机制概述非接触式IC卡(如Mifare卡)的防碰撞机制是一种允许多张卡片在读写器的操作范围内同时被识别和处理的技术。当多张卡片进入读写器的操作范围时,防碰撞机制会确保每张卡片都能被单独识别和处理,而不会出现数据冲突或丢失的情况。二、具体实现方式频率匹配与谐振:......
  • Oracle数据库概述
    1oracle的数据模式是:用户建在数据库实例上,表建在用户上   不同数据库实例可以建相同的用户;  同一个数据库实例,用户名不能相同;  一个用户可以使用多个表空间;  一个表空间可以被多个用户所使用;  表的权限是和用户绑定的;  表空间不涉及任何权限控制问题; ......
  • Gmsh概述
    1、概述        Gmsh是一个内置CAD引擎和后处理器的三维有限元网格生成器。其设计目标是提供一个快速、轻量级且用户友好的网格划分工具,具有参数化输入和灵活的可视化功能。        Gmsh围绕四个模块构建(几何、网格、求解器和后处理),这些模块可以通过图形用户......
  • 领域驱动设计(DDD)的概述与应用
    个人名片......
  • 【人工智能】人工智能在医疗健康中的应用以及实际案例和进展概述
    人工智能(ArtificialIntelligence,AI)在医疗健康领域的应用日益广泛,为医疗服务的提升和健康管理带来了革命性的变化。以下是人工智能在医疗健康中的主要应用:人工智能在医疗健康中的主要应用1.医学影像诊断技术基础:深度学习和计算机视觉技术。应用实例:AI能够自动化、高效化......
  • 1. CMake 概述
    1.CMake概述CMake可以用来构建C/C++工程,可以跨平台。允许开发者指定整个工程的编译流程在CMake没有出来之前,开发者需要手写makefile,但是不同平台下的makefile写法不同,所以移植软件的难度就很大。而CMake可以自动生成本地化的工程文件和makefile,其编译流程如下:蓝色......