大数据讲课笔记4.2 HDFS架构和原理

news/2024/4/30 17:53:02/文章来源:https://blog.csdn.net/howard2005/article/details/127170431

文章目录

  • 零、学习目标
  • 一、导入新课
  • 二、新课讲解
    • (一)HDFS存储架构
    • (二)HDFS文件读写原理
      • 1、HDFS写数据原理
      • 2、HDFS读数据原理
  • 三、归纳总结
  • 四、上机操作

零、学习目标

  1. 了解HDFS存储架构
  2. 理解HDFS文件读写原理

一、导入新课

  • 通过上次课的学习,学生对HDFS有了一定的认识,如果想要更好地使用HDFS,就必须学习HDFS的架构和读写数据的原理。本次课将针对HDFS的架构和原理进行详细讲解。

二、新课讲解

(一)HDFS存储架构

  • HDFS是一个分布式的文件系统,相比普通的文件系统来说更加复杂,因此在学习HDFS的操作之前有必要先来学习一下HDFS的存储架构。

  • HDFS采用了主从(Master/Slave)结构模型,一个HDFS集群包括一个名称节点(NameNode)和若干个数据节点(DataNode)(如下图所示)。名称节点作为中心服务器,负责管理文件系统的命名空间及客户端对文件的访问。集群中的数据节点一般是一个节点运行一个数据节点进程,负责处理文件系统客户端的读/写请求,在名称节点的统一调度下进行数据块的创建、删除和复制等操作。每个数据节点的数据实际上是保存在本地Linux文件系统中的。
    在这里插入图片描述

  • 详情参看官网:https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html
    在这里插入图片描述

  • 在名称节点启动的时候,它会将fsimage文件中的内容加载到内存中,之后再执行edits文件中的各项操作,使得内存中的元数据和实际的同步,存在内存中的元数据支持客户端的读操作。

  • 一旦在内存中成功建立文件系统元数据的映射,则创建一个新的fsimage文件和一个空的edits文件。

  • 名称节点起来之后,HDFS中的更新操作会重新写到edits文件中,因为fsimage文件一般都很大(GB级别的很常见),如果所有的更新操作都往fsimage文件中添加,这样会导致系统运行得十分缓慢,但是,如果往edits文件里面写就不会这样,因为edits要小很多。每次执行写操作之后,且在向客户端发送成功代码之前,edits文件都需要同步更新。

  • SecondaryNameNode会定期和NameNode通信,请求其停止使用edits文件,暂时将新的写操作写到一个新的文件edits.new上来,这个操作是瞬间完成,上层写日志的函数完全感觉不到差别。

  • SecondaryNameNode通过HTTP GET方式从NameNode上获取到fsimage和edits文件,并下载到本地的相应目录下。

  • SecondaryNameNode将下载下来的fsimage载入到内存,然后一条一条地执行edits文件中的各项更新操作,使得内存中的fsimage保持最新;这个过程就是edits和fsimage文件合并。

  • SecondaryNameNode执行完上一步操作之后,会通过post方式将新的fsimage文件发送到NameNode节点上。

  • NameNode将从SecondaryNameNode接收到的新fsimage替换旧fsimage文件,同时将edits.new替换edits文件,通过这个过程edits就变小了。

  • 在HDFS的设计中,并不支持把系统直接切换到辅助名称节点,从这个角度来讲,辅助名称节点只是起到了名称节点的“检查点”作用,并不能起到“热备份”作用。

(二)HDFS文件读写原理

1、HDFS写数据原理

  • Client从HDFS中存储数据,即为Write(写)数据。
    在这里插入图片描述
    (1)客户端发起文件上传请求,通过RPC(远程过程调用)与NameNode建立通讯
    (2)NameNode检查元数据文件的系统目录树
    (3)若系统目录树的父目录不存在该文件相关信息,返回客户端可以上传文件
    (4)客户端请求上传第一个Block数据块以及数据块副本的数量
    (5)NameNode检测元数据文件中DataNode信息池,找到可用的数据节点
    (6)NameNode检查元数据文件的系统目录树
    (7)若系统目录树的父目录不存在该文件相关信息,返回客户端可以上传文件
    (8)DataNode之间建立Pipeline后,逐个返回建立完毕信息
    (9)客户端与DataNode建立数据传输流,开始发送数据包
    (10)客户端向DataNode_01上传第一个Block数据块,当DataNode_01收到一个Packet就会传给DataNode_02,DataNode_02传给DataNode_03,DataNode_01每传送一个Packet都会放入一个应答队列等待应答。
    (11)数据被分割成一个个Packet数据包在Pipeline上依次传输,而在Pipeline反方向上,将逐个发送Ack,最终由Pipeline中第一个DataNode节点DataNode_01将Pipeline的 Ack信息发送给客户端。
    (12)DataNode返回给客户端,第一个Block块传输完成。客户端则会再次请求NameNode上传第二个Block块和第三块到服务器上,重复上面的步骤,直到3个Block都上传完毕。

