3. hdfs概述与高可用原理

news2024/10/6 13:29:38

简述

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.coloradmin.cn/o/1217462.html

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

相关文章

大数据-之LibrA数据库系统告警处理(ALM-12049 网络读吞吐率超过阈值)

告警解释 系统每30秒周期性检测网络读吞吐率&#xff0c;并把实际吞吐率和阈值&#xff08;系统默认阈值80%&#xff09;进行比较&#xff0c;当检测到网络读吞吐率连续多次&#xff08;默认值为5&#xff09;超过阈值时产生该告警。 用户可通过“系统设置 > 阈值配置 >…

迈特优×实在RPA丨每年节省人天800+,企业自动化前后的区别如此大?

迈特优品牌设立于2015年&#xff0c;是一家集设计、生产、销售为一体的新电商企业&#xff0c;旗下拥有天猫、拼多多、唯品会等平台10余家店铺&#xff0c;在天猫男装品类排名前十&#xff0c;男装各个类目均有排名前五的商品&#xff0c;每年开发新品超过1000款。 为优化企业…

基于Vue+SpringBoot的无代码动态表单系统 开源项目

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 动态类型模块2.2 动态文件模块2.3 动态字段模块2.4 动态值模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 动态类型表3.2.2 动态文件表3.2.3 动态字段表3.2.4 动态值表 四、系统展示五、核心代码5.1 查询档案类型5.…

μC/OS-II---进程间通信方式

目录 信号量&#xff08; Semaphores &#xff09;- 用于最基本的互斥、同步操作互斥信号量&#xff08;Mutual Exclusion Semaphores &#xff09;-专门用于互斥消息队列&#xff08; Message Queues &#xff09;- 用于消息通信消息邮箱&#xff08;Message Box&#xff09; …

Latex如何消除并自定义算法标识

正常&#xff1a; 修改后&#xff1a; 正常代码&#xff1a; \documentclass{article} \usepackage[ruled]{algorithm2e} \begin{document} \begin{algorithm} \caption{Hi} My name is XXX. \end{algorithm} \end{document}修改后代码&#xff1a; \documentclass{articl…

遥感领域最热门的研究主题介绍

遥感是有效地直接从地球收集数据的最重要技术之一。由于生态信息科学的进步&#xff0c;遥感技术在日常生活的多个研究方面变得非常有价值&#xff0c;其中包括大气物理学、生态学、土壤和水污染、土壤科学、地质学、火山爆发和地球演化。以下是遥感领域的主要趋势研究主题&…

山西电力市场日前价格预测【2023-11-17】

日前价格预测 预测说明&#xff1a; 如上图所示&#xff0c;预测明日&#xff08;2023-11-17&#xff09;山西电力市场全天平均日前电价为156.81元/MWh。其中&#xff0c;最高日前电价为457.16元/MWh&#xff0c;预计出现在18:00。最低日前电价为0.00元/MWh&#xff0c;预计出…

Java远程操作Linux服务器命令

Java可以通过SSH协议远程连接Linux服务器&#xff0c;然后使用JSch库或者Apache Commons Net库来执行远程Linux命令。以下是一个使用JSch库的示例代码&#xff1a; import com.jcraft.jsch.*;public class RemoteCommandExecutor {private String host;private String user;pr…

问题总结(持续更新)

Linux 1.虚拟机问题 打开虚拟机所在目录对 后缀 .vmx文件进行修改 vmcio.present"FALSE" 改为FALSE即可 2.因某些问题导致本来正常的虚拟机没有网络了 重新配置网络 vim /etc/sysconfig/network-scripts/ifcfg-enstab补全 service network restart 重启网络 Sentina…

(C++)栈的链式存储结构(出栈、入栈、判空、遍历、销毁)(数据结构与算法)

链栈是运算受限的单链表、只能在链表头部进行操作 1.链表的头指针就是栈顶,链头为栈顶&#xff0c;链尾为栈底 2.栈的链式存储不需要附设头节点 3.基本不存在栈满的情况,不需要判断栈满&#xff0c;但要判空 4.空栈相当于头指针指向空 5.插入和删除仅在栈顶处执行 6.因为是动态…

