Hadoop三大框架之HDFS

news2025/8/7 16:58:18

一、概述

  1. HDFS产生的背景及定义

  1. HDFS产生背景

随着数据量越来越大,在一个操作系统存不下所有的数据,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,需要一种系统来管理多台机器上的文件,这就是分布式文件管理系统。HDFS是分布式文件管理系统中的一种

  1. HDFS定义

HDFS(Hadoop Distributed File System)是一个文件系统,用于存储文件,通过目录树来定位为文件。它是分布式的,由很多服务器联合起来实现其功能,集群中的服务器有各自的角色。

使用场景:适合一次写入、多次读出的场景。一个文件经过创建、写入和关闭之后就不需要改变。

  1. HDFS优缺点

  • 优点

  1. 高容错性

  • 数据自动保存多个副本。通过增加副本的形式,提高容错性。

  • 某一个副本丢失以后,可以自动恢复。

  1. 适合处理大数据

  • 数据规模:能够处理数据规模达到GB、TB、甚至PB级别的数据

  • 文件规模:能够处理百万规模以上的文件数量,数量相当之大。

  1. 构建在廉价机器上,通过多副本机制,提高可靠性

  • 缺点

  1. 不适合低延时数据访问,比如无法处理毫秒级的存储数据。

  1. 无法高效的对大量小文件进行存储

  • 存储大量小文件会占用NameNode大量的内存来存储文件目录和块信息,而NameNode的内存是有限的。

  • 小文件存储的寻址时间会超过读取时间,违反HDFS的设计目标

  1. 不支持并发写入、文件随即修改

  • 一个文件只能有一个写,不允许多个线程同时写

  • 仅支持数据追加(append),不支持文件的随即修改

  1. HDFS组成架构

Namenode(nn)

就是master,是一个主管者、管理者

  • 管理HDFS的名称空间

  • 配置副本策略

  • 管理数据块(block)映射信息

Datanode

就是slave。namenode下达命令,datanode执行实际的操作

  • 存储实际的数据块

  • 执行数据块的读/写操作

Client

就是客户端。客户端是一个抽象的概念,无论是命令行还是通过API还是web界面来操作都是客户端

  • 文件切分。文件上传HDFS的时候,client将文件切分成一个个Block,然后进行上传

  • 与NameNode交互,获取文件的位置信息

  • 与DataNode交互,读取或写入数据

  • Client提供一些命令来管理HDFS,比如NameNode格式化

  • Client可以通过一些命令来访问HDFS,比如对HDFS增删改查操作

Secondary NameNode

并非NameNode的热备。当NameNode挂掉的时候,并不能马上替换NameNode并提供服务

  • 辅助NameNode,分担其工作量,比如定期合并Fsimage和Edits,并推送给NameNode

  • 在紧急情况下,可辅助回复NameNode

  1. HDFS文件块大小

HDFS中的文件在物理上是分块存储 (Block)块的大小可以通过配置参数( dfs.blocksize)来规定,默认大小在Hadoop2.x/3.x版本中是128M。

寻址时间为传输时间的1%时,则为最佳状态。因此,传输时间=10ms/0.01=1000ms=1s。而目前磁盘的传输速率普遍为100MB/s。

思考:为什么块的大小不能设置太小,也不能设置太大?
(1) HDFS的块设置太小,会增加寻址时间,程序一直在找块的开始位置
(2) 如果块设置的太大,从磁盘传输数据的时间会明显大于定位这个块开始位置所需的时间。导致程序在处理这块数据时,会非常慢。

总结HDFS块的大小设置主要取决于磁盘传输速率

二、HDFS的读写流程

  1. HDFS写数据流程

在HDFS 写数据的过程中,NameNode 会选择离待上传数最近距离的 DataNode 接收数据。那么这个最近距离怎么计算呢?

节点距离:两个节点到达最近的共同祖先的距离总和。

写数据流程:

(1)客户端通过Distributed FileSystem模块向NameNode请求上传文件,NameNode检查目标文件是否已存在,父目录是否存在。

(2)NameNode返回是否可以上传。

(3)客户端请求第一个 Block上传到哪几个DataNode服务器上。

(4)NameNode返回3个DataNode节点,分别为dn1、dn2、dn3。

(5)客户端通过FSDataOutputStream模块请求dn1上传数据,dn1收到请求会继续调用dn2,然后dn2调用dn3,将这个通信管道建立完成。

(6)dn1、dn2、dn3逐级应答客户端。

(7)客户端开始往dn1上传第一个Block(先从磁盘读取数据放到一个本地内存缓存),以Packet为单位,dn1收到一个Packet就会传给dn2,dn2传给dn3;dn1每传一个packet会放入一个应答队列等待应答。

(8)当一个Block传输完成之后,客户端再次请求NameNode上传第二个Block的服务器。(重复执行3-7步)。

  1. HDFS读数据流程

读取数据流程:

(1)客户端通过DistributedFileSystem向NameNode请求下载文件,NameNode通过查询元数据,找到文件块所在的DataNode地址。

