hdfs高可用文件系统架构
1、整体架构

2、角色简介
2.1、namenode
NameNode 是 HDFS 集群中的核心组件,负责管理文件系统的元数据、处理客户端请求、管理数据块、确保数据完整性和高可用性。由于其重要性,NameNode 的性能和可靠性直接影响整个 HDFS 集群的性能和可靠性。在生产环境中,通常会采取多种措施来保障 NameNode 的高可用性和稳定性。具体功能如下:
1)NameNode 主要负责管理 HDFS 的元数据(metadata),包括文件系统的目录结构、文件名、文件大小、权限等。它维护了整个文件系统的命名空间,并记录文件到块(block)的映射关系,以及每个块所在的 DataNode 信息。
2)当客户端请求访问 HDFS 中的文件时,NameNode 会处理这些请求并提供相关的元数据。例如,当客户端想要读取文件时,NameNode 会提供文件所在的块和相应 DataNode 的位置信息。
3)块分配:当文件写入 HDFS 时,NameNode 会为文件分配新的块,并选择合适的 DataNode 来存储这些块。块副本管理:HDFS 默认会为每个块存储多个副本(通常是 3 个),以提高数据的可靠性。NameNode 负责确保每个块有足够数量的副本,如果某个块的副本丢失,NameNode 会启动块副本的重新复制。
4)NameNode 维护着每个块的校验和(checksum),以确保数据的完整性。当客户端读取数据时,会进行校验以检测和修复数据损坏。
5)NameNode 负责监控集群中 DataNode 的状态,并进行故障检测和恢复。如果检测到某个 DataNode 失效,NameNode 会重新分配块副本,确保数据的可靠性和可用性。
6)NameNode 负责管理 HDFS 的快照和检查点功能。快照允许用户在特定时间点捕获文件系统的状态,提供数据保护和恢复能力。检查点(Checkpoint)是指 NameNode 将其内存中的元数据快照写入磁盘,以减少系统启动时的恢复时间。
2.2、datanode
DataNode 是 HDFS 集群中执行数据存储和管理的工作节点,负责实际的数据块存储、读取、写入、校验和复制。它与 NameNode 协作,保证数据的可靠性、可用性和一致性。在生产环境中,通常会有多个 DataNode 组成 HDFS 集群,以提供分布式存储和高容错能力。
1)DataNode 是 HDFS 集群中存储实际数据块的节点。文件在 HDFS 上被拆分成若干个数据块(通常每个块 128MB 或 256MB),这些块被分散存储在多个 DataNode 上。
2)DataNode 负责管理其本地磁盘上的数据块。它会定期向 NameNode 报告其存储的所有数据块的列表,以便 NameNode 可以更新其元数据。
3)为了提供高可用性和容错能力,HDFS 会为每个数据块存储多个副本(通常是 3 个)。这些副本分布在不同的 DataNode 上。DataNode 负责存储这些副本,并在必要时进行复制。
4)当客户端请求读取或写入数据时,DataNode 会直接与客户端进行交互:读取:客户端从 DataNode 读取所需的数据块。写入:当客户端写入新数据时,DataNode 接受数据块并存储在其本地磁盘上,同时会根据 NameNode 的指示,将数据块的副本复制到其他 DataNode。
5)DataNode 负责校验和(checksum)的计算和验证,以确保数据块在存储和传输过程中没有损坏。每个数据块在存储时会计算其校验和,DataNode 定期对存储的数据块进行校验以检测和修复数据损坏。
6)DataNode 会定期向 NameNode 发送心跳信号,报告其健康状态和可用存储容量。如果 NameNode 没有收到某个 DataNode 的心跳信号,就会认为该 DataNode 已失效,并开始数据恢复流程。
7)当某个 DataNode 失效或某个数据块副本损坏时,NameNode 会指示其他 DataNode 进行数据块的复制和重新平衡,以确保数据的高可用性和均衡分布。DataNode 负责执行这些复制和重新平衡任务。
8)当客户端或 NameNode 指示删除某个文件时,DataNode 会删除其本地磁盘上存储的相应数据块,并通知 NameNode 更新其元数据。
2.3、journalnode
JournalNode在高可用(High Availability,HA)配置中起着关键作用。具体而言,JournalNode的主要功能是帮助管理和协调NameNode的日志写入,以确保系统在主NameNode(Active NameNode)发生故障时,备用NameNode(Standby NameNode)能够无缝接管。以下是JournalNode的详细作用
1)日志写入:在HDFS HA配置中,所有的NameNode操作(如创建文件、删除文件等)都会生成编辑日志(Edit Logs)。这些日志记录了文件系统的元数据变化。
同步日志:当Active NameNode执行任何文件系统操作时,它会将相应的编辑日志同步写入到所有JournalNode中。这些日志记录了元数据的变更操作,JournalNode负责持久化这些变更日志。
2)Quorum机制:JournalNode集群通常由奇数个节点组成(如3个或5个),以便通过Quorum机制(多数投票机制)保证日志的可靠写入和一致性。在写入编辑日志时,Active NameNode必须等待超过半数的JournalNode成功写入日志,这样即使有少数节点发生故障,系统依然能够保证数据的一致性。
3)日志同步:Standby NameNode会不断地从JournalNode拉取最新的编辑日志,并将这些日志应用到自身的元数据中,以保持与Active NameNode的同步。这一机制确保Standby NameNode始终拥有最新的文件系统状态。故障切换:当Active NameNode发生故障时,Standby NameNode可以通过从JournalNode获取的最新编辑日志迅速接管,从而实现无缝故障切换。JournalNode确保了Standby NameNode接管时的元数据是最新的,避免数据丢失或不一致。
4)日志持久化:JournalNode将接收到的编辑日志持久化到本地存储中,这些日志是NameNode操作的序列化记录。即使JournalNode发生重启或故障,只要大多数JournalNode节点仍然可用,系统的编辑日志依然是安全的。
2.4、failovercontroller
通过自动和手动的故障切换、仲裁机制和健康监控,它确保了 NameNode 的高可用性和可靠性,保证在 Active NameNode 发生故障时,Standby NameNode 能够自动接管,保持 HDFS 集群的高可用性。以下是 FailoverController 的详细作用:
1)FailoverController 通过定期检查 Active NameNode 的健康状况,来检测其是否处于正常工作状态。如果检测到 Active NameNode 出现故障,FailoverController 会触发故障切换流程。
2)当 Active NameNode 出现故障时,FailoverController 负责将 Standby NameNode 切换为 Active 状态。这一过程包括:
- 确保 Standby NameNode 拥有最新的元数据状态。
- 更新元数据锁,以防止同时有多个 Active NameNode。
- 向集群中的 DataNode 和其他客户端通知新的 Active NameNode。
3)在一个高可用的 HDFS 集群中,通常会有一个 Quorum Journal Manager (QJM) 或者 Zookeeper 作为仲裁机制,以确保只有一个 Active NameNode。FailoverController 使用这种仲裁机制来避免脑裂 (Split-Brain) 问题,即确保不会同时有两个 Active NameNode 存在。
4)FailoverController 也支持手动切换操作。管理员可以通过命令手动触发 NameNode 之间的切换,通常在维护或升级过程中使用
5)FailoverController 定期对 NameNode 的健康状况进行监控,确保 Active NameNode 的可用
2.5、zookeeper
在 HDFS 高可用架构中,ZooKeeper(ZK)扮演着重要的角色,主要用于以下几个方面:
1)ZooKeeper 作为分布式协调服务,帮助管理 HDFS 集群中的各个组件的状态和配置信息。在 HDFS 高可用部署中,ZooKeeper 负责:
协调故障恢复:监控 NameNode 和 ZooKeeper Failover Controller (ZKFC) 的状态,确保在发生故障时能够进行快速的故障转移和恢复。
管理元数据:存储和管理 NameNode 的元数据信息,包括活动 NameNode 和备用 Standby NameNode 的信息,确保只有一个 NameNode 处于活动状态。
2)在 HDFS 的高可用架构中,ZooKeeper 负责管理 NameNode 的选举过程。具体来说,它提供了以下功能:主节点选举:通过 ZooKeeper 的临时顺序节点和 Watcher 机制,协助 NameNode 在故障或启动时进行主节点(Active NameNode)的选举。
避免脑裂:使用 ZooKeeper 的选举机制避免出现多个活动的 NameNode,从而防止数据一致性和服务可用性问题。
3)ZooKeeper 用于在 NameNode 之间同步状态和元数据信息。例如:元数据持久化:存储 NameNode 的持久化数据,如命名空间信息、数据块位置等。领导者选举:在故障切换时,确保新选举出的主节点能够迅速恢复到活动状态,继续提供服务。
4)ZooKeeper 也用于管理和存储 HDFS 集群的配置信息。这些配置信息可以包括 HDFS 的命名空间配置、HA 配置、以及其他服务相关的配置,确保集群中所有节点都能获取到一致的配置信息。
5)通过 ZooKeeper 的 Watcher 机制,能够及时监控和检测 NameNode 和 ZKFC 的状态变化,包括节点的加入、退出以及状态的变化。这对于集群的实时健康状态监控和故障诊断至关重要。
相关文章:
hdfs高可用文件系统架构
1、整体架构 2、角色简介 2.1、namenode NameNode 是 HDFS 集群中的核心组件,负责管理文件系统的元数据、处理客户端请求、管理数据块、确保数据完整性和高可用性。由于其重要性,NameNode 的性能和可靠性直接影响整个 HDFS 集群的性能和可靠性。在生产…...
从官方源码精简出第1个FreeRTOS程序
一、下载官方源码 1、打开百度搜索freerots,找到官网:FreeRTOS官网 2、将源码解压到没有中文目录的路径下 二、删减目录 1、删除FreeRTOS-Plus和tools 2、删除FreeRTOS/Demo下除CORTEX_STM32F103_Keil外的所有文件 3、删除FreeRTOS\Source\portable下除RVDS和MemM…...
谷歌上搞下来的,无需付费,可以收藏!
在数字化时代,我们越来越依赖于智能设备来获取信息和知识。中国智谋App正是这样一款应用,它将中国古代的智慧与谋略书籍带入了我们的移动设备,让我们能够随时随地学习和领悟。而且提供文言文的原文和译文。 软件下载方式:谷歌上搞…...
宿主机无法通过ip连接wsl2解决方案
文章目录 原因排查网络模式win11防火墙关闭wsl ubuntu防火墙 如果之前能连接现在连接不上可以参考该方案 原因排查 网络模式win11防火墙(win11新增了Hyper-V防火墙)wsl2 ubuntu防火墙 网络模式 wsl2的默认网络模式是NAT,建议修改为镜像模式。在C:\Users\<User…...
Ruby编程语言学习
学习Ruby编程语言,你可以按照以下步骤进行: ### 1. 基础知识入门 #### 安装Ruby - 访问Ruby官网(https://www.ruby-lang.org/)下载适合你操作系统的版本。 - 对于Linux用户,可以使用包管理器安装。 #### 学习资源 -…...
Redis实战—基于setnx的分布式锁与Redisson
本博客为个人学习笔记,学习网站与详细见:黑马程序员Redis入门到实战 P56 - P63 目录 分布式锁介绍 基于SETNX的分布式锁 SETNX锁代码实现 修改业务代码 SETNX锁误删问题 SETNX锁原子性问题 Lua脚本 编写脚本 代码优化 总结 Redisson 前言…...
ARM功耗管理框架之LPI
安全之安全(security)博客目录导读 思考:功耗管理框架?SCP?PPU?LPI?之间的关系?如何配合? 目录 一、功耗管理框架中的LPI 二、LPI分类 三、Q-Channel和P-Channel对比 四、Q-Channel和P-Ch…...
Unity太空避障Demo总结
太空避障:主要是实现飞机躲避子弹 面板基类、音乐类、排行榜类、json等等都和上一篇Unity坦克迷宫Demo总结一样,太空避障主要是对四元数的练习和使用 1.选择飞机面板 (1)通过左右按钮对显示的模型进行切换 (2ÿ…...
SpringSecurity-重写默认配置
重写UserDetailService组件 1.注入Bean的方式 /*** author: coffee* date: 2024/6/22 21:22* description: 重写springsecurity默认组件:注入Bean的方式*/Configuration public class ProjectConfig {/*** 重写userDetailsService组件*/Beanpublic UserDetailsSer…...
C# 判断值是否在枚举里
你还在代码里面通篇通过数字的定义类型。比如type为1 表示xx,type为2 表示yy吗?然后程序里面通过数字1和2来判断吗?比如下面类似的代码: if(type1){ //.... } else if(type2){ //... } else if(type3){ //... } 老鸟们一般都会用枚举来定义…...
Interview preparation--elasticSearch倒排索引原理
搜索引擎应该具备哪些要求 查询速度快 优秀的索引结构设计高效率的压缩算法快速的编码和解码速度 结果准确 ElasiticSearch 中7.0 版本之后默认使用BM25 评分算法ElasticSearch 中 7.0 版本之前使用 TP-IDF算法 倒排索引原理 当我们有如下列表数据信息,并且系统…...
银河麒麟高级服务器操作系统V10SP2(X86)配置bond0的mac地址为指定子网卡的mac地址
银河麒麟高级服务器操作系统V10SP2(X86)配置bond0的mac地址为指定子网卡的mac地址 一 系统环境二 删除和备份原有配置2.1 down掉bond02.2 备份之前的bond配置到/root/bak2.3 删除bond配置(网卡文件根据实际情况变化) 三 新建bond0…...
python中不同维度的Tensor向量为何可以直接相加——广播机制
文章目录 广播机制示例解释广播机制如何工作代码示例输出解释广播机制的本质 在矩阵加法中,如果两个张量的形状不同,但其中一个张量的形状可以通过广播机制扩展到与另一个张量的形状相同,则可以进行加法操作。广播机制在深度学习框架…...
38.MessageToMessageCodec线程安全可被共享Handler
handler被注解@Sharable修饰的。 这样的handler,创建一个实例就够了。例如: ByteToMessageCodec的子类不能被@Sharable修饰 如果自定义类是MessageToMessageCodec的子类就是线程共享的,可以被@Sharable修饰的 package com.xkj.protocol;import com.xkj.message.Message; i…...
Linux中的全局环境变量和局部环境变量
Linux中的全局环境变量和局部环境变量 一、全局环境变量二、局部环境变量三、 设置全局环境变量 bash shell用一个叫作环境变量 (environment variable)的特性来存储有关shell会话和工作环境的信息(这也是它们被称作环境变量的原 因ÿ…...
【研究】AI大模型需要什么样的硬件?
关注AI大模型 x 硬件的两条思路 从22年11月OpenAI推出ChatGPT至今,我们看到Chatbot应用的能力不断增强,从最初的文字问答,迅速向具有自主记忆、推理、规划和执行的全自动能力的AI Agent发展。我们认为端侧智能是大模型发展的重要分支。建议投…...
人工智能--自然语言处理NLP概述
欢迎来到 Papicatch的博客 目录 🍉引言 🍈基本概念 🍈核心技术 🍈常用模型和方法 🍈应用领域 🍈挑战和未来发展 🍉案例分析 🍈机器翻译中的BERT模型 🍈情感分析在…...
基于Java微信小程序火锅店点餐系统设计和实现(源码+LW+调试文档+讲解等)
💗博主介绍:✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟感兴趣的可以先收藏起来,还…...
SpringCloud_GateWay服务网关
网关作用 Gateway网关是我们服务的守门神,所有微服务的统一入口。 网关的核心功能特性: 请求路由和负载均衡:一切请求都必须先经过gateway,但网关不处理业务,而是根据某种规则,把请求转发到某个微服务&a…...
使用Dropout大幅优化PyTorch模型,实现图像识别
大家好,在机器学习模型中,如果模型的参数太多,而训练样本又太少,训练出来的模型很容易产生过拟合的现象。在训练神经网络时,过拟合具体表现在模型训练数据损失函数较小,预测准确率较高,但是在测…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15
缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下: struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...
stm32G473的flash模式是单bank还是双bank?
今天突然有人stm32G473的flash模式是单bank还是双bank?由于时间太久,我真忘记了。搜搜发现,还真有人和我一样。见下面的链接:https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...
STM32+rt-thread判断是否联网
一、根据NETDEV_FLAG_INTERNET_UP位判断 static bool is_conncected(void) {struct netdev *dev RT_NULL;dev netdev_get_first_by_flags(NETDEV_FLAG_INTERNET_UP);if (dev RT_NULL){printf("wait netdev internet up...");return false;}else{printf("loc…...
SCAU期末笔记 - 数据分析与数据挖掘题库解析
这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…...
ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...
多模态大语言模型arxiv论文略读(108)
CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文标题:CROME: Cross-Modal Adapters for Efficient Multimodal LLM ➡️ 论文作者:Sayna Ebrahimi, Sercan O. Arik, Tejas Nama, Tomas Pfister ➡️ 研究机构: Google Cloud AI Re…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制
使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下,限制某个 IP 的访问频率是非常重要的,可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案,使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...
站群服务器的应用场景都有哪些?
站群服务器主要是为了多个网站的托管和管理所设计的,可以通过集中管理和高效资源的分配,来支持多个独立的网站同时运行,让每一个网站都可以分配到独立的IP地址,避免出现IP关联的风险,用户还可以通过控制面板进行管理功…...
