大数据基础:Hadoop之HDFS重点架构原理

news2025/1/11 18:30:03

文章目录

Hadoop之HDFS重点架构原理

一、什么是Hadoop

二、HDFS简介

三、HDFS架构

3.1、NameNode

3.2、SecondaryNameNode

3.3、DataNode

3.4、Client

四、fsimage和editslog合并

五、Block副本放置策略

六、读写流程

6.1、HDFS写文件流程

6.2、HDFS读文件流程


Hadoop之HDFS重点架构原理

一、什么是Hadoop

分布式系统基础架构,旨在解决海量数据存储和计算分析问题,核心组件:HDFS + MapReduce + Yarn。

二、HDFS简介

Hadoop Distributed File System - 分布式文件存储系统,解决海量数据存储问题。

三、HDFS架构

3.1、NameNode

NameNode就是主从架构中的Master,是HDFS中的管理者。HDFS中数据文件分布式存储在各个DataNode节点上,NameNode维护和管理文件系统元数据(空间目录树结构、文件、Block信息、访问权限),随着存储文件的增多,NameNode上存储的信息越来越多,NameNode主要通过两个组件实现元数据管理:fsimage(命名空间镜像文件)和editslog(编辑日志)。

  • fsimage:HDFS文件系统元数据的镜像文件,其中包含了HDFS文件系统的所有目录和文件相关信息元数据。

  • editslog:用户操作HDFS的编辑日志文件,存放HDFS文件系统的所有操作事件,文件的所有写操作会被记录到Edits文件中

NameNode作用:

  1. 完全基于内存存储文件元数据、目录结构、文件block的映射信息。

  2. 提供文件元数据持久化/管理方案。

  3. 提供副本放置策略。

  4. 处理客户端读写请求。

3.2、SecondaryNameNode

随着操作HDFS的数据变多,久而久之就会造成edits文件变的很大,如果namenode重启后再一条条执行edits日志恢复状态就需要很长时间,导致重启速度慢,所以在NameNode运行的时候就需要将editslog和fsimage定期合并。这个合并操作就由SecondaryNameNode负责。

所以SecondaryNameNode作用就是辅助NameNode定期合并fsimage和editslog,并将合并后的fsimage推送给NameNode。

3.3、DataNode

DataNode是主从架构中的Slave,DataNode存储文件block块,Block在DataNode上以文件形式存储在磁盘上,包括2个文件,一个是数据文件本身,一个是元数据(包括block长度、block校验和、时间戳)。当DataNode启动后会向NameNode进行注册,并汇报block列表信息,后续会周期性(参数dfs.blockreport.intervalMsec决定,默认6小时)向NameNode上报所有的块信息。同时,DataNode会每隔3秒与NameNode保持心跳,如果超过10分钟NameNode没有收到某个DataNode的心跳,则认为该节点不可用。

DataNode作用:

  1. 基于本地磁盘存储block数据块。

  2. 保存block的校验和数据保证block的可靠性。

  3. 与NameNode保持心跳并汇报block列表信息。

3.4、Client

Client是操作HDFS的客户端。

Client作用:

  1. 与NameNode交互,获取文件block位置信息。

  2. 与DataNode交互,读写文件block数据。

  3. 文件上传时,负责文件切分成block并上传。

  4. 可以通过client访问HDFS进行文件操作或管理HDFS。

四、fsimage和editslog合并

  1. 当HDFS集群首次启动会在NameNode上创建空的fsimage,对HDFS的操作会记录到editslog文件中。

  2. 当开始进行editslog和fsimage合并时,SecondaryNameNode请求namenode生成新的editslog文件并向其中写日志。

  3. SecondaryNameNode通过HTTP GET的方式从NameNode下载fsimage和edits文件到本地。

  4. SecondaryNameNode将fsimage加载到自己的内存,并根据editslog更新内存中的fsimage信息,然后将更新完毕之后的fsimage写到磁盘上。

  5. SecondaryNameNode通过HTTP PUT将新的fsimage文件发送到NameNode,NameNode将该文件保存为.ckpt的临时文件备用。

  6. NameNode重命名该临时文件并准备使用,此时NameNode拥有一个新的fsimage文件和一个新的很小的editslog文件(可能不是空的,因为在SecondaryNameNode合并期间可能对元数据进行了读写操作)。

  7. 后续SecondaryNameNode会按照以上步骤周期性进行editslog和fsimage的合并。

