复习打卡大数据篇——Hadoop HDFS 03

目录

1. HDFS元数据存储

2. HDFS HA 高可用


1. HDFS元数据存储

HDFS中的元数据按类型可以分为:

  • 文件系统的元数据:包括文件名、目录名、修改信息、block的信息、副本信息等。
  • datanodes的状态信息:比如节点状态、使用率等。

HDFS中的元数据按存储位置可以分为内存中元数据和磁盘上的元数据

磁盘上的元件数据包括fsimage镜像文件和edits log编辑日志,因为在磁盘上可以保证持久化存储。

fsimage镜像文件:是元数据的一个持久化的检查点,包含Hadoop文件系统中的所有目录和文件元数据信息,但不包含文件块位置的信息。文件块位置信息只存储在内存中,是在 datanode加入集群的时候,namenode询问datanode得到的,并且间断的更新。

edits 编辑日志:用来记录文件系统中发生的所有更改操作(如创建、删除、修改文件等)的日志。当客户端对文件系统执行变更操作时,这些操作会被优先记录到 edits 文件中。

当NN启动后,首先将fsimage镜像文件加载到内存中,再根据edits 编辑日志里的内容更新内存元数据,使得内存元数据和实际的同步,因此内存中的元数据是最完整最新的元数据,用户可以对其进行读操作,接下来HDFS中的更新操作会重新写到edits 编辑日志里,因为fsimage镜像文件比较大,直接在fsimage镜像文件中更新太慢。

这样一来就不必担心内存中的元数据丢失,磁盘里的fsimage镜像文件和edits log编辑日志能够确保元数据安全。


SNN

SNN,也就是HDFS中的一个角色secondarynamenode,它的职责是合并NameNode的edit logs到fsimage文件中。因为长时间不合并,edit logs会越来越多,fsimage镜像文件会越来越旧,不太好。secondary namenode将namenode上积累的所有edits和一个最新的fsimage下载到本地,并加载到内存进行merge的过程称为checkpoint

checkpoint流程:

  1. 当产生新的操作时,首先写到磁盘里的edits日志里,然后再更新到nn的内存。
  2. 当达到dfs.namenode.checkpoint.period和dfs.namenode.checkpoint.txns 两个配置中的任意一个secondarynamenode就会执行checkpoint的操作。两个参数可以在core-site.xml配置,第一个是两次连续的checkpoint之间的时间间隔。默认1小时,第二个是最大的没有执行checkpoint事务的数量,满足将强制执行紧急checkpoint,即使尚未达到检查点周期。默认设置为100万。
  3. 触发checkpoint后,NN生成一个新的edits文件,因为旧的不能再写了,越写越大,需要及时合并更新fsimage镜像文件,接下来的操作写道新的edits文件里,同时SNN把NN的edits文件和fsimage通过HTTP GET方式复制到本地。
  4. 然后SNN把fsimage加载到SNN的内存里,然后一条一条地执行edits文件中的各项更新操作,更新fsimage,更新完后生成一个最新的fsimage文件。SNN把这个最新的fsimage文件复制到NN磁盘里。这样一来新的fsimage文件和edits文件就把旧的替换掉了,保证了edits不太大,fsimage不太旧。然后这样一直循环。

注意NN内存里的元数据始终是最新的,因为要及时的使用,checkpoint的作用只是为了容错和持久化。

2. HDFS HA 高可用

单点故障(single point of failure,SPOF):

是指系统中某一点一旦失效,就会让整个系统无法运行成熟的做法就是给单点故障设置备份,形成主备架构。通俗描述就是当主挂掉,备份顶上,短暂的中断之后继续提供服务。常见的是一主一备架构,当然也可以一主多备。备份越多,容错能力越强,与此同时,冗余也越大,浪费资源。

QJM方案:

使用zookeeper中ZKFC来实现主备切换;使用Journal Node(JN)集群实现edits log的共享以达到数据同步的目的

