hdfs高可用文件系统架构

news2024/10/7 8:20:22

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 的状态变化,包括节点的加入、退出以及状态的变化。这对于集群的实时健康状态监控和故障诊断至关重要。

     

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

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

相关文章

GD32 MCU的选项字节是什么?

GD32 MCU的选项字节是什么,有什么功能呢?选项字节被误篡改如何回复? 读者朋友们是否会有以上的疑问,首先我们先为大家介绍选项字节是什么以及选项字节的功能。 以GD32F30X系列MCU为例,其选项字节说明如下表所示&…

Acrobat Pro DC 2021:Mac/Win平台上全面高效的PDF编辑器

Acrobat Pro DC 2021是一款在Mac和Windows平台上广受欢迎的PDF编辑器,它凭借其全面的功能和高效的性能,为用户提供了卓越的PDF处理体验。 一、编辑功能全面强大 Acrobat Pro DC 2021允许用户轻松创建、编辑、合并、转换、签署和分享PDF文件。无论是对P…

慧天卓特:6月18日FYDI旱情监测分析

旱情监测 - 6月18日 重点干旱区域FYDI监测图 黄淮海流域和新疆内蒙甘肃干旱区域分布地图如下所示: 图1 重点旱情区域FYDI分布图 (上:黄淮海流域;下:新疆内蒙甘肃地区) 重点省市干旱面积占比统计 重点省…

upload-labs实验过程中遇到的问题

第6题问题:500异常码 发现500异常码,这个应该是apache版本问题,可更换其他版本,或者更换为nginx 12题问题:上传出错 出现上传错误,大概率是php版本问题,需要下载php5.2.17版本的php或者更换其他…

让全栈AI的旗帜猎猎作响:“逆行者”华为云

如果有人问,AI大模型行业,最近的风向是什么?相信很多人都会说,是“内卷”。 近段时间,“降价”成了大模型的第一关键词。各大云服务商争相加入AI降价潮,甚至有公司模型降价达到了97%的惊人幅度。加上厂商抢…

无限滚动表格

纵向无限滚动 单元格内部横向滚动 <!--* Description: 横向、纵向滚动表格* Author: liyanfeng liyanfenghopewind.com* Date: 2024-06-15 16:06:57* LastEditors: liyanfeng liyanfenghopewind.com* LastEditTime: 2024-06-20 17:15:37* FilePath: \plus-ui\src\componen…

为什么要选择华为 HCIE-Security 课程?

2020 年我国网络安全市场规模达到 680 亿元&#xff0c;同比增长 25%。随着对网络安全的愈加重视及布局&#xff0c;市场规模将持续扩大。 近年来&#xff0c;随着“云大物工移智”等新兴技术的快速发展和普及应用&#xff0c;数字化已经融入社会经济生活的方方面面&#xff0c…

数据结构与算法笔记:高级篇 - 拓扑排序:如何确定代码源文件的编译依赖关系?

概述 从本章开始&#xff0c;就开始进入高级篇。相对基础篇&#xff0c;高级篇涉及的知识比较零散&#xff0c;不是太系统。所以&#xff0c;我会围绕一个实际软件开发的问题&#xff0c;在阐述具体解决方法的过程中&#xff0c;将涉及的知识点给你详细讲解出来。 所以&#…

人工智能在空间转录组学领域的最新研究进展|顶刊速递·24-06-22

小罗碎碎念 本期推文的主题&#xff1a;人工智能在空间转录组学领域的最新进展 提到空间转录组学就不可避免会与单细胞测序、免疫治疗以及肿瘤微环境扯上关系&#xff0c;所以这也是当下的热点之一。 我个人认为这一部分门槛相对于影像组学和病理组学较高&#xff0c;需要具备…

二维码美化,修改二维码颜色样式,添加logo,文字描述

在如今的社会&#xff0c;二维码已成为我们日常生活中不可或缺的一部分&#xff0c;无论是支付、访问网站、社交媒体互动&#xff0c;还是分享信息&#xff0c;二维码都扮演着重要角色。然而&#xff0c;标准的黑白二维码有时可能显得过于单调&#xff0c;缺乏吸引力。为了提升…

心明眼亮 洞悉万物

如何洞悉事物的本质呢&#xff1f; 阳明先生&#xff1a;世间之事&#xff0c;纷繁复杂&#xff0c;不可能一一研究得过来。 圣人只需要把内心的明镜擦亮&#xff0c;而无需担心外部的事事物物在镜子中如何映照。 —— 外界事物是无穷无尽的&#xff0c;永远探究不完&#xf…

jsp-curd+分页倒导航案例

效果图 <!DOCTYPE html> <% page language"java" contentType"text/html; charsetUTF-8" pageEncoding"UTF-8"%> <html lang"en"> <head><meta charset"UTF-8"><title>学生管理</…

前后端交互的弯弯绕绕

前后端交互&#xff1a; &#x1f197;&#xff0c;收拾一下心情让我们来聊一聊AJax吧&#xff0c;随着前端的飞速发展&#xff0c;前后的交互也发生了天翻地覆的变化&#xff1a; 前后端交互的方式有很多&#xff1a; AJAX、表单提交、WebSocket、RESTful API、... 这对新入…

基于SpringBoot+大数据城市景观画像可视化设计和实现

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;…

Linux中部署MySQL环境(本地安装)

进入官网&#xff1a;http://www.mysql.com 选择社区版本得到MySQL 选择对应的版本和系统进行安装 用wget进行软件包下载 wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.32-1.el9.x86_64.rpm-bundle.tar解压该软件包 tar -xf mysql-8.0.32-1.el9.x86_64.rpm-bu…

【Linux基础】SSH登录

SSH简介 安全外壳协议&#xff08;Secure Shell Protocol&#xff0c;简称SSH&#xff09;是一种加密的网络传输协议&#xff0c;可在不安全的网络中为网络服务提供安全的传输环境。 SSH通过在网络中建立安全隧道来实现SSH客户端与服务器之间的连接。 SSH最常见的用途是远程登…

C语言 | Leetcode C语言题解之第166题分数到小数

题目&#xff1a; 题解&#xff1a; struct HashMapNode {int key;int val;UT_hash_handle hh; };struct HashMapNode* hashMap NULL;int hashMapAdd(int key, int val) {struct HashMapNode* node;HASH_FIND_INT(hashMap, &key, node);if(node ! NULL){return node->…

MySQL存储管理(一):删数据

从表中删除数据 从表中删除数据&#xff0c;也即是delete过程。 什么是表空间 表空间可以看做是InnoDB存储引擎逻辑结构的最高层&#xff0c;所有的数据都存放在表空间中。默认情况下&#xff0c;InnoDB存储引擎有一个共享表空间idbdata1&#xff0c;即所有数据都存放在这个表…

力扣SQL50 各赛事的用户注册率 分组计数 双排序字段

Problem: 1633. 各赛事的用户注册率 &#x1f468;‍&#x1f3eb; 参考题解 Code select contest_id, ROUND(COUNT(user_id) * 100 / (select count(*) from users),2) as percentage from register group by contest_id order by percentage desc, contest_id asc

Simulink添加自己的库,并给库添加子库

直接看官网教程&#xff0c;不要看残缺的大道法则 https://ww2.mathworks.cn/help/simulink/ug/adding-libraries-to-the-library-browser.html 文中涉及一个 属性检查器 在这里。