(2)挑选一台DataNode(就近原则,然后随机)服务器,请求读取数据。

(3)DataNode开始传输数据给客户端(从磁盘里面读取数据输入流,以Packet为单位来做校验)。

(4)客户端以Packet为单位接收,先在本地缓存,然后写入目标文件。

三、NN和2NN

硬盘和内存就像阴阳两极的对立,硬盘可靠但慢,内存快但不可靠。

开机启动:

将硬盘里的 edits_inprogress_001(编辑日志)和 fsimage(镜像文件)加载进内存。

客户端client发出操作请求:

1.新建一份空白的 edits_inprogress_002,用作后续的编辑日志写入。

2.将内存里的 edits_inprogress_001 改名为 edits_001,用作数据备份。

3.将操作请求内容写入 edits_inprogerss_002。

CheckPoint触发:(定时时间到/edits中的数据满了)

1.拷贝 edits_001 和 fsimage 到 2NN。

2.加载 edits_001 和 fsimage 到内存,合并生成结果命名为 fsimage.chkpoint。

3.拷贝 fsimage.chkpoint 到 NN。

4.将NN里的 fsimage.chkpoint 重命名为 fsimage ,覆盖掉原来的 fsimage。

NameNode被格式化之后,将在/opt/module/hadoop-3.1.3/data/tmp/dfs/name/current目录中产生如下文件:
fsimage_0000000000000000000
fsimage_0000000000000000000.md5
seen_txid
VERSION

(1) Fsimage文件:HDFS文件系统元数据的一个 永久性的检查点。其中包含HDFS文件系统的所有目录和文件inode的序列化信息。
(2) Edits文件:存放HDFS文件系统的所有更新操作的路径,文件系统客户端执行的所有写操作首先会被记录到Edits文件中。
(3) seen_txid文件:保存的是一个数字,就是最后一个edits 的数字
(4) 每次NameNode启动的时候都会将Fsimage文件读入内存,加载Edits里面的更新操作,保证内存中的元数据信息是最新的、同步的,可以看成NameNode启动的时候就将Fsimage和Edits文件进行了合并。

四、Datanode工作原理

工作机制:

1)一个数据块在DataNode上以文件形式存储在磁盘上,包括两个文件,一个是数据本身,一个是元数据包括数据块的长度,块数据的校验和,以及时间戳。

2)DataNode启动后向NameNode注册,通过后,周期性(1小时)的向NameNode上报所有的块信息。

3)心跳是每3秒一次,心跳返回结果带有NameNode给该DataNode的命令如复制块数据到另一台机器,或删除某个数据块。如果超过10分钟没有收到某个DataNode的心跳,则认为该节点不可用。

4)集群运行中可以安全加入和退出一些机器。

五、HDFS重点

  1. HDFS文件块大小

  1. HDFS的shell操作

  1. HDFS的读写流程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/394014.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一篇文章带你了解折线图

在我们的日常生活中,折线图随处可见,如医院里的心电图、股市里的股票走势、企业中的财务报表分析,但是折线图的具体适用情形,你真的了解吗? 折线图(line chart)也叫曲线图,用于显示数…

javaWeb在线考试系统

一、项目简介 本项目是一套javaWeb在线考试系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试,eclipse 确保…

python-pandapower电力系统状态估计(算例1:讲解以及基本算例实现)

提示:专栏解锁后可以查看该专栏所有文章划算 全文截图如下 文章目录 前言一、状态估计1 理论背景2 测量量3 标准偏差二、工具箱函数讲解1 定义测量create_measurement()2 运行状态估计estimate( )3 不良数据处理remove_bad_data();chi2_analysis()remove_bad_data()…

k8s调度之初探nodeSelector和nodeAffinity

在k8s的调度中,有强制性的nodeSelector,节点亲和性nodeAffinity、Pod亲和性podAffinity、pod反亲和性podAntiAffinity。本篇先对nodeSelector和nodeAffinity做个初探。进入主题之前,先看看创建pod的大概过程kubectl向apiserver发起创建pod请求…

【UE4 RTS游戏】01-项目准备

步骤新建一个工程,选择俯视角游戏模板我命名工程如下:删除场景内的所有cube再删除Floor和Wall删除TopDownCharacter删除“NavgationMeshBoundVolume”删除“TamplateLabel”和“RecastNavMesh-Default”删除LightmassImportanceVolume、PostProcessVolum…

【java】java异常分类和异常处理以及面试中常见的问题

文章目录什么是异常?程序错误一般分为三种编译错误运行时错误逻辑错误两个子类区别java几种常见的异常:运行时异常:IOException异常的产生:异常的处理:消极的处理:积极的处理:(异常捕获)throw和…

Jenkins自动化部署入门

Jenkins自动化部署入门 一、简介 Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。 Jenkins自动化部署实现原理 二、Jenkins部…

交互:可以执行命令行的框架才是好框架