Python实现视频字幕时间轴格式转换

自己喜欢收藏电影&#xff0c;有时网上能找到的中文字幕文件都不满足自己电影版本。在自己下载的压制版电影中已内封非中文srt字幕时&#xff0c;可以选择自己将srt的时间轴转为ass并替换ass中的时间轴。自己在频繁 复制粘贴改格式的时候想起可以用Python代码完成转换这一操作&…

EnlightenGAN 开源代码运行问题汇总

参考链接&#xff1a; EnlightenGAN 开源代码运行EnlightenGAN的运行环境搭建和训练自己的数据 源码下载和环境配置比较简单&#xff0c;本文测试环境&#xff1a;Win10 RTX3060、cuda 11.3、python 3.8 torch 1.12.0 numpy 1.20.1 如果想修改在项目里创建test_daatset文…

Mac电脑好用的窗口管理软件 Magnet 中文for mac

Magnet是一款用于Mac操作系统的窗口管理工具&#xff0c;它可以帮助您快速和方便地组织和管理应用程序窗口&#xff0c;以提高您的工作效率和多任务处理能力。 以下是Magnet的一些主要功能和特点&#xff1a; 窗口自动调整&#xff1a;Magnet允许您通过简单的拖放操作或使用快…

0门槛!用ChatGPT只花1天批量生成300个爆火TikTok视频

目录 1 2让天下没有难做的开发和运维&#xff0c;DevOps终于有了专属大模型 3关于 DevOpsGPT 1 不露脸&#xff0c;不怕视频也能从TikTok赚到钱?在过去30天&#xff0c;有人通过这个方式预计至少获得了超过1万美金的广告分成收益。这些成功账号的共同特点是&#xff0c;所有…

Vue3 自定义hook函数

这个hook函数并不是Vue3 自带的&#xff0c;而是为了方便我们书写和复用代码。 当我们在setup函数中写了很多内容过后&#xff0c;就会变得很乱&#xff0c;所以我们将实现相同功能的数据、方法和生命周期等等打包单独放在一个文件中&#xff0c;就会整洁很多。 例如&#xf…

天津市专业大数据培训班,大数据就业岗位的多样性

大数据技术应用广泛&#xff0c;几乎涉及到了各个行业和领域。毕业后&#xff0c;我们可以选择从事大数据工程师、数据分析师、数据科学家等职业&#xff0c;也可以选择进入金融、医疗、电商等行业进行数据分析和决策支持。 大数据就业岗位多样 大数据培训所涉及的就业岗位有…

原来你不会找资源,三个宝藏白嫖书籍网站,阅读改变生活(一)

[无名图书] - 探索无尽的书海 致力于为你打开一扇通往无限知识和无穷想象的大门。从畅销小说到学术专著&#xff0c;书库涵盖了各个领域&#xff0c;满足了各种阅读胃口。无论你是文学爱好者、学术追求者还是正在寻找新奇刺激的冒险者&#xff0c;这都是你不可错过的阅读伴侣。…

固有时间尺度分解(Intrinsic Time Decomposition,ITD)

代码教程 固有时间尺度分解(ITD) 代码原理 ITD&#xff08;Intrinsic Time Decomposition&#xff09;是一种信号分解方法&#xff0c;用于将信号分解成多个时频组件。它的基本思想是将信号分解为一组原子函数&#xff0c;这些原子函数具有不同的时频特性。 ITD分解的步骤如下…

Python的基础:模块(Modules)和包(Packages)详解

1. 模块&#xff08;Modules&#xff09; 一个模块是一个包含了 Python 定义和语句的文件。模块可以包括变量、函数、类等&#xff0c;并且提供了一种将相关代码组织成可重用单元的方式。一个模块的定义通常包括以下几个方面&#xff1a;   1&#xff09;文件扩展名&#xff…

【软件推荐】我的常用Windows软件

文章目录 前言Colors Lite&#xff08;颜色吸取&#xff09;Everything&#xff08;文件搜索&#xff09;知云文献翻译Directory Opus&#xff08;文件管理器&#xff09;Snipaste&#xff08;截图&#xff09;AxMath&#xff08;公式编辑器&#xff09;Deskpin&#xff08;窗口…