【HDFS入门】Hadoop 2.0+ HDFS核心架构深度解析:高可用设计揭秘
目录
1 HDFS核心架构概述
2 高可用设计背景
3HDFS核心组件
3.1 Active与Standby NameNode
3.2 JournalNode
3.3 ZKFailoverController(ZKFC)
3.4 DataNode
4 高可用设计的工作流程
写入阶段:
元数据同步:
健康监测:
故障转移:
5 高可用设计的优势
6 总结
1 HDFS核心架构概述
Hadoop 2.0及以后版本的HDFS(Hadoop Distributed File System)采用了主/从(Master/Slave)架构,主要由NameNode、DataNode以及一系列辅助组件构成。HDFS的设计目标是实现高吞吐量、高容错性的数据存储,适用于大规模数据集的分布式处理。
2 高可用设计背景

在Hadoop 1.x版本中,NameNode是单点故障,一旦NameNode出现故障,整个HDFS集群将不可用。为了解决这个问题,Hadoop 2.0引入了NameNode的高可用性(HA)机制,确保在NameNode出现故障时,系统能够迅速恢复,保证数据的持续可用性。
3HDFS核心组件

3.1 Active与Standby NameNode
- 功能:
- Active NameNode:处理所有客户端的读写请求,管理文件系统的命名空间
- Standby NameNode:作为热备份,与Active NameNode保持同步,随时准备接管
- 高可用性实现:
- 通过配置两个NameNode(一个Active,一个Standby),确保在Active NameNode出现故障时,Standby NameNode能够迅速接管
- 使用JournalNode实现Active和Standby NameNode之间的元数据同步
3.2 JournalNode
- 功能:
- 在NameNode的高可用性配置中,JournalNode用于实现NameNode之间的编辑日志共享
- Active和Standby NameNode都通过JournalNode来记录编辑日志,确保两者之间的元数据保持一致
- 工作原理:
- Active NameNode将编辑日志写入JournalNode集群
- Standby NameNode从JournalNode集群读取编辑日志,并在本地应用这些日志,以保持与Active NameNode的元数据同步
3.3 ZKFailoverController(ZKFC)
- 功能:
- 基于Zookeeper实现NameNode的故障转移控制
- 监控NameNode的健康状态,并在Active NameNode出现故障时触发故障转移
- 工作原理:
- ZKFC在Zookeeper中创建一个会话,并注册一个临时的Znode来表示Active NameNode的状态
- 当Active NameNode出现故障时,Zookeeper会检测到会话超时,并通知Standby NameNode的ZKFC进行故障转移
- Standby NameNode的ZKFC在确认Active NameNode确实故障后,将Standby NameNode切换为Active状态,并接管所有客户端请求
3.4 DataNode
- 功能:
- 存储实际的数据块,根据NameNode的指示进行数据存储和检索
- 定期向NameNode发送心跳信号和块报告,以确认其状态和存储的数据块信息
- 在高可用设计中的角色:
- DataNode并不直接参与NameNode的故障转移过程,但它们的状态和存储的数据块对于HDFS的整体可用性至关重要
- 在NameNode故障转移后,新的Active NameNode需要能够快速获取DataNode的状态信息,以确保数据的正确性和一致性
4 高可用设计的工作流程