注意:合并时机默认间隔1小时(3600s)或者每分钟(60s)editslog存储的事务(即操作数)到了1000000个。

五、Block副本放置策略

HDFS中每个block块有3副本。

第一个副本:放置在上传文件的DataNode,也就是Client所在节点上;如果是集群外提交,则随机挑选一台磁盘不太满,CPU不太忙的节点。

第二个副本:放置在与第一个副本不同的机架的节点上。

第三个副本:与第二个副本相同机架的随机节点。

更多副本:随机节点存放。

六、读写流程

6.1、HDFS写文件流程

  1. 客户端会创建DistributedFileSystem对象,DistributedFileSystem会发起对namenode的一个RPC连接,请求创建一个文件,不包含关于block块的请求。namenode会执行各种各样的检查,确保要创建的文件不存在,并且客户端有创建文件的权限。如果检查通过,namenode会创建一个文件(在edits中,同时更新内存状态),否则创建失败,客户端抛异常IOException。

  2. NN在文件创建后,返回给HDFS Client可以开始上传文件块。

  3. DistributedFileSystem返回一个FSDataOutputStream对象给客户端用于写数据。FSDataOutputStream封装了一个DFSOutputStream对象负责客户端跟datanode以及namenode的通信。

  4. 客户端中的FSDataOutputStream对象将数据切分为小的packet数据包(64kb,core-default.xml:file.client-write-packet-size默认值65536),并写入到一个内部队列(“数据队列”)。DataStreamer会读取其中内容,并请求namenode返回一个datanode列表来存储当前block副本。列表中的datanode会形成管线,DataStreamer将数据包发送给管线中的第一个datanode,第一个datanode将接收到的数据发送给第二个datanode,第二个发送给第三个,依次类推。

  5. FSDataOutputStream维护着一个数据包的队列,这的数据包是需要写入到datanode中的,该队列称为确认队列。当一个数据包在管线中所有datanode中写入完成,就从ack队列中移除该数据包。

  6. 当block传输完成,DN会向NN汇报block信息,同时Client继续传输下一个block,如果有多个block,则会反复从步骤4开始执行。

  7. 当客户端完成了数据的传输,调用数据流的close方法。该方法将数据队列中的剩余数据包写到datanode的管线并等待管线的确认。

  8. 客户端收到管线中所有正常datanode的确认消息后,通知namenode文件写入成功。

6.2、HDFS读文件流程

  1. 客户端通过FileSystem对象的open方法打开希望读取的文件,DistributedFileSystem对象通过RPC调用namenode,以确保文件起始位置。对于每个block,namenode返回存有该副本的datanode地址。这些datanode根据它们与客户端的距离来排序。如果客户端本身就是一个datanode,并保存有相应block一个副本,会从本地读取这个block数据。

  2. DistributedFileSystem返回一个FSDataInputStream对象给客户端读取数据。该对象管理着datanode和namenode的I/O,用于给客户端使用。客户端对这个输入调用read方法,存储着文件起始几个block的datanode地址的DFSInputStream连接距离最近的datanode。通过对数据流反复调用read方法,可以将数据从datnaode传输到客户端。到达block的末端时,DFSInputSream关闭与该datanode的连接,然后寻找下一个block的最佳datanode。客户端只需要读取连续的流,并且对于客户端都是透明的。

  3. 客户端从流中读取数据时,block是按照打开DFSInputStream与datanode新建连接的顺序读取的。它也会根据需要询问namenode来检索下一批数据块的datanode的位置。一旦客户端完成读取,就close掉FSDataInputStream的输入流。

  4. 在读取数据的时候如果DFSInputStream在与datanode通信时遇到错误,会尝试从这个块的一个最近邻datanode读取数据。同时也记住故障datanode,保证以后不会反复读取该节点上后续的block。DFSInputStream也会通过校验和确认从datanode发来的数据是否完整。如果发现有损坏的块,DFSInputStream会尝试从其他datanode读取其副本并通知namenode。

  5. Client下载完block后会验证DN中的MD5,保证块数据的完整性。


  • 📢博客主页:https://lansonli.blog.csdn.net
  • 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
  • 📢本文由 Lansonli 原创,首发于 CSDN博客🙉
  • 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨

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

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