2、HDFS读数据原理

  • 从HDFS中查找数据,即为Read(读)数据。
    在这里插入图片描述
    (1)客户端向NameNode发起RPC请求,来获取请求文件Block数据块所在的位置。
    (2)NameNode检测元数据文件,会视情况返回Block块信息或者全部Block块信息,对于每个Block块,NameNode都会返回含有该Block副本的DataNode地址。
    (3)客户端会选取排序靠前的DataNode来依次读取Block块,每一个Block都会进行CheckSum若文件不完整,则客户端会继续向NameNode获取下一批的Block列表,直到验证读取出来文件是完整的,则Block读取完毕。
    (4)客户端会把最终读取出来所有的Block块合并成一个完整的最终文件(例如:1.txt)。

三、归纳总结

  • 回顾本节课所讲的内容,并通过提问的方式引导学生解答问题并给予指导。
    第二课时

四、上机操作

  • 形式:单独完成
  • 题目:理解HDFS架构和读写原理
  • 要求:观看尚硅谷大数据视频中关于HDFS架构和读写原理的内容。

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[Linux-文件I/O] 文件函数系统文件接口缓冲区文件描述符dup2inode软硬链接动静态库

[Linux-文件I/O] 文件函数&系统文件接口&缓冲区&文件描述符&dup2&inode&软硬链接&动静态库文件IOC语言文件操作系统接口文件操作文件描述符文件描述符分配进程和文件之间的对应关系是如何建立的?打开用openmode关闭用close读用read写用…

TEE OS中断篇(一):系统的中断处理

前面我学习了线程方面的东西,这个假期,空闲了来看看《手机安全和可信应用开发指南》这本书的中断篇。 中断处理一个完整的系统都会存在中断,ARMv7架构扩展出了Monitor模式而ARMv8使用EL的方式对ARM异常运行模式进行了重新定义,分为…

Spring 测试运行的时候提示 Unable to find a @SpringBootConfiguration 错误

Spring 进行测试的时候提示的错误信息如下: SEVERE: Caught exception while closing extension context: org.junit.jupiter.engine.descriptor.JupiterEngineExtensionContext@c63c11ed java.lang.IllegalStateException: Unable to find a @SpringBootConfiguration, you n…

Flink学习笔记(4)——Flink运行架构

目录 一、Flink运行时架构 1.1 系统架构 1.1.1 整体构成 1.1.2 作业管理器(JobManager) 1.1.3 任务管理器(TaskManager) 1.2 作业提交流程 1.2.1 高层级抽象视角 1.2.2 独立模式(Standalone) 1.2.…

SpringCloud 使用 Turbine 聚合监控 Hystrix 健康状态

Hystrix 的降级熔断,只是被迫的折中方案,并不是我们所期望的结果,我们还是期望系统能够永远健康运行。绝大多数情况下,一个系统有很多微服务组成,在高峰期很可能个别微服务会发生降级熔断,我们必须能够通过监控才行,这样才能快速发现并解决问题。 Hystrix 是 Netflix 的…

soc的核间通信机制-->mailbox

对于mailbox,这个东西其实看到了很多次,但是一直不知道是啥。这里大概看了一下,知道了为甚有这个玩意儿,以及这个玩意相关的有啥,至于具体怎么使用,以及详细的工作原因等着以后再说吧。 正文 目前很多芯片…

微信小程序开发实战(SM周期及WXS脚本)

作者 : SYFStrive 博客首页 : HomePage 📜: 微信小程序 📌:个人社区(欢迎大佬们加入) 👉:社区链接🔗 📌:觉得文章不错可以点点关注 &#x1f4…

webshell 提权

在我们使用cve或者其他方式获取shell 后 python -c import pty;pty.spawn("/bin/bash") 获取一个交互式的bash shell 使用id 命令可以查看当前的用户权限 查看当前的linux 系统版本 利用kali自带的漏洞检索库检索漏洞 searchsploit privilege | grep -i linux |…