上一节课,我们开始把框架向工业级迭代,重新规划了目录,这一节课将对框架做更大的改动,让框架支持命令行工具。 第三方命令行工具库 cobra obra 不仅仅能让我们快速构建一个命令行,它更大的优势是能更快地组织起有许多…

SpringBoot整合Mybatis详解

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言一、创建项目,导入依赖,完善项目结构二、编码1.yml配置2.编写实体类3.编写mapper.xml和接口4.编写业务层5.编写控制层6.启动类加上包扫描…

实践分享:Vue 项目如何迁移小程序

最近我们小组刚经历了将成熟的 HTML5 项目转换成小程序,并在app中运行的操作!记录下来分享给各位。 项目:将已有的 Vue 项目转为小程序, 在集成了FinClip SDK 的 App 中运行。 技术:uni-app、FinClip 两个注意事项&…

多机器人集群网络通信协议分析

本文讨论的是多机器人网络通信各层的情况和协议。 每个机器人连接一个数据传输通信模块(以下简称为数传,也泛指市面上的图传或图数一体的通信模块),数传之间进行组网来传递信息。 根据ISO的划分,网络通信的OSI模型分…

速看|快速软件开发框架突破信息孤岛,高效实现数字化发展!

在企业办公自动化发展的过程中,各部门之间的信息链接存在着链接不及时、信息孤岛的现象。伴随着日益激烈的市场竞争,这样单枪匹马的作战方式已经让不少企业吃尽了苦头,借助快速软件开发框架,可以有效打破信息孤岛,让各…

Jetpack Compose 中适配不同的屏幕尺寸

窗口大小分类 Compose 将 Android 设备的屏幕尺寸分为三类&#xff1a; Compact: 小屏幕&#xff0c;一般就是手机设备&#xff0c;屏幕宽度 < 600dpMedium&#xff1a;中等屏幕&#xff0c;大号的板砖手机如折叠屏或平板的竖屏&#xff0c;600dp < 屏幕宽度 < 840d…

swagger关闭/v2/api-docs仍然可以访问漏洞

今天接到安全团队的说swagger有未授权访问漏洞&#xff0c;即使在swagger关闭的情况下http://127.0.0.1:8086/agcloud/v2/api-docs?group%E7%94%A8%E6%88%B7%E5%85%B3%E8%81%94%E4%BF%A1%E6%81%AF%E6%A8%A1%E5%9D%97仍然还能访问。 看了下原来是有写一个拦截器 registry.addI…

图表控件TeeChart for .NET系列教程六:将数据添加到系列中(使用系列)

TeeChart for .NET是优秀的工业4.0 WinForm图表控件&#xff0c;官方独家授权汉化&#xff0c;集功能全面、性能稳定、价格实惠等优势于一体。TeeChart for .NET 中文版还可让您在使用和学习上没有任何语言障碍&#xff0c;至少可以节省30%的开发时间。 TeeChart for .NET最新…

BFD协议原理

BFD协议原理引入背景不使用BFD带来的问题OSPF感知慢VRRP产生次优路径BFD技术简介BFD会话建立方式和检测机制BFD会话建立过程BFD工作流程BFD的单臂回声BFD默认参数以及调整方法总结引入背景 随着网络应用的广泛部署&#xff0c;网络发生中断可能影响业务正常运行并造成重大损失…

Git开发常用指令及其使用场景

目录前言一、Git安装1.1 官网安装二、配置Git工具2.1 用户信息配置2.2 查看配置三、初始化仓库3.1 创建仓库四、常用命令4.1 git clone拉取远端仓库4.2 git分支操作4.2.1 查看分支4.2.2 分支操作4.3 撤回操作4.3.1 撤回删错的分支4.3.2 撤回提交4.3 拉取代码操作4.4 贮存操作五…

ChatGPT也有犯晕的时候

前面测试 ChatGPT 进行写代码、优化代码、解释代码、一般问答都表现的很好。偷个懒&#xff0c;用ChatGPT 帮我写段生物信息代码如果 ChatGPT 给出的的代码不太完善&#xff0c;如何请他一步步改好&#xff1f;代码看不懂&#xff1f;ChatGPT 帮你解释&#xff0c;详细到爆&…

详解Redis的主从同步原理

前言 Redis为了保证服务高可用&#xff0c;其中一种实现就是主从模式&#xff0c;即一个Redis服务端作为主节点&#xff0c;若干个Redis服务端作为主节点的从节点&#xff0c;从而实现即使某个服务端不可用时&#xff0c;也不会影响Redis服务的正常使用。本篇文章将对主从模式…

asp.net网站读取app.config配置内容

目录1、情况说明1.1 使用场景1.2 基本概念2、优化1、情况说明 1.1 使用场景 创建了一个网站&#xff08;项目A&#xff09;&#xff0c;又创建了一个访问数据的项目B。项目A因为是个网站&#xff0c;所有会有web.config文件。项目B是一个读取数据库的类库&#xff0c;会有一个…