广告
返回顶部
首页 > 资讯 > 后端开发 > Python >HDFS-Hadoop NameNode高可用机制
  • 776
分享到

HDFS-Hadoop NameNode高可用机制

2024-04-02 19:04:59 776人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

目录1 - 为什么要高可用 2 - Namenode 的高可用发展史 3 - hdfs 的高可用架构 3.1 Standby 和 Active 的命名空间保持一致 3.2 同一时刻只

1 - 为什么要高可用

hadoop 中,NameNode 扮演着至关重要的角色 —— 整个 HDFS 文件系统的元数据信息都由 NameNode 管理,一旦 NameNode 进程出现异常,或者维护 NameNode 所在节点的时候,都会导致 HDFS 集群不可用。

所以 NameNode 的可用性直接决定了 Hadoop 集群的可用性。

2 - NameNode 的高可用发展史

在 Hadoop 2.0 以前,每个 HDFS 集群只有一个 NameNode,一旦这个节点不可用,则整个 HDFS 集群将处于不可用状态 —— 即,HDFS 2.0 以前,NameNode 存在单点故障风险。

与典型的 HA(High Availability,高可用)方案一样(参考:常见的六种容错机制),HDFS 2.0 开始支持的 HA,就是 在 HDFS 集群中同时运行两个 NameNode。

一个处于 Active(活跃)状态:负责集群中所有客户端的操作(修改命名空间、删除备份数据块等操作);

另一个处于 Standby(备份)状态:充当从服务器,和 Active NameNode 有相同的命名空间和元数据。

当 Active NameNode 停止服务时,Standby NameNode 能够快速进行故障切换,以保证 HDFS 集群服务不受影响。

3 - HDFS 的高可用架构

看图:


Standby NemeNode 是如何做到故障切换的?换句话说,它和 Active NameNode 之间的数据是如何保持一致的?

3.1 Standby 和 Active 的命名空间保持一致

它们存储着一样的元数据,可以把集群恢复到系统奔溃时的状态 —— 这是实现自动故障切换的基础。

为了使备份节点与活动节点的数据保持同步,两个节点都需要同一组独立运行的节点来通信,HDFS 中把这样的节点称为 JournalNode。

1)第一关系链的一致性,即 Active NameNode 和 Standby NameNode 的命名空间状态的一致性:

a)Active NameNode 会定期地把 修改命名空间或删除备份数据块等操作 记录到 EditLog,同时写到 JN 的多数节点中。

b)Standby NameNode 会一直监听 JN 上 EditLog的变化,如果 editlog 有改动,Standby NameNode 就会读取 editlog 并与当前的命名空间合并。

c)Active NameNode 出现故障时,Standby NameNode 会保证已经从 JN 上读取了所有 editlog 并与命名空间合并,然后才会从 Standby 切换为 Active。

2)第二关系链的一致性,即数据块的存储信息的一致性:

为了使故障切换能够尽快执行成功,就要保证 Standby NameNode 也 实时保存了数据块的存储信息,HDFS 中是这样做的:

DataNode 会同时向两个 NameNode 发送心跳以及块的存储信息。

这样以来,发生故障切换时,Standby NameNode 就可以直接切换到 Active 状态(它和旧 Active 节点的元数据完全一致),而不需要等待所有的 DataNode 汇报全量数据块信息 —— 这也是热备功能。

需要注意:Standby NameNode 只会更新数据块的存储信息,并不会向 DataNode 发送复制或删除数据块的指令,这些指令只能由 Active NameNode 发送。

3.2 同一时刻只有一个 Active NameNode

如果两个 NameNode 都是活跃状态,那么这个集群就会被分成2个小集群,它们都认为自己是唯一活动的集群。这就是著名的“脑裂”现象。

脑裂的 HDFS 集群很可能造成数据错乱、丢失数据块,还可能向 DataNode 下发错误的指令,这些错误都很难恢复。

4 - HDFS 高可用的实现原理

这里主要介绍通过隔离(fencing)和 Quorum Journal Manager(QJM)共享存储实现的 HDFS 高可用。

4.1 隔离(Fencing)- 预防脑裂

预防脑裂的常见方案就是 Fencing,即隔离,思路是把旧的 Active NameNode 隔离起来,使它不能正常对外提供服务,使集群在任何时候都只有一个 Active NameNode。

HDFS 提供了 3 个级别的隔离(Fencing):

1)共享存储隔离:同一时间只允许一个 NameNode 向 JournalNode 写入 EditLog 数据。

2)客户端隔离:同一时间只允许一个 NameNode 可以响应客户端的请求。

3)DataNode 隔离:同一时间只允许一个 NameNode 向 DataNode 下发命名空间相关的命令,例如删除块,复制块等。

4.2 Qurom Journal Manager 共享存储

在 HDFS 的 HA 架构中还有一个非常重要的部分:Active NameNode 和 Standby NameNode 之间如何共享 EditLog 文件。

