HDFS工作原理

article/2025/10/25 3:51:16

一、HDFS 组成架构

1)NameNode(nn):就是Master,它是一个主管、管理者。

(1)管理HDFS的名称空间

(2)配置副本策略

(3)管理数据块(Block)映射信息

(4)处理客户端读写请求。

2)DataNode:就是Slave。NameNode下达命令,DataNode执行实际的操作。

(1)存储实际的数据块

(2)执行数据块的读/写操作。

3)Client:就是客户端。

(1)文件切分。文件上传HDFS的时候,Client将文件切分成一个一个的Block,然后进行上传

(2)与NameNode交互,获取文件的位置信息

(3)与DataNode交互,读取或者写入数据

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

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

4)Secondary NameNode:并非NameNode的热备。当NameNode挂掉的时候,它并不能马上替换NameNode并提供服务(一般只在测试环境存在,生产环境都是搭建NN高可用的)。

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

(2)在紧急情况下,可辅助恢复NameNode。

二、HDFS的写数据流程

(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 步)

三、HDFS 读数据流程

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

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

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

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

四、NameNode工作机制

 1)第一阶段:NameNode 启动

(1)第一次启动 NameNode 格式化后,创建 Fsimage 和 Edits 文件。如果不是第一次启动,直接加载编辑日志和镜像文件到内存。

(2)客户端对元数据进行增删改的请求

(3)NameNode 记录操作日志,更新滚动日志

(4)NameNode 在内存中对元数据进行增删改。

2)第二阶段:Secondary NameNode 工作(如果是NN的HA模式,这个时候就是Standby的NN来处理第二阶段,此时的Edits 文件就在journalNode里面保存)

(1)Secondary NameNode 询问 NameNode 是否需要 CheckPoint。直接带回 NameNode是否检查结果。

(2)Secondary NameNode 请求执行 CheckPoint

(3)NameNode 滚动正在写的 Edits 日志

(4)将滚动前的编辑日志和镜像文件拷贝到 Secondary NameNode

(5)Secondary NameNode 加载编辑日志和镜像文件到内存,并合并。

(6)生成新的镜像文件 fsimage.chkpoint

(7)拷贝 fsimage.chkpoint 到 NameNode

(8)NameNode 将 fsimage.chkpoint 重新命名成 fsimage。

五、Fsimage 和 Edits 解析

(1)Fsimage文件:HDFS文件系统元数据的一个永久性的检查点,其中包含HDFS文件系统的所有目录和文件inode的序列化信息

(2)Edits文件:存放HDFS文件系统的所有更新操作的路径,文件系统客户端执行的所有写操作首先会被记录到Edits文件中

(3)每 次NameNode启动的时候都会将Fsimage文件读入内存,加 载Edits里面的更新操作,保证内存中的元数据信息是最新的、同步的,可以看成NameNode启动的时候就将Fsimage和Edits文件进行了合并。

六、DataNode 工作机制

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

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

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

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

七、DataNode掉线时限参数

<property>
<name>dfs.namenode.heartbeat.recheck-interval</name>
<value>300000</value>
</property>
<property>
<name>dfs.heartbeat.interval</name>
<value>3</value>
</property>

1)默认的dfs.namenode.heartbeat.recheck-interval 大小为5分钟

HeartbeatManager中有一个线程,默认每5分钟会检查一次所有的datanodes,判断每个datanode是否已经死亡

(2)dfs.heartbeat.interval默认为3秒

(3)HDFS默认的超时时长为10分钟+30秒

TimeOut = 2 * dfs.namenode.heartbeat.recheck-interval + 10 * dfs.heartbeat.interval


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

相关文章

hdfs原理

简介 HDFS(Hadoop Distributed File System )Hadoop分布式文件系统。是根据google发表的论文翻版的。论文为GFS(Google File System)Google 文件系统。 HDFS有很多特点: ① 保存多个副本,且提供容错机制,副本丢失或宕机自动恢复。默认存3份。 (用空间换安全) ② 运行…

Hadoop原理之——HDFS原理

Hadoop 3个核心组件&#xff1a; 分布式文件系统&#xff1a;Hdfs——实现将文件分布式存储在很多的服务器上&#xff08;hdfs是一个基于Linux本地文件系统上的文件系统&#xff09; 分布式运算编程框架&#xff1a;Mapreduce——实现在很多机器上分布式并行运算 分布式资源调度…

HDFS架构及原理

HDFS架构及原理 1、HDFS架构及存储 HDFS 采用Master/Slave的架构来存储数据&#xff0c;这种架构主要由四个部分组成&#xff0c;分别为HDFS Client、NameNode、DataNode和Secondary NameNode。一个HDFS集群是由一个NameNode和一定数目的DataNode组成的。NameNode是一个中心服…

HDFS基本原理及数据存取实战