写入阶段:
客户端与Active NN交互:
- 在HDFS的写入阶段,客户端只与Active NameNode(NN)进行交互。Active NameNode负责处理所有客户端的读写请求,并管理文件系统的命名空间
EditLog确认机制:
- 当客户端发起写请求时,Active NameNode会记录相关的操作到EditLog中。为了确保EditLog的可靠性,HDFS采用了多数JournalNodes确认的机制。例如在3个JournalNodes的集群中,至少需要2个JournalNodes成功写入EditLog,才能认为该操作被成功记录
数据直接写入DN:
- 客户端在获得Active NameNode的写入许可后,会直接将数据写入DataNode(DN),这种设计避免了NameNode成为数据写入的瓶颈,提高了系统的整体写入性能
元数据同步:
Standby NN实时追踪EditLog:
- Standby NameNode会实时追踪Active NameNode的EditLog,以确保两者之间的元数据保持一致;当Active NameNode记录新的EditLog时,Standby NameNode会从JournalNodes中读取并应用这些日志
定期执行检查点合并:
- 为了减少NameNode重启时的恢复时间,Standby NameNode会定期执行检查点合并操作。它将EditLog中的操作应用到FsImage(命名空间镜像)中,生成新的FsImage文件;在NameNode重启时,可以直接加载最新的FsImage文件,而无需重放大量的EditLog
健康监测:
DataNode同时向主备NN发送块报告:
- DataNode会同时向Active和Standby NameNode发送块报告,以告知它们自己存储的数据块信息;即使Active NameNode出现故障,Standby NameNode也能迅速获取到最新的数据块信息
心跳超时触发故障检测:
- NameNode会定期向DataNode发送心跳信号,以检测DataNode的健康状态,如果某个DataNode的心跳信号超时,NameNode会认为该DataNode出现故障,并采取相应的措施(如复制数据块到其他DataNode),同样地ZKFailoverController也会通过Zookeeper来监控Active NameNode的健康状态,一旦检测到故障,就会触发故障转移过程
故障转移:
ZKFC通过ZooKeeper实现分布式协调:
- ZKFailoverController(ZKFC)是基于Zookeeper的故障转移控制器,它负责监控NameNode的健康状态,并在Active NameNode出现故障时触发故障转移过程;ZKFC通过Zookeeper来实现分布式协调,确保故障转移过程的可靠性和一致性
典型切换时间30秒内:
- 在Hadoop 2.0及以后版本中,HDFS的故障转移时间被大大缩短,典型情况下,从Active NameNode出现故障到Standby NameNode接管所有客户端请求的时间可以在30秒内完成(具体时间取决于session.timeout配置),这种快速的故障转移能力确保了HDFS的高可用性和数据可靠性
5 高可用设计的优势
- 提高系统可用性:通过配置Active和Standby NameNode,确保在NameNode出现故障时系统能够迅速恢复
- 增强数据可靠性:DataNode的数据冗余和容错机制确保即使某个DataNode出现故障,也不会影响整个文件系统的正常运行
- 简化运维管理:高可用设计减少了单点故障的风险,降低了运维管理的复杂度
6 总结
Hadoop 2.0及以后版本的HDFS通过引入NameNode的高可用性机制,显著提高了系统的可用性和数据可靠性。Active与Standby NameNode、JournalNode、ZKFailoverController以及DataNode等核心组件共同构成了HDFS的高可用架构,确保了HDFS在节点故障、网络分区等异常情况下仍能保持数据的可靠性和系统的可用性。这一设计使得HDFS成为大规模数据存储和处理的首选平台之一。
相关文章:
【HDFS入门】Hadoop 2.0+ HDFS核心架构深度解析:高可用设计揭秘
目录 1 HDFS核心架构概述 2 高可用设计背景 3HDFS核心组件 3.1 Active与Standby NameNode 3.2 JournalNode 3.3 ZKFailoverController(ZKFC) 3.4 DataNode 4 高可用设计的工作流程 写入阶段: 元数据同步: 健康监测&…...
RabbitMQ安装
RabbitMQ安装 Ubuntu环境安装 一、安装Erlang #更新软件包 sudo apt-get update #安装erlang sudo apt-get install erlang 二、安装RabbitMQ #更新软件包 sudo apt-get update #安装rabbitmq sudo apt-get install rabbitmq-server #确认安装结果 systemctl status rabbitmq-…...
2022 CCPC Henan Provincial Collegiate Programming Contest K 复合函数
补题链接 看网上题解很少,来写一份,这题个人觉得思维难度不是特别大,难度主要在于代码准确度,首先将问题转化成 x x x 向 f ( x ) f(x) f(x) 连边,这一步转化应该是比较容易想到的,通过手模样例,会有类…...
Linux : 多线程互斥
目录 一 前言 二 线程互斥 三 Mutex互斥量 1. 定义一个锁(造锁) 2. 初始化锁 3. 上锁 4. 解锁 5. 摧毁锁 四 锁的使用 五 锁的宏初始化 六 锁的原理 1.如何看待锁? 2. 如何理解加锁和解锁的本质 七 c封装互斥锁 八 可重入…...
【数学建模】佳点集(Good Point Set)在智能优化算法中的应用与实现
佳点集(Good Point Set)在智能优化算法中的应用与实现 文章目录 佳点集(Good Point Set)在智能优化算法中的应用与实现1. 佳点集概述2. 佳点集的数学原理3. 佳点集在智能优化算法中的应用3.1 改进麻雀搜索算法(SSA)3.2 改进量子粒子群优化算法(QPSO)3.3 自适应分组差分变异狼群…...
redis linux 安装简单教程(redis 3.0.4)
redis.3.0.4.tar.gz 下载地址 链接: https://pan.baidu.com/s/19VAcrA6XS4mIesH6e5Jftg 提取码: bn2r (1)以安装目录:/home/zsl (2)将redis-3.0.4.tar.gz 拷贝到/home/zsl (3)tar xzvf redis-3.…...
探秘 Python 网络编程:构建简单聊天服务器
在计算机网络的世界里,网络编程是实现不同设备之间通信的关键技术。Python 凭借其简洁的语法和强大的库支持,在网络编程领域有着广泛的应用。无论是构建简单的聊天服务器,还是开发复杂的网络应用,Python 都能轻松胜任。 1 理论基础…...
debian转移根目录
如何在 BIOS 启动的 Debian 虚拟机中将根目录转移到 /dev/sda 设备上?本文将从硬盘分区,根目录复制,重新启动等几个方面介绍。 硬盘分区 1.检查磁盘:查看当前的磁盘和分区情况,确认新添加的磁盘设备名称。 parted -…...
vue3 element-plus表单验证
第一准备一个表单 form.vue <template><div><el-form><el-form-item label"姓名" prop"name"><el-input v-model"data.name" placeholder"请输入姓名"></el-input></el-form-item></e…...
Deepseek IP-Adapter与InstantID的区别
IP-Adapter与InstantID均为基于扩散模型的图像生成控制技术,但两者的算法设计目标、核心模块及应用场景存在显著差异。以下从技术架构、特征处理、条件控制等维度对比两者的差异: 1. 核心设计目标 IP-Adapter 由腾讯团队提出(2023年8月&…...
OSI 七层模型与 TCP/IP 协议栈详解
OSI 七层模型与 TCP/IP 协议栈详解 网络协议模型是理解计算机网络和通信的基础,而 OSI 七层模型和 TCP/IP 协议栈是最常见的两种网络通信模型。虽然这两者有些不同,但它们都提供了一种分层的结构,帮助我们理解和设计网络通信。本文将详细介绍…...
synchronize 或者lock 锁常见的使用场景
在 Java 多线程编程中,synchronized 和 Lock(如 ReentrantLock)是两种常见的线程同步机制。以下是它们的核心区别和典型使用场景,结合代码示例说明: 一、synchronized 的常见场景 1. 简单的临界区保护 public class …...
Redis之缓存更新策略
缓存更新策略 文章目录 缓存更新策略一、策略对比二、常见的缓存更新策略三、如何选择策略四、实际应用示例五、使用 Cache-Aside TTL 的方式,实现缓存商铺信息详情1.引入StringRedisTemplate2.将查询商铺信息加入缓存3.更新商铺信息时移除缓存总结 六、注意事项 一…...
【操作系统学习篇-Linux】进程
1. 什么是进程 课本概念:程序的一个执行实例,正在执行的程序等 内核观点:担当分配系统资源(CPU时间,内存)的实体。 如果你就看这个来理解进程,那么恭喜你,作为初学者,你…...
Docker 前瞻
一、namespace 指令 1.1 dd 命令 dd 命令用于读取、转换并输出数据。 dd 命令可从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。 语法 dd option if 文件名:输入文件名,默认为标准输入…...
【maxENT】最大熵模型(Maximum Entropy Model)R语言实现
文章目录 一、相关package介绍1.1 dismo 包1.2 raster包1.3 常见问题与解决 二、代码示例 🟢🟠先看:【maxENT】最大熵模型(Maximum Entropy Model)介绍与使用(maxENT软件) ASCII文件太大&#…...
高负载WEB服务器--Tomcat
高负载WEB服务器–Tomcat Tomcat介绍 Tomcat 是一个开源的轻量级应用服务器,在 Java Web 应用开发中被广泛使用。 发展历程:Tomcat 最初由 Sun Microsystems 开发,后来成为 Apache 软件基金会的一个项目。它的发展与 Java 技术的发展密切相…...
分页查询列表每页1000条的优化
项目中有一个客户列表,要求每页显示1000条,并且字段很多,接口返回大概要10秒钟,进行优化. 原本逻辑:使用mybatisplus构建查询条件,分页查询客户表,查出数据库DO对象,然后for循环转化成回显的VO对象.在转化的过程中出现了查库代码,导致当每页条数1000时,每一个客户转化都需要查询…...
深入浅出一下Python面向对象编程的核心概念与实践应用
本篇技术博文摘要 🌟 本文系统讲解了Python面向对象编程的核心概念与实践应用。通过电商系统用户订单模拟、动态权限账户系统等案例,深入剖析了类与对象、属性方法、实例方法等基础要素。重点解析了__init__构造方法、__str__对象描述、__lt__比较运算符…...
2025阿里云AI 应用-AI Agent 开发新范式-MCP最佳实践-78页.pptx
2025阿里云AI 应用-AI Agent 开发新范式-MCP最佳实践,包含以下内容: 1、AI 应用架构新范式 2、云原生API网关介绍 3、云原生API网关底座核心优势 4、流量网关最佳实践 5、AI 网关代理 LLM 最佳实践 6、MCP网关最佳实践 7、MSE Nacos MCP Server 注册中心…...
github进阶使用教程
目录索引 一、基本内容 repository fork star codespaces issue 在一个仓库创建话题讨论,可以由仓库主人选择开始和结束话题的讨论 pull request(也称 pr) 协同其他仓库开发,请求仓库主人拉取自己的代码合并到仓库的主分支&…...
【C++】 —— 笔试刷题day_16
刷题_day16,继续加油啊 一、字符串替换 题目解析 这道题是一道简单的字符题目,题目给我们一个字符串A,和n表示A字符串的长度,再给出一个字符数组arg,m表示arg中是数据个数。 然我们在字符串A中找到%s然后替换成arg中的…...
5.3 GitHub订阅系统核心架构解密:高并发设计与SQLite优化实战
GitHub Sentinel 分析报告功能实现:订阅管理核心逻辑解析 关键词:GitHub API 订阅管理, SQLite 数据库设计, RESTful API 开发, 原子操作封装, 异常处理机制 1. 订阅管理功能架构设计 订阅管理模块采用分层架构设计,通过清晰的接口隔离实现高内聚低耦合: #mermaid-svg-bW…...
P5738 【深基7.例4】歌唱比赛
P5738 【深基7.例4】歌唱比赛 题目描述 n ( n ≤ 100 ) n(n\le 100) n(n≤100) 名同学参加歌唱比赛,并接受 m ( m ≤ 20 ) m(m\le 20) m(m≤20) 名评委的评分,评分范围是 0 0 0 到 10 10 10 分。这名同学的得分就是这些评委给分中去掉一个最高分,去掉一个最低分,剩下 …...
从三次方程到复平面:复数概念的奇妙演进(三)
注:本文为 “复数 | 历史 / 演进” 相关文章。 因 csdn 篇幅限制分篇连载,此为第三篇。 生料,不同的文章不同的点。 机翻,未校。 Complex Numbers History: Complex numbers were first introduced by G. Cardano (1501-1576)…...
2025年七星棋牌跨平台完整源码解析(200+地方子游戏+APP+H5+小程序支持,附服务器镜像导入思路)
目前市面上成熟的棋牌游戏源码很多,但能做到平台全覆盖、地方玩法丰富、交付方式标准化的系统却不多。今天这套七星棋牌2023完整源码具备安卓/iOS/H5/微信小程序端四端互通能力,附带200多款地方子游戏,还配备了后台管理与自动热更系统&#x…...
从三次方程到复平面:复数概念的奇妙演进(四)
注:本文为 “复数 | 历史 / 演进” 相关文章合辑。 因 csdn 篇幅限制分篇连载,此为第四篇。 生料,不同的文章不同的点。 机翻,未校。 Complex number and its discovery history 复数及其发现历史 Wenhao Chen, †, Dazheng …...
UE5角色状态机中跳跃落地移动衔接问题
UE5系列文章目录 文章目录 UE5系列文章目录前言一、状态机设置二、主要蓝图 前言 先说说遇到的问题,在我按空格键跳跃落地以后,角色落地再按WSAD键移动就出现了画面中角色抽搐的情况 一、状态机设置 在Unreal Engine 5中创建角色时,处理跳…...
25软考中级*高项网课+历年真题+笔记+电子书+刷题【计算机软考】
两个月逆袭25年软考程序员?这份高效备考指南请收好 25软考中级*高项网课download 📂 软考中级科目备考资料介绍 ✅ 【01】2025 年软件测评师 聚焦软件测试全流程,涵盖 需求分析、测试设计、用例编写、缺陷管理 等核心技能。 📘 备…...
C++STL——容器-list(含模拟实现,即底层原理)(含迭代器失效问题)(所有你不理解的问题,这里都有解答,最详细)
目录 1.迭代器的分类 2.list的使用 2.1 list的构造 2.2 list iterator 2.3 list capacity 2.4 list element access 编辑 2.5 list modifiers 编辑2.5.1 list插入和删除 2.5.2 insert /erase 2.5.3 resize/swap/clear 编辑 2.6 list的一些其他接口…...
Linux系统编程之虚拟内存
概述 计算机内存是临时存储数据的地方,它比硬盘快得多,但容量有限。现代操作系统通过虚拟内存技术,使得每个进程都感觉自己独占整个地址空间,这不仅提高了安全性,也简化了内存管理。 物理内存:实际安装在计…...
笔试专题(八)
文章目录 平方数(数学)题解代码 DNA序列(固定长度的滑动窗口)题解代码 压缩字符串 (双指针 模拟)题解代码 chika和蜜柑 (top k问题 排序 pair)题解代码 平方数(数学&a…...
Linux:基础IO---软硬链接动静态库前置知识
序:上一个章节,我从硬件出发,由宏观到微观,由具体到抽象,围绕研究对象未被打开的文件来讲解,操作系统是如何对一个大块的磁盘进行管理的,从而引进inode的概念,加深了对文件的理解&am…...
Arm CPU安全通告:基于TrustZone的Cortex-M系统面临多重故障注入攻击
安全之安全(security)博客目录导读 目录 一、概述 二、致谢 三、参考文献Black Hat USA 2022 | Briefings Schedule 四、版本历史 一、概述 Arm注意到BlackHat 2022大会官网发布的演讲摘要《糟糕..!我又一次故障注入成功了!——如何突…...
测试第二课-------自动化测试
作者前言 🎂 ✨✨✨✨✨✨🍧🍧🍧🍧🍧🍧🍧🎂 🎂 作者介绍: 🎂🎂 🎂 🎉🎉🎉…...
深入探索Linux开发工具:Vim与Yum
目录 引言 Vim:强大的文本编辑利器 Vim的基本概念 Vim的基本操作 Vim正常模式命令集 Vim末行模式命令集 Vim的配置 使用插件拓展Vim功能 Yum:便捷的Linux软件包管理器 注意事项 结语 引言 在Linux的世界里,高效的开发工具是提升生…...
玩转ChatGPT:使用深入研究功能梳理思路
一、写在前面 前我尝试用ChatGPT的Deep Research(深入研究)功能来梳理文献,效果相当不错。最近,谷歌的Gemini 2.5 Pro也推出了类似功能,从网络测评来看,其表现与ChatGPT不相上下,而且还可以免费…...
UE5蓝图实现打开和关闭界面、退出
Button_Back 和Button_Exit是创建的两个按钮事件。 1.Create Widget 创建界面(打开界面) 2.Add to Viewport 添加到视图 3.remove form Parent,Target:self 从父节点移除当前界面(关闭界面) 4.Quit Game 退…...
实现vlan间的通信
这是第一种方法(更推荐第三种) PC1划分为vlan10,PC2划分为vlan20,实现PC1和PC2之间通信很简单,我们只需将网关都设置好,将交换机的0/0/1、0/0/3设置成vlan10,0/0/2、0/0/4设置成vlan20…...
Linux上位机开发实践(opencv算法硬件加速)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 图像处理里面,opencv基本是一个标准模块。但是由于图像处理的特点,如果所有的算法都是cpu来做的话,效率会很低。…...
智慧社区数据可视化中枢平台——Axure全场景交互式大屏解决方案
在数字化治理的时代浪潮中,社区管理正面临数据碎片化、响应滞后、决策盲区等核心挑战。如何将分散的安防、环境、能源、民生服务等数据整合为可操作的智慧洞察?如何让冰冷的数字转化为社区管理者手中的决策利器?Axure智慧社区可视化大屏原型模…...
动态路由, RIP路由协议,RIPv1,RIPv2
动态路由 1、回顾 路由:从源主机到目标主机的过程 源主机发送数据给目标主机,源主机会查看自身的路由信息 如果目标主机是自己同网段,源主机查看的是直连路由 如果目标主机和自己不同网段,源主机查看的是静态路由、动态路由、默…...
C++:STL的常用容器(string/vector/deque/stack/queue/list/set/multiset/map/multimap)
程序员Amin 🙈作者简介:练习时长两年半,全栈up主 🙉个人主页:程序员Amin 🙊 P S : 点赞是免费的,却可以让写博客的作者开心好久好久😎 📚系列专栏:Java全…...
【unity游戏开发入门到精通——UGUI】Canvas画布组件
注意:考虑到UGUI的内容比较多,我将UGUI的内容分开,并全部整合放在【unity游戏开发——UGUI】专栏里,感兴趣的小伙伴可以前往逐一查看学习。 文章目录 一、Canvas画布组件1、Canvas组件用来干啥2、场景中可以有多个Canvas对象 二、…...
MyBatis 中 Mapper 传递参数的多种方法
# MyBatis Mapper 传递参数的多种方法及其优势 在使用 MyBatis 进行数据库操作时,Mapper 接口的参数传递是一个非常基础但又十分重要的部分。不同的参数传递方式适用于不同的场景,合理选择可以大大提高代码的可读性和维护性。本文将详细介绍几种常见的 …...
学习海康VisionMaster之平行线计算
一:进一步学习了 今天学习下VisionMaster中的平行线计算,这个是拟合直线的扩展应用,针对需要计算平行线的应用场合,可以方便的生成对应的另外一条平行线 二:开始学习 1:什么是平行线计算? 如果…...
MyBatis Mapper 传递参数的多种方法
1. 使用顺序传参法(不推荐) 方法描述 直接通过位置来引用参数,例如 ( arg0 arg1 … ) 或者 (param1, param2…)。 示例代码 List<User> selectUsers(String name, Integer age); <...
探索 Vue 3 响应式系统:原理与实践
Vue 3 响应式系统凭借 Proxy 的优势,提供更强大、灵活的响应式方案。理解其原理与 API,能写出更高效、可维护的 Vue 应用。不断探索其细节,是进阶 Vue 开发的关键。 探索 Vue 3 响应式系统:原理与实践 Vue 3 的响应式系统是其核…...
【LeetCode 热题100】二叉树构造题精讲:前序 + 中序建树 有序数组构造 BST(力扣105 / 108)(Go语言版)
🌱 二叉树构造题精讲:前序 中序建树 & 有序数组构造 BST 本文围绕二叉树的两类构造类题目展开解析: 从前序与中序遍历序列构造二叉树 将有序数组转换为二叉搜索树 我们将从「已知遍历构造树」和「平衡构造 BST」两个角度,拆…...
开源语音文本自动对齐模型:Llama-OuteTTS-1.0-1B
OuteTTS 1.0 介绍与使用指南 1. 重要采样考虑 重复惩罚机制:OuteTTS 1.0 要求对最近的64个token应用重复惩罚,而不是对整个上下文窗口。对整个上下文窗口进行惩罚会导致输出质量下降。推荐工具:llama.cpp 和 EXL2 提供了可靠的输出质量&…...