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

     

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux 五种IO模型

注:还有一种信号驱动IO,使用较少暂不讨论; 一,区分阻塞、非阻塞和同步、异步 看了很多文章对这两组概念解释和对比,说的太复杂了,其实没必要,两句话就能说清楚。 首先,对于读数据rec…

Day6 —— 电商日志数据分析项目部署流程

项目二 _____(电商日志数据分析项目) 项目部署过程相关依赖运行结果截图统计页面浏览量日志的ETL操作统计各个省份的浏览量 项目部署过程 以IDEA 2023版本为例 步骤一:创建一个空项目,命名为demo_2,并指定语言类型和构…

【2024德国留学】签证被拒的十种原因.....

目录 2024德国留学签证被拒的常见原因 一、德语水平不足 二、录取考试未通过 三、签证申请中的其他问题 一、选择适合自己的签证类型 二、准备面签材料 1. 确认预约邮件 2. 签证申请表 3. 自备3张证件照 4. 护照原件和复印件 5. 动机信 6. 个人简历 7. 学历证及其…

15天搭建ETF量化交易系统Day9—玩大A必学网格策略

搭建过程 每个交易者都应该形成一套自己的交易系统。 很多交易者也清楚知道,搭建自己交易系统的重要性。现实中,从0到1往往是最难跨越的一步。 授人鱼不如授人以渔,为了帮助大家跨出搭建量化系统的第一步,我…

Python+Pytest+Yaml+Request+Allure接口自动化测试框架详解

PythonPytestYamlAllure整体框架目录(源代码请等下篇) 框架详解 common:公共方法包 –get_path.py:获取文件路径方法 –logger_util.py:输出日志方法 –parameters_until.py:传参方式方法封装 –requests_util.py:请求方式方法封…

基于matlab的不同边缘检测算子的边缘检测

1 原理 1.1 边缘检测概述 边缘检测是图像处理和计算机视觉中的基本问题,其目的在于标识数字图像中亮度变化明显的点。这些变化通常反映了图像属性的重要事件和变化,如深度不连续、表面方向不连续、物质属性变化和场景照明变化等。边缘检测在特征提取中…

Dockerfile实战

Dockerfile是用来快速创建自定义镜像的一种文本格式的配置文件,在持续集成和持续部署时,需要使用Dockerfile生成相关应用程序的镜像。 Dockerfile常用命令 FROM:继承基础镜像MAINTAINER:镜像制作作者的信息,已弃用&a…

经典面试题【作用域、闭包、变量提升】,带你深入理解掌握!

前言:哈喽,大家好,我是前端菜鸟的自我修养!今天给大家分享经典面试题【作用域、闭包、变量提升】,并提供具体代码帮助大家深入理解,彻底掌握!原创不易,如果能帮助到带大家&#xff0…

OS复习笔记ch12-1

文件系统 概述 文件是大多数应用程序的核心要素,文件系统是操作系统对用户来说最重要的部分之一。 本章的主要内容见下图: 文件,大家耳熟能详的就是的docx、pdf、jpg、MP4等各种后缀文件,根据任务需要文件又分成了文本、图片、…

java小代码(1)

代码 : 今日总结到此结束,拜拜!

(经验)高考填报志愿,有哪些坑你需要避开?

高考年年考,填报志愿的却年年都是新手.....哪些关于高考填报志愿的坑,依旧还继续坑....是时候做些改变了。过来人写的几点避坑,希望给这届新人做参考。 1、不要什么热门就报什么,因为有些东西别人学得很快,而我慢的像蜗…

springboot+mysql 心理健康咨询管理系统-计算机毕业设计源码031706

摘 要 信息化社会内需要与之针对性的信息获取途径,但是途径的扩展基本上为人们所努力的方向,由于站在的角度存在偏差,人们经常能够获得不同类型信息,这也是技术最为难以攻克的课题。针对心理健康咨询管理系统等问题,对…

【鸿蒙】 模拟器运⾏

【鸿蒙】HUAWEI DevEco Studio安装-CSDN博客 【鸿蒙】创建第⼀个鸿蒙项⽬-CSDN博客 点击 Tools 菜单下的 Device Manager 点击 Install ,安装模拟器 下载模拟器相关的SDK,点击 Finish 选择安装⽬录,点击 New Emulator 选择设备类型&#…

whisper 模型源码解读

whisper官方源码 whisper 模型官方代码:https://github.com/openai/whisper/blob/main/whisper/model.py ;注释如下 import base64 import gzip from dataclasses import dataclass from typing import Dict, Iterable, Optionalimport numpy as np impo…

【动态规划】1130. 叶值的最小代价生成树

1130. 叶值的最小代价生成树 难度:中等 力扣地址:https://leetcode.cn/problems/minimum-cost-tree-from-leaf-values/description/ 题目内容 给你一个正整数数组 arr,考虑所有满足以下条件的二叉树: 每个节点都有 0 个或是 2 个…

基于Java的学生成绩管理系统

你好呀,我是计算机学姐码农小野!如果有相关需求,可以私信联系我。 开发语言:Java 数据库:MySQL 技术:Java技术,B/S结构 工具:MyEclipse,MySQL 系统展示 首页 个人中…

软件测试——稳定性测试:adb Monkey

Monkey 1. Monkey1.1 Monkey 是什么1.2 Monkey 测试场景1.3 Monkey 特点1.4 Monkey 在哪里1.5 测试准备事项1.6 Monkey 参数列表 2. 基本命令3. 常用参数4. 事件类型5. 调试参数6. 日志管理7. 日志错误定位8. Monkey测试可以发现的问题 1. Monkey 1.1 Monkey 是什么 Monkey是一…

计算机网络期末

1、IP 地址为:192.168.0.254,它的子网掩码应该为( ) A.255.255.255.0 B.255.255.254.0 C.255.255.252.0 D.255.255.0.0 2、最容易产生网络可靠性瓶颈问题的拓扑构型是( )。 A 总线型 B 星型 C 环型 D 网状型 3、HTTP 就是电子邮件阅读协议&#xff0…

使用Vue+Antv-X6实现一个输送线可视化编辑器(支持拖拽、自定义连线、自定义节点等)

最近公司有这样的业务,要实现一个类似流程图的编辑器,可以拖拉拽之类的,网上寻找了一番,最终决定使用Antv-X6这个图形引擎,非常强大,文档多看几遍也就能上手使用了。感觉还不错就写个使用心得期望能帮助到同…

访问网站时IP被屏蔽是什么原因?

在互联网使用中,有时我们可能会遇到访问某个网站时IP地址被屏蔽的情况。IP地址被网站屏蔽是一个相对常见的现象,而导致这种情况的原因多种多样,包括恶意行为、违规访问等。本文将解释IP地址被网站屏蔽的常见原因,同时,…