在HDFS高可用中,没有SNN了,多了一个备用NN节点standby NN,基本原理是通过使用 2N+1 台 JournalNode 来存储 EditLog,每次写操作需要至少 N+1 个 JournalNode 返回成功时,才认为该次写入操作成功,确保数据不会丢失。这个算法能够容忍最多 N 台机器故障,若出现超过 N 台机器故障,则算法将失效。该原理基于 Paxos 算法。


如何保证备用NN元数据与active元数据同步?

由于在高可用(HA)架构中,SecondaryNameNode 已不再存在。为了保证 Standby NameNodeActive NameNode 之间的元数据始终保持一致,它们通过 JournalNode 进行数据同步。当 Active NameNode 执行任何修改操作时,JournalNode 会将修改日志同时记录到至少半数以上的 JournalNode 中。此时,Standby NameNode 会监测到 JournalNode 中的日志变化,并读取相应的修改日志,随后将这些修改同步到自己的目录镜像树中。


Active NameNode 挂掉如何接管?

当发生故障时,若 Active NameNode 挂掉,Standby NameNode 在接管成为新的 Active NameNode 前,先读取所有 JournalNode 中的修改日志。这一过程确保了 Standby NameNode 的目录镜像树与故障的 Active NameNode 保持一致,从而能够高效且可靠地接管原 Active NameNode 的工作,继续处理来自客户端的请求,确保整个系统的高可用性。


如果新的NN上任后原有挂掉的NN复活了怎么办?

HA 模式下,DataNode 必须确保在任何时刻只有一个 NameNode 能对其发出指令。为此,每当 NameNode 改变状态时,它会向 DataNode 发送当前状态及一个序列号。DataNode 在运行期间会持续跟踪这个序列号。当原NameNode挂了时,新的 Active NameNode 会在向 DataNode 发送心跳信息时,附带自己的 Active 状态和一个更高的序列号。收到这个心跳的 DataNode 会认为该 NameNode 是新的 Active,并开始执行其命令。如果原 Active NameNode 恢复并发送心跳时,携带的是原先的序列号和 Active 状态,DataNode 会拒绝该心跳信息,并继续与新的 Active NameNode 保持同步。


如何监视NN的健康?

HA下,在每个NameNode的节点上有一个FailoverController作为一个单独的进程用来监视NN的健康状态。FailoverController主要包括三个组件:
HealthMonitor: 监控NameNode是否处于unavailable或unhealthy状态。当前通过RPC调用NN相应的方法完成。
ActiveStandbyElector: 监控NN在ZK中的状态。
ZKFailoverController(ZKFC): 订阅HealthMonitor 和ActiveStandbyElector 的事件,并管理NN的状态,另外zkfc还负责解决脑裂问题。
上述三个组件都在跑在一个JVM中,这个JVM与NN的JVM在同一个机器上。但是两个独立的进程。一个典型的HA集群,有两个NN组成,每个NN都有自己的ZKFC进程。


ZKFC:

  1. 首先集群启动,如果本地NameNode运行状况良好,并且ZKFC看到当前没有其他节点持有锁znode,它将自己尝试获取该锁。如果成功,则表明它“赢得了选举”,并负责运行故障转移以使其本地NameNode处于Active状态。如果已经有其他节点持有锁,zkfc选举失败,则会对该节点注册监听,等待下次继续选举。
  2. ZKFC周期性的向它监控的NN发送健康探测命令,从而来确定NameNode是否处于健康状态,如果机器宕机,心跳失败,那么zkfc就会标记它处于一个不健康的状态。同时如果这个不健康的是active的NN,zkfc将其持有的锁znode删除,然后备用的NN将会得到这把锁,升级为主NN,同时标记状态为Active。
  3. 当宕机的NN新启动时,它会再次注册zookeper,发现已经有znode锁了,便会自动变为Standby状态,如此往复循环,保证高可靠,需要注意,目前仅仅支持最多配置2个NN。

​​​​​​​


脑裂:

在HA集群中,脑裂指的是当两个节点断开联系时,分裂成为两个独立的节点。由于相互失去了联系,主备节点之间像"裂脑人"一样,使得整个集群处于混乱状态。
脑裂后果:

  • 都认为对方是状态好的,自己是备份角色,后果是无服务;
  • 都认为对方是故障的,自己是主角色。相互争抢共享资源,结果会导致系统混乱,数据损坏。客户端也不知道找谁了。