【MySQL】数据库介绍以及MySQL数据库

目录 数据库介绍 数据库概述 数据表 MySql数据库 MySql安装 登录MySQL数据库 ​​​​​​​SQLyog(MySQL图形化开发工具) 数据库介绍 数据库概述 什么是数据库(DB:DataBase) 数据库就是存储数据的仓库,其本质是一个文件系统&#…

实训任务1:Linux基本操作

文章目录一、实训目的二、实训要求三、实训任务1、创建并配置三个虚拟机2、创建SSH连接3、实现IP地址与主机名的映射4、关闭和禁用防火墙5、创建目录结构6、压缩打包7、安装软件包8、创建脚本文件9、直接运行脚本10、虚拟机相互免密登录11、远程拷贝文件一、实训目的 通过实训…

代谢组学和宏基因组学研究不同添加剂对青贮品质的影响

​ 发表期刊:Bioresource Technology 影响因子:9.642 百趣生物提供服务:代谢组学宏基因组 研究背景 人口增长促进了全球肉类和牛奶消费量增加,养殖所需饲料用量也逐年上升,发酵后的饲料是进行农副产品处理更好的选…

大数据技术Spark3.0详解

一、Spark3.0 简介 Spark3.0版本包含了3400多个补丁程序,是开源社区做出巨大贡献的最高峰,带来了Python和SQL功能的重大进步,并着眼于探索和生产的易用性。 1、Spark3.0新功能 (1)通过自适应查询执行,动…

基于物联网的智能厨房安全监测系统-上位机程序

CSDN话题挑战赛第2期 参赛话题:学习笔记 博客写作背景----项目中解决的问题 最近遇到一个基于TCP/IP网络的远程智能物联网系统,采用Arduino Uno控制器作为下位机,采用LabVIEW作为远程监控软件,两者通过网络实现通信。初步定为使…

2022/10/4——基于stm32mp157a的M4核的中断实验

本次实验采用STM32CubeMX软件进行元器件的初始化 本次实验采用的中断源为三个按键和光电开关、火焰传感器、人体红外。其实验接口分别为: key1------>PF9 key2------>PF7 key3------>PF8(检测方式:下降沿) 光电开…

详解欧拉计划第107题:最小网络

下面这个无向网络包含有7个顶点和12条边,其总重量为243。 这个网络也可以用矩阵的形式表示如下。 ABCDEFGA-161221---B16--1720--C12--28-31-D211728-181923E-20-18--11F--3119--27G---231127-然而,我们其实可以优化这个网络,移除其中的一些边&#

windows幻灯片壁纸

幻灯片设置10秒设置为10秒 win+r输入regedit 查找路径 HKEY_CURRENT_USER\Control Panel\Personalization\Desktop Slideshow 修改interval文件没有就创建一个 修改10进制文件 60000(毫秒为60秒)改为10000(毫秒为10秒)即可 修改后点击幻灯片放映他自己设置为10分钟不用管他已经…

深入分析vhost-user网卡实现原理 —— VirtIO Features协商

文章目录前言数据结构设备模型deviceVirtIONetPCIVirtIONetNICStateNetClientStatenetdevNetVhostUserStatevhost_netvhost_devchardevchardevChardevClassSocketChardevFeaturesVirtIONetVirtIODevicevhost_devNetVhostUserStatefeature_bitsBackend流程详解启动过程网络连接网…

【Docker Desktop】Neo4j

1、下载neo4j并启动 docker run --rm --name testneo4j -p 7474:7474 -p 7687:7687 -d -v C:/Users/ASUS/Desktop/neo4j/data:/data -v C:/Users/ASUS/Desktop/neo4j/logs:/logs -v C:/Users/ASUS/Desktop/neo4j/import:/var/lib/neo4j/import -v C:/Users/ASUS/Desktop/neo4j…

Mysql出现问题:慢查询日志失效解决方案

❤️作者主页:小虚竹 ❤️作者简介:大家好,我是小虚竹。Java领域优质创作者🏆,CSDN博客专家🏆,华为云享专家🏆,掘金年度人气作者🏆,阿里云专家博主&#x1f3…

【C++入门】学习使用二维数组基本知识及用法详解

🧛‍♂️iecne个人主页::iecne的学习日志 💡每天关注iecne的作品,一起进步 💪一起学习,必看iecne 🐳希望大家多多支持🥰一起进步呀! 文章目录一.定义方式1.1…