相关文章

2,区块链、数字货币及其应用场景(react+区块链实战)

2,区块链、数字货币及其应用场景(react区块链实战) 一、什么是区块链?1 ibloackchain(1)安装ibloackchain(2)Blance查询余额(3)Mine挖矿(4&#x…

新技术引领商业智能新时代:从 AI 到自助分析的演变

最新技术资源: https://www.grapecity.com.cn/resources/ 引言:商业智能的新技术浪潮 在当今数据驱动的世界中,技术进步不断改变着商业智能(BI)领域。特别是人工智能(AI)和自助分析工具的发展&…

源代码保密:现代软件工程不可或缺的一环

SDC沙盒(Secure Development Container或Software Development Container,具体名称可能根据供应商有所不同)是一种专门设计用于保护软件开发过程中源代码安全的数据防泄漏系统(DLP, Data Leakage Prevention)。在源代码…

前端面试题24(css3)

下面是一些常见的 CSS3 面试题,这些问题可以帮助你评估应聘者对 CSS3 的掌握程度: 1. 解释 CSS3 中的动画关键帧(keyframes)和它们是如何工作的? 回答要点:keyframes 规则用于创建动画,它可以…

分享一个Typecho博客系统专用的CloudFlare缓存规则,优化加速一下下!

好久都没有更新Typecho博客了,最近几天明月测试了一套适用于Typecho博客系统的CloudFlare缓存规则,经过近一周时间的测试确定有效,并且加速效果特别突出,今天就无偿分享给大家,也算是为国内Typecho生态添砖加瓦了吧! 总结下来,这套CloudFlare缓存规则带来的好处就是可以…

uniapp 微信小程序接入MQTT

MQTT安装 前期准备 由于微信小程序需要wss,所以要有域名SSL证书 新建目录/srv/mosquitto/config,/srv/mosquitto/config/cert 目录/srv/mosquitto/config中新建配置文件mosquitto.conf,文件内容 persistence true persistence_location /m…

使用tkinter拖入excel文件并显示

使用tkinter拖入excel文件并显示 效果代码 效果 代码 import tkinter as tk from tkinter import ttk from tkinterdnd2 import TkinterDnD, DND_FILES import pandas as pdclass ExcelViewerApp(TkinterDnD.Tk):def __init__(self):super().__init__()self.title("Excel…

Transformer-LSTM预测 | Matlab实现Transformer-LSTM时间序列预测

Transformer-LSTM预测 | Matlab实现Transformer-LSTM时间序列预测 目录 Transformer-LSTM预测 | Matlab实现Transformer-LSTM时间序列预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现Transformer-LSTM时间序列预测,Transformer-LSTM&#xf…

网站更新改版了

✅作者简介:大家好,我是Leo,热爱Java后端开发者,一个想要与大家共同进步的男人😉😉 🍎个人主页:Leo的博客 💞当前专栏:Leo杂谈 ✨特色专栏:MySQL学…

连接世界:Facebook如何改变全球社交文化

自2004年推出以来,Facebook已经从一个大学校园社交工具成长为一个影响全球数十亿人的社交平台。它不仅改变了人们的社交方式,还深刻地影响了全球的社交文化和信息传播方式。以下是Facebook如何在几个关键方面改变全球社交文化的简要探讨。 1. 全球化的社…

vue 切换主题色切换主题色切换主题色切换主题色切换主题色

第一种&#xff1a;使用CSS变量 CSS变量&#xff08;Custom Properties&#xff09;是CSS的一种新特性 1.实现需求&#xff1a;自定义颜色 定义变量 全局的theme.css :root {--primary-color:red; }在组件中使用这些变量 demo.vue <template><div class"main…

2024.7.9作业

1、提示并输入一个字符串&#xff0c;统计该字符串中字母、数字、空格以及其他字符的个数 #include <stdio.h> #include <string.h> int main(int argc,const char *argv[]) { char arr[30]{0}; int zm0,kg0,sz0,qt0; printf("请输入字符串&…

Python基础-成年人判断(if条件语句联系)

注意输入的年龄需要转化为字符串 代码&#xff1a; print("欢迎来到游乐场&#xff1a;儿童免费&#xff0c;成人收费") age int(input("请输入你的年龄:")) if age>18:print("你已经成年&#xff0c;需要补票10元") # 四个空格缩进print…

P8306 【模板】字典树

题目描述 给定 n 个模式串 s1​,s2​,…,sn​ 和 q 次询问&#xff0c;每次询问给定一个文本串 ti​&#xff0c;请回答 s1​∼sn​ 中有多少个字符串 sj​ 满足 ti​ 是 sj​ 的前缀。 一个字符串 t 是 s 的前缀当且仅当从 s 的末尾删去若干个&#xff08;可以为 0 个&#…

【Python的pip配置、程序运行、生成exe文件】

Python的pip配置、程序运行、生成exe文件 一、安装Python 通过官网下载对应的版本&#xff0c;安装即可。 下载地址&#xff1a;https://www.python.org/downloads/ Python标准库查看&#xff08;Python自带库&#xff09; Python 标准库文档 安装Python的时候&#xff0c…

【自学网络安全】:安全策略与用户认证综合实验

实验拓扑图&#xff1a; 实验任务&#xff1a; 1、DMZ区内的服务器&#xff0c;办公区仅能在办公时间内(9:00-18:00)可以访问&#xff0c;生产区的设备全天可以访问 2、生产区不允许访问互联网&#xff0c;办公区和游客区允许访问互联网 3、办公区设备10.0.2.10不允许访问Dmz区…

suricata7 rule加载(三)加载options

suricata7.0.5 加载options (msg:“HTTP Request Example”; flow:established,to_server; http.method; content:“POST”; http.uri; content:“query.php”; bsize:>9; http.protocol; content:“HTTP/1.1”; bsize:8; http.host; content:“360”; bsize:>3; class…

HI3559AV100四路IMX334非融合拼接8K视频记录

下班无事&#xff0c;写篇博客记录海思hi3559av100四路4K视频采集拼接输出8K视频Demo 一、准备工作&#xff1a; 软件&#xff1a;Win11系统、VMware虚拟机Ubuntu14、Hitool、Xshell等 硬件&#xff1a;HI3559AV100开发板4路imx334摄像头、串口线、电源等 附硬件图&#xff1…

射频硅基氮化镓:两个世界的最佳选择

当世界继续努力追求更高速的连接&#xff0c;并要求低延迟和高可靠性时&#xff0c;信息通信技术的能耗继续飙升。这些市场需求不仅将5G带到许多关键应用上&#xff0c;还对能源效率和性能提出了限制。5G网络性能目标对基础半导体器件提出了一系列新的要求&#xff0c;增加了对…

硕博电子移动控制器在无人驾驶卡车上的应用

传统港口行业一直是一个典型的劳动密集型行业&#xff0c;以前&#xff0c;集装箱的每次起吊操作需要多人配合&#xff0c;包括操作员、指挥手、理货员等至少7名现场工作人员。传统码头设施陈旧&#xff0c;重型设备难以更新换代。而且&#xff0c;港口还经常受到天气状况的影响…