因此保持任意时刻系统有且只有一个主角色提供服务我避免脑裂的核心。

​​​​​​​故障转移过程也就是俗称的主备角色切换的过程,切换过程中最怕的就是脑裂的发生。因此需要Fencing机制来避免,将先前的Active节点隔离,然后再将Standby转换为Active状态。
Hadoop公共库中对外提供了两种Fencing实现,分别是sshfence和shellfence(缺省实现)。
sshfence是指通过ssh登陆目标节点上,使用命令fuser将进程杀死(通过tcp端口号定位进程pid,该方法比jps命令更准确);shellfence是指执行一个用户事先定义的shell命令(脚本)完成隔离。
 

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】进程间通信 -> 匿名管道命名管道

进程间通信的目的 数据传输:一个进程许需要将它的数据发送给另外一个进程。资源共享:多个进程之间共享同样的资源。通知事件:一个进程需要向另一个或一组进程发送消息,通知它们发生了某种事件(如进程终止时要通知父进程…

大模型-使用Ollama+Dify在本地搭建一个专属于自己的聊天助手与知识库

大模型-使用OllamaDify在本地搭建一个专属于自己的知识库 1、本地安装Dify2、本地安装Ollama并解决跨越问题3、使用Dify搭建聊天助手4、使用Dify搭建本地知识库 1、本地安装Dify 参考往期博客:https://guoqingru.blog.csdn.net/article/details/144683767 2、本地…

黑盒测试/白盒测试知识总结

🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 对于很多刚开始学习软件测试的小伙伴来说,如果能尽早将黑盒、白盒测试弄明白,掌握两种测试的结论和基本原理,将对自己后期的学习…

数据结构之线性表之顺序表

定义: 由n(n>0)个数据特性相同的元素构成的有限序列称为线性表 简单来说n个相同数据类型的数据组wsw合在一起的这么一个集合就是一个线性表 线性表包括顺序表和链表 1. 顺序表(我们所有的代码实现都用函数来封装&#xff09…

ReactPress 1.6.0:重塑博客体验,引领内容创新

ReactPress 是一个基于Next.js的博客&CMS系统, Github项目地址:https://github.com/fecommunity/reactpress 欢迎Star。 体验地址:http://blog.gaoredu.com/ 今天,我们自豪地宣布ReactPress 1.6.0版本的正式发布,…

(echarts)数据地图散点类型根据条件设置不同的标记图片

(echarts)数据地图散点类型根据条件设置不同的标记图片 1.用在线工具将本地图片转化base64格式 data(){return { base64Img:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQ...",} }在线转换地址:https://www.jyshare.com/front-end/59/ 2.symbol属…

傅里叶变换原理

本文学习自YuHWEI最浅显易懂的傅里叶变换公式和原理_采样率和信号频率计算镜像频率-CSDN博客 本文会对公式实现 更加详细的补充 连续与离散 一般人们口中所说的傅里叶变换都是指连续傅里叶变换,针对的是连续时域信号. 对于计算设备的信号处理,因为采样…

STM32高级 以太网通讯案例2:搭建TCP服务端

需求描述 在TCP通讯的时候,客户端必须主动联系服务器,这样才能实现通讯。服务器与客户端之间的连接是一种长连接,一旦连上一般是不会断开的。 在STM32上启动一个TCP的服务端,在电脑上用TCP客户端去连接服务端。客户端给服务端发…

系统架构师考试 常错题记录 01

1.按照《中华人民共和国著作权法》的权利保护期( )受到永久保护。 A.发表权 B.修改权 C.复制权 D.发行权 正确答案:B 解析:本题考查知识产权法中的《中华人民共和著作权法》保护期限知识点。 《中华人民共和著作权法》中约定署名权…

WebPack3项目升级webpack5的配置调试记录

文章目录 前言一、webpack3环境1.1、知识点记录1.1.1、配置解释1.1.2、webpack与sass版本对应关系1.1.3、CommonJS与ESModule1.1.4、node版本管理nvm1.1.5、sass-loader、sass与node-sass 1.2、其他1.2.1、.d.ts是什么文件1.2.2、react与types/react版本对应关系1.2.3、webpack…

[源码解析] 模型并行分布式训练Megatron (2) --- 整体架构

link [源码解析] 模型并行分布式训练Megatron (2) --- 整体架构 目录 [源码解析] 模型并行分布式训练Megatron (2) --- 整体架构 0x00 摘要0x01 启动 1.1 分布式启动1.2 构造基础 1.2.1 获取模型1.2.2 获取数据集1.2.3 步进函数 1.2.3.1 广播数据0x02 Pretrain0x03 初始化 3.1 …

事件驱动编程与异步编程:原理、对比及实践案例

在编程领域,事件驱动编程(Event-Driven Programming)与异步编程(Asynchronous Programming)是两种极为关键的编程范式,它们对于提升程序运行效率与响应速度效果显著,尤其在应对I/O密集型任务以及…

基于earthSDK三维地图组件开发

上效果 功能点 测量分析相机位置切换geojson数据加载地图打点&#xff0c;显示信息点击回传数据二三位切换 这里二三维切换通上篇openlayers分享&#xff0c;技术交流V:bloxed <template><div class"h100 w100"><div style"width:100%; heig…

计算机毕业设计Python+Spark知识图谱酒店推荐系统 酒店价格预测系统 酒店可视化 酒店爬虫 酒店大数据 neo4j知识图谱 深度学习 机器学习

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

RK3506开发板:智能硬件领域的新选择,带来卓越性能与低功耗

在现代智能硬件开发中&#xff0c;选择一款性能稳定、功耗低的开发板是确保产品成功的关键。Rockchip最新推出的RK3506芯片&#xff0c;凭借其卓越的能效比、多功能扩展性和优秀的实时性能&#xff0c;已经成为智能家电、工业控制、手持终端等领域的热门选择。而基于RK3506的Ar…

【AIGC-ChatGPT进阶副业提示词】星际占卜师:探索星象能量的艺术【限时免费阅读,一天之后自动进入进阶课程】

引言 在这个数字化的时代&#xff0c;我们创造了一个独特的角色 —— 星际占卜师。这不仅是一个简单的运势预测工具&#xff0c;更是一个融合了玄学、预言和能量解读的智能向导。通过精心设计的系统提示词和独特的画境生成机制&#xff0c;星际占卜师能够为用户带来沉浸式的占…

机器学习之PCA降维

主成分分析&#xff08;PCA&#xff0c;Principal Component Analysis&#xff09; 主成分分析&#xff08;PCA&#xff09;是一种常见的无监督学习技术&#xff0c;广泛应用于数据降维、数据可视化以及特征提取等任务。PCA的目标是通过线性变换将数据从高维空间映射到低维空间…

SOTA简繁中文拼写检查工具:FASPell Chinese Spell Checker 论文

拼写纠正系列 NLP 中文拼写检测实现思路 NLP 中文拼写检测纠正算法整理 NLP 英文拼写算法&#xff0c;如果提升 100W 倍的性能&#xff1f; NLP 中文拼写检测纠正 Paper java 实现中英文拼写检查和错误纠正&#xff1f;可我只会写 CRUD 啊&#xff01; 一个提升英文单词拼…

Visual Studio Code历史版本下载

本章教程&#xff0c;介绍如何找到Visual Studio Code的历史版本官方下载地址。 一、历史版本下载地址 下载地址&#xff1a;https://code.visualstudio.com/updates/ 二、常用版本下载地址 August 2017 (version 1.16)&#xff1a;https://code.visualstudio.com/updates/v1_…

Kubernetes(k8s)离线部署DolphinScheduler3.2.2

1.环境准备 1.1 集群规划 本次安装环境为&#xff1a;3台k8s现有的postgreSql数据库zookeeper服务 1.2 下载及介绍 DolphinScheduler-3.2.2官网&#xff1a;https://dolphinscheduler.apache.org/zh-cn/docs/3.2.2 官网安装文档&#xff1a;https://dolphinscheduler.apach…