3. hdfs概述与高可用原理

news/2024/5/20 5:09:31 标签: hdfs, hadoop

简述

HDFS(Hadoop Distributed File System)是一种Hadoop分布式文件系统,具备高度容错特性,支持高吞吐量数据访问,可以在处理海量数据(TB或PB级别以上)的同时最大可能的降低成本。

HDFS适用于大规模数据的分布式读写,特别是读多写少的场景。

架构

hdfs由四大组件组成,分别是NameNode、DataNode、ZKFC,journalnode

NameNode: 管理所有文件的元数据信息,并且负责与客户端交互

DataNode: 文件的实际存储位置,定时向NameNode上报数据块信息

ZKFC: 监控NameNode的运行状态,做主从切换

journalnode: 共享存储,数据同步用

高可用

高可用一般是指NameNode的高可用,NameNode是典型的主从架构,主节点负责与客户端交互,从节点负责与主节点同步备份

对于高可用集群,我们会启动两个NameNode,一个是Active NameNode,另一个是Standby NameNode,两个NameNode承担不同角色。Active
NameNode负责处理DataNode和Client的请求,Standby NameNode向 Active NameNode 同步最新的元数据信息,当Active
NameNode异常,Standby NameNode会感知到并切换成Active

高可用原理

通过ZKFC实现高可用,是一个zk集群的客户端,它会定期的像本地的NameNode发送心跳检查(这是一个HealthyMonitor线程),所有每一个NameNode都需要一个ZKFC,如果心跳检查成功,那么NameNode是正常的,否则就是一个失效的节点

如何确定谁为主,通过锁实现

NameNode选举成功后会在zk上创建一个临时节点
/hadoop-ha/{namespace}/ActiveStandbyElectorLock,没有选举成功的zkfc就会监听这个节点。通过zk的watcher机制来知道节点的变化,主要关注的是NodeDelete的事件

如果active异常,那么zkfc会主动删除锁节点,处于standby的NameNode会收到锁节点删除事件,于是会马上去创建锁节点,如果创建成功,那么该NameNode就切换为active
状态

如果整台机器都宕机,导致zkfc不能主动删除锁节点,但是由于锁节点是一个临时节点,zkfc会话结束,也会自动删除的

在这里插入图片描述

脑裂

出于某种原因,可能active的NameNode节点正常,但是无法向zk上报心跳,导致与zk建立的session关闭,这个时候ActiveStandbyElectorLock临时节点将被删除,另一个NameNode将会进行选主操作,这个时候就可能出现两个active

解决方案,隔离fence

在zk上还有一个持久的节点ActiveBreadCrumb,如上图所示,这个节点也是保存了Active
NameNode的信息,正常情况下,删除ActiveStandbyElectorLock也会一并删除ActiveBreadCrumb,但是异常情况下,临时节点可以自动删除,持久节点却不会,当另一个NameNode来选主成功后会注意到这个节点,于是会对旧的NameNode进行fencing,对旧的NameNode调用transitionToStandby转为standby状态,如果调用失败,那么就执行我们配置的fence措施

比如我们会配置如下信息

<!-- 配置隔离机制方法 -->
<property>
    <name>dfs.ha.fencing.methods</name>
    <value>
        sshfence
        shell(/bin/true)
    </value>
</property

表示直接ssh到目标主机,杀死对应进程

还有一种叫 shellfence,可以自定义脚本

成功执行fence后,选主成功的NameNode切换为active状态

数据同步

NameNode主备切换,如何做到与之前数据一致?

引入了JournalNode,NameNode会与一组JournalNode进行通信,当active
执行写操作时,它会持久的把修改的记录记录到大多数的JournalNode中,standby就可以从JournalNode中读取edits日志,并且不断的监视这个日志的修改,将修改的记录应用到自己的命名空间

当发生故障转移时,备用的NameNode确保已经从JournalNode读取所有的edits内容。这样就可以保证状态同步。

JournalNode也是需要高可用部署,一般部署3、5、7个,最多容忍(N-1)/2个故障

总结

以上就是对hdfs的介绍,后面文章将不再介绍,直接实战


欢迎关注,学习不迷路!


http://www.niftyadmin.cn/n/5186410.html

相关文章

6.1 集合概述

1. 集合概述 1.1. 引入 在前面的章节中我们学习了数组&#xff0c;数组可以存储多个对象&#xff0c;但是数组只能存储相同类型的对象&#xff0c;如果要存储一批不同类型的对象&#xff0c;数组便无法满足需求了。为此&#xff0c;Java提供了集合&#xff0c;集合可以存储不…

vmware安装MacOS以及flutter遇到的问题

安装过程&#xff1a;参考下面的文章 链接&#xff1a; 虚拟机VMware安装苹果系统macOS&#xff0c;超级详细教程&#xff0c;附文件下载&#xff0c;真教程&#xff01;&#xff01; 无限重启情况&#xff1a; &#xff08;二&#xff09; 配置虚拟机找到你的虚拟机安装文件…

2源码安装网络协议

2.2源码安装/网络协议 一、源码包应用场景 有时我们所用的内核版本太旧&#xff0c;系统自带的库&#xff08;如libstdc.so.6&#xff09;版本低或者依赖的其他软件版 本较低&#xff0c;导致无法安装目标软件。 软件/库其实是对机器汇编指令集的封装&#xff0c;在X86体系下…

TS7031: Binding element ‘role‘ implicitly has an ‘any‘ type.

文章 前言错误场景问题分析解决方案后言 前言 ✨✨ 他们是天生勇敢的开发者&#xff0c;我们创造bug&#xff0c;传播bug&#xff0c;毫不留情地消灭bug&#xff0c;在这个过程中我们创造了很多bug以供娱乐。 前端bug这里是博主总结的一些前端的bug以及解决方案&#xff0c;感兴…

11.16堆的一些性质与操作

1016 7&#xff0c;5&#xff0c;4&#xff0c;3&#xff0c;2&#xff0c;6&#xff0c;1 7&#xff0c;4&#xff0c;6&#xff0c;1&#xff0c;3&#xff0c;2&#xff0c;5 没有度为1的结点说明为满树 A.哈夫曼树一定没有度为1的结点。最大堆可能有度为1的结点 D.哈夫曼…

Python Flask: 构建轻量级、灵活的Web应用

Flask是一个流行的Python Web框架&#xff0c;以其轻量级、灵活和易学的特性受到开发者的喜爱。本文将深入探讨Flask框架的各个方面&#xff0c;通过详实的示例代码&#xff0c;帮助大家更全面地了解和掌握这一强大的工具。 1. 安装与基本用法 首先&#xff0c;需要安装Flask。…

金蝶云星空按钮鼠标悬停内容显示

文章目录 金蝶云星空按钮鼠标悬停内容显示BOS设置效果展示 金蝶云星空按钮鼠标悬停内容显示 BOS设置 效果展示

数据结构(c语言版本) 二叉树的遍历

要求 实现二叉树的创建&#xff0c;并输入二叉树数据 然后先序遍历输出二叉树、中序遍历输出二叉树、后序输出二叉树 例如二叉树为&#xff1a; 该二叉树的先序遍历结果为&#xff1a; A B D C E F 该二叉树的中序遍历结果为&#xff1a; B D A E C F 该二叉树的后序遍历结果…