解决思路是:Active NameNode 将日志文件写到共享存储上,Standby NameNode 实时地从共享存储读取 EditLog 文件,然后合并到 Standby NameNode 的命名空间中。一旦 Active NameNode 发生错误,Standby NameNode 就可以立即切换到Active状态。

HDFS 2.6 开始,提供了一个叫做 Qurom Journal Manager(QJM)的共享存储方案,来解决 HA 架构中元数据的共享存储问题。

QJM 基于 Paxos 算法实现,基本原理是:HDFS 集群中有 2n+1 台 JournalNode,EditLog 保存在 JN 的本地磁盘上;

每个 JournalNode 都允许 NmaeNode 通过它的 rpc 接口读写 EditLog 文件;

当 NmaeNode 向共享存储写入 EditLog 文件时,它会通过 QJM 向集群中所有的 JournalNode 并行发送写 EditLog 文件的请求,当有一半以上(>=n+1)的 JN 返回写操作成功时,就认为这次写操作成功了。

每次写数据操作有多数(>=n+1)JN 返回成功,就认为这次写操作成功了。

由此我们可以知道,这个 QJM 必须也是高可用的,否则 HDFS 的高可用就无法保障。

QJM 实现 HA 的主要好处:

  • 不存在单点故障问题;
  • 不需要配置额外的共享存储,降低了复杂度和维护成本;
  • 不需要单独配置 Fencing 实现(见文末#5.1节),因为 QJM 本身就内置了 Fencing 的功能;
  • 系统的鲁棒性程度是可配置的( QJM 基于 Paxos 算法,配置 2n+1 台 JournalNode,最多能容忍 n 台机器同时挂掉);
  • QJM 中存储日志的 JournalNode 不会因为其中一台的延迟而影响整体的延迟,而且也不会因为 JournalNode 的数量增多而影响性能(因为 NameNode 向 JournalNode 发送日志是并行的)。

关于 QJM 的具体工作原理,后面有机会了专门讲讲。

5 - 其他补充

5.1 QJM 的 Fencing 方案

QJM 的 Fencing 只能让原来的 Active NN 失去对 JN 的写权限,但是原来的 Active NN 还是可以响应客户端的请求,对 DataNode 进行读操作。

对客户端和 DataNode 的隔离是通过配置 dfs.ha.fencing.methods 实现的,Hadoop 公共库中有两种 Fencing 实现:

shell:即执行一个用户事先定义的 shell 命令或脚本来完成隔离。

sshfence:ssh 到原 Active NN 上,使用 fuser 结束进程(通过 tcp 端口号定位进程 pid,比 jps 命令更准确)。

5.2 - HDFS 高可用组件简介

5.2.1 ZKFailoverController

是基于 ZooKeeper 的故障转移控制器,它负责控制 NameNode 的主备切换,ZKFailoverController 会监测NameNode 的健康状态,当发现 Active NameNode 出现异常时会通过 ZooKeeper 进行一次新的选举,完成 Active 和 Standby 状态的切换。

5.2.2 HealthMonitor

周期性调用 NameNode 的 HAServiceProtocol RPC 接口(monitorHealth 和 getServiceStatus),监控 NameNode 的健康状态并向 ZKFailoverController 反馈。

5.2.3 ActiveStandbyElector

接收 ZKFailoverController 的选举请求,通过 ZooKeeper 自动完成主备选举,选举完成后回调 ZKFailoverController 的主备切换方法对 NameNode 进行 Active 和 Standby 状态的切换。

参考资料

//www.jb51.net/article/220423.htm

//www.jb51.net/article/220415.htm

以上就是Hadoop NameNode高可用机制的详细内容,更多关于Hadoop NameNode高可用的资料请关注编程网其它相关文章!

--结束END--

本文标题: HDFS-Hadoop NameNode高可用机制

本文链接: https://www.lsjlt.com/news/133274.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • HDFS-Hadoop NameNode高可用机制
    目录1 - 为什么要高可用 2 - NameNode 的高可用发展史 3 - HDFS 的高可用架构 3.1 Standby 和 Active 的命名空间保持一致 3.2 同一时刻只...
    99+
    2022-11-12
  • 带你了解HDFS的Namenode 高可用机制
    目录HDFS NameNode 高可用Hadoop Namenode 高可用架构Namenode 高可用的实现隔离(Fencing)QJM共享存储HDFS NameNode 高可用 ...
    99+
    2022-11-12
  • 详细讲解HDFS的高可用机制
    目录互斥机制写流程 读流程 恢复流程 在Hadoop2.X之前,Namenode是HDFS集群中可能发生单点故障的节点,每个HDFS集群只有一个namenode,一旦这个节点不可用,...
    99+
    2022-11-12
  • hadoop切片机制怎么应用
    这篇文章主要介绍“hadoop切片机制怎么应用”,在日常操作中,相信很多人在hadoop切片机制怎么应用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”hadoop切片机制怎么应用”的疑惑有所帮助!接下来,请跟...
    99+
    2023-06-29
  • 自动化HDFS数据复制机制的简单用法
    这篇文章主要介绍“自动化HDFS数据复制机制的简单用法”,在日常操作中,相信很多人在自动化HDFS数据复制机制的简单用法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”自动化HDFS数据复制机制的简单用法”的疑...
    99+
    2023-06-02
  • Hadoop高可用搭建的示例分析
    这篇文章给大家分享的是有关Hadoop高可用搭建的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Hadoop高可用搭建超详细实验环境安装jdk修改hostname修改hosts映射,并配置ssh免密登录设...
    99+
    2023-06-27
  • hadoop 切片机制分析与应用
    前言 上面是一张MapReduce读取一个文本数据的逻辑顺序处理图。我们知道,不管是本地运行还是集群模式下,最终以job的任务调度形式运行,主要分为两个阶段 Map阶段,开启Map...
    99+
    2022-11-13
  • docker搭建Hadoop CDH高可用集群实现
    目录0. docker安装1. 构建Centos-cdh镜像2. 容器安装ClouderaManager2.1 初始化环境2.2 配置中文环境变量2.3 设置NTP时间同步服务2.4 安装mysql2.5 准备Cloudera-Manage...
    99+
    2022-09-23
  • Hadoop2.2.0中HDFS的高可用性实现原理是什么
    这篇文章主要介绍“ Hadoop2.2.0中HDFS的高可用性实现原理是什么”,在日常操作中,相信很多人在 Hadoop2.2.0中HDFS的高可用性实现原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答...
    99+
    2023-06-03
  • 怎么用Hadoop源码分析心跳机制
    这篇文章将为大家详细讲解有关怎么用Hadoop源码分析心跳机制,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一.心跳机制 hadoop集群是master/slave模式,master包括Na...
    99+
    2023-06-17
  • Redis中高可用和高并发机制是什么意思
    这篇文章主要介绍了Redis中高可用和高并发机制是什么意思,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、高并发机制我们知道redis是基...
    99+
    2022-10-18
  • 实现redis高可用机制的方法有哪些
    实现redis高可用机制的方法有哪些?针对这个问题,这篇文章给出了相对应的分析和解答,希望能帮助更多想解决这个问题的朋友找到更加简单易行的办法。保证redis高可用机制需要redis主从复制、redis持久...
    99+
    2022-10-18
  • MySQL高可用工具Orchestrator如何进行探测机制
    这篇文章将为大家详细讲解有关MySQL高可用工具Orchestrator如何进行探测机制,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。故障检测orch使用了...
    99+
    2022-10-18
  • 利用 PHP 防抖机制提高系统的稳定性和可靠性
    在开发PHP应用程序时,我们经常会遇到一些需要处理用户输入或触发事件的情况。然而,用户输入或事件触发时的频繁操作可能会对系统的稳定性和可靠性造成负面影响。为了解决这个问题,我们可以利用PHP提供的防抖机制。防抖机制的原理是在用户输入或事件触...
    99+
    2023-10-21
    可靠性 系统稳定性 PHP防抖机制
  • Spring响应机制如何提高Java API的可维护性?
    Spring作为Java开发中最流行的框架之一,其响应机制对于Java API的可维护性有着至关重要的影响。在本文中,我们将深入探讨Spring响应机制如何提高Java API的可维护性,并结合代码演示进行具体说明。 一、Spring响应机...
    99+
    2023-09-21
    api spring 响应
  • MySQL数据库--主主复制+keepalived高可用
                  MySQL数据库--主主复制+keepalived高可用之前我们有学习过mysql的主从复制,主要...
    99+
    2022-10-18
  • MySQL同步复制及高可用的方案
    本篇内容主要讲解“MySQL同步复制及高可用的方案”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL同步复制及高可用的方案”吧!1.前言mysql作为应用...
    99+
    2022-10-18
  • 云服务器可以用手机控制吗
    云服务器可以用手机控制,只需要将云服务器的控制面板添加到手机中,然后在需要使用手机控制的操作上点击相应的按键即可。 如果需要使用手机中的其他功能,您可以使用相应的应用程序来替代手机来控制云服务器。例如,您可以在云服务器上创建虚拟桌面,使用...
    99+
    2023-10-26
    可以用 服务器 手机
  • 使用Go重试机制代码更可靠
    目录场景设计原理场景 服务依赖第三方服务或者其他服务,但有时第三方服务偶发性出现问题并且会快速的恢复,而我们的系统可能因为这些偶发性出现问题。 所以无法保证以来服务的可靠性,但是我们...
    99+
    2022-11-11
  • MySQL高可用复制管理工具Orchestrator怎么用
    本篇文章给大家分享的是有关MySQL高可用复制管理工具Orchestrator怎么用,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。背景在MyS...
    99+
    2022-10-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作