--------------------------------------------------------------------------------------------------------------- [版权申明&#xff1a;本文系作者原创&#xff0c;转载请注明出处] 文章出处&#xff1a;http://blog.csdn.net/sdksdk0/article/details/51622547 作者&am…

QT的开发学习路线

基础组件&#xff1b;页面布局&#xff1b;通信机制&#xff1b;

QT的学习

QT是利用C进行编写&#xff0c;而QT则是C的实际运用的一种方式。 QT也称GUI------grphical user interface&#xff08;图形用户接口&#xff09; 通过图形的方式操纵计算机用户界面 QT的特点以及应用&#xff1a; 1、跨平台&#xff08;可以在多个平台上进操作&#xff08…

Qt 学习之路 2 --- 读书笔记

一、文章来由 来自豆子老师非常好的一本Qt教程&#xff0c;但是只有网络版&#xff0c;所以用这个做笔记了&#xff0c;不动笔墨不读书嘛~~ 二、读书笔记 1、Qt 学习之路 2&#xff08;2&#xff09;&#xff1a;Qt 简介 1.1 关于 Qt 的一站式解决 Qt 是一个著名的 C 应用…

Qt学习之路之 QTextEdit 重温

其实&#xff0c;QTextEdit 也有对文本的编辑函数&#xff0c; 剪切&#xff0c;复制&#xff0c;撤销..... 看看下面的这个简单的例子&#xff1a; 控件一目了然。按钮 QTextedit 对象 &#xff0c; 垂直布局。 -------------------------------------------------- 环境&…

QT的进一步学习

QT的进一步学习 来源: ChinaUnix博客  日期&#xff1a; 2006.10.02 17:41 (共有条评论) 我要评论 本文收录了互联…

Qt学习之路之QMovie动画

QMovie类是一个很方便的类&#xff0c;用于播放动画。在刷新页面的时候&#xff0c;可以尝试用QMovie 来实现等待界面。 QMovie类用于显示简单的动画&#xff0c;没有声音。 首先&#xff0c;通过将一个文件的名称或者一个指针传递给QMovie的构造函数构建一个QMovie对象。传递…

QT学习之路-记事本

1、在创建记事本之前先明白有哪些功能&#xff1a; 先创建一个菜单栏&#xff0c;菜单栏是用来装各种功能的一个地方如上图所示&#xff0c;文件、编辑所在的地方为菜单栏&#xff0c; //创建菜单栏QMenuBar *menubarmenuBar();菜单栏创建好后再创建菜单&#xff0c;菜单在菜单…

QT学习

文章目录 前言一&#xff1a;Qt的三个基类QObject、QApplication和QWidget一&#xff1a;QObject类二&#xff1a;Qapplication类三&#xff1a;QWidget 二&#xff1a;Qt中QMainWindow、QWidget、QDialog的区别基础知识1&#xff1a;容器类常用的QListQStack和QQueueMap和Mult…

【QT学习之路】QThread的简单使用

QThread的使用说明&#xff1a;QThread线程类是QT已经封装好的&#xff0c; 如果要使用线程&#xff0c; 就派生出子类并且实现线程接口函数run&#xff08;run就是线程任务函数&#xff09; 下面就用QThread实现当前系统时间的获取并且在主界面(UI线程)上显示&#xff0c;实现…

【QT学习之路,QT安装】

1&#xff0c;安装QT 系统环境&#xff1a;ubuntu 22.04 sudo apt-get install build-essential sudo apt-get install qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools sudo apt-get install qtcreator sudo apt-get install qt5* 2&#xff0c;安装成功后会有4个程序 3…

qt学习之路(三)之使用QT语言家

一、简介 源代码中经常会出现一些字符串&#xff0c;比如定义要显示在控件上的文本&#xff0c;在不同的语言环境下&#xff0c;可能会需要显示不同语言对应的文本。针对多语言切换的需求&#xff0c;Qt提供的解决方案是&#xff0c;在所有需要翻译的字符串处都使用QObject::tr…

QT学习(2)

事件 事件与信号的关系&#xff1f;&#xff1f; 点击按钮&#xff0c;也会进入到事件循环&#xff0c;处理槽函数 事件对操作系统而言 事件大部分都是由硬件触发&#xff1b;事件产生&#xff0c;操作系统是知道的 鼠标移动&#xff1a; 事件在qt中是由多态去实现的&#xf…

Qt 进阶之路

作者&#xff1a;billy 版权声明&#xff1a;著作权归作者所有&#xff0c;商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处 前言 古语有云&#xff1a;“工欲善其事&#xff0c;必先利其器”。一件好的开发工具可以帮助开发者快速、准确的完成任务。博主主要从…

Qt 入门学习路线

参考书目 《C GUI Qt4编程》 一、Qt框架概述 1. 什么是Qt? Qt是一个用C编写的、成熟的、跨平台的GUI工具包&#xff0c;它是挪威Trolltech公司的产品&#xff0c;该公司为商业市场开发、销售和支持Qt及其相关软件。 Qt作为一个出色的软件框架&#xff0c;除了为应用程序提供…

《Qt基础教程之Qt学习之路》

在Qt开源社区中&#xff0c;有一个很好的Qt教程&#xff0c;叫做《Qt 学习之路》&#xff0c;下面是它的链接和目录。 链接地址&#xff1a;http://www.qter.org/thread-629-1-1.html 评论区说上面这个地址打不开&#xff0c;有可能没人管理了。可以试一下面的&#xff1a; h…

Qt学习之路 (一)概述

Qt&#xff08;官方发音 [kju:t]&#xff0c;音同 cute&#xff09;是一个跨平台的 C 开发库&#xff0c;主要用来开发图形用户界面&#xff08;Graphical User Interface&#xff0c;GUI&#xff09;程序&#xff0c;当然也可以开发不带界面的命令行&#xff08;Command User …