`

转-HDFS原理分析之HA机制:avatarnode原理

    博客分类:
  • HDFS
 
阅读更多

由于namenode 是HDFS的大脑,而这个大脑又是单点,如果大脑出现故障,则整个分布式存储系统就瘫痪了。HA(High Available)机制就是用来解决这样一个问题的。碰到这么个问题,首先本能的想到的就是冗余备份,我们今天要讨论的是avatarnode。

AD:51CTO学院:IT精品课程在线看!

 

一、问题描述

由于namenode 是HDFS的大脑,而这个大脑又是单点,如果大脑出现故障,则整个分布式存储系统就瘫痪了。HA(High Available)机制就是用来解决这样一个问题的。碰到这么个问题,首先本能的想到的就是冗余备份,备份的方式有很多种,前辈们设计的有元数据备份方案,secondary namenode以及avatarnode等方案。而这些方案中最有优势的自然是能够让HDFS以最短的时间完成故障切换的方案。也就是我们今天要讨论的avatarnode。

二、基本结构

avatarnode结构图

primary:负责正常业务namenode,也就是为client提供元数据查询和操作。

standby:热备的namenode,完全备份primary的元数据,并对primary做checkpoint(一种元数据持久化机制,后面会介绍到)。

NFS:网络文件服务器,primary会将日志实时同步一份到该服务器,来保证primary出故障时备份元数据的完整性。

三、数据持久化机制——checkpoint

primary管理着所有的元数据,通常元数据都保存在内存里,这样对元数据的访问能够高效。但是有个隐患,就是如果primary节点宕机了,或者掉电了,那么所有的元数据就一去不复返了。如果我们能够把元数据在内存里保存一份,同时在硬盘上也保存一份,那么即使掉电也能将数据再恢复过来。

checkpoint机制就是将元数据实时在硬盘上保存一份的机制。

首先介绍几个关键概念:

edits:日志文件,记录引发元数据改变的操作。

fsimage:元数据的镜像文件,可以理解为元数据保存在磁盘上的一个副本。

问题1:fsimage代表的是某一时刻的元数据镜像,元数据在不断改变,那么这个镜像是如何实时更新的呢?

问题2:如何在保证primary namenode正常对外服务的情况下生成fsimage?

checkpoint机制

checkpoint步骤如下:

第一步:secondary namenode请求namenode停止使用edits,暂时记录在edits.new文件中

第二步:secondary namenode从namenode复制fsimage、edits到本地

第三步:secondary namenode合并fsimage、edits为fsimage.ckpt

第四步:secondary namenode发送fsimage.ckpt到namenode

第五步:namenode用新的fsimage覆盖旧的fsimage,用新的edits覆盖旧的edits

第六步:更新checkpoint时间

到这里fsimage更新完毕,即保证了primary正常服务,也完成了fsimage的更新

四、avatarnode元数据的一致性

checkpoint只是保证了元数据的持久化,但是如果primary出现故障,修复后还是要花大量的时间来加载fsimage,如何让standby在内存中就和primary保持元数据同步,就是一个高可用的HDFS需要解决的问题。

namenode的元数据其实包括两个部分:

第一部分:目录树,目录树管理着HDFS中存储的所有的文件信息。

第二部分:块数据和datanode的对应关系

avatarnode结构图

只要能够保证以上两部分的数据一致了,那么元数据的一致性问题就解决了。

第一部分:primary将日志实时同步到NFS上,而standby可以实时读取NFS上的日志,通过日志回放,可以解决目录树信息一致的问题。

第二部分:快数据和datanode的对应关系,是所有datanode想namenode汇报总结出来的,那么让所有的datanode向两个namenode汇报,就可以解决块数据和datanode的对应关系一致性问题。

问题:新引入的NFS会带来新的单点问题。据facebook工程师统计,这个单点故障率非常之低,他们在四年中之碰到一次。

到这里avatarnode原理基本讲完,但是实际应用中还存在几个问题

1、HDFS是如何快速检测到primary出现故障的?

2、standby是如何迅速从备用机切换到primary的?

【责任编辑:black.dot TEL:(010)68476606】
分享到:
评论

相关推荐

    hadoop-hdfs-client-2.9.1-API文档-中文版.zip

    赠送jar包:hadoop-hdfs-client-2.9.1.jar 赠送原API文档:hadoop-hdfs-client-2.9.1-javadoc.jar 赠送源代码:hadoop-hdfs-client-2.9.1-sources.jar 包含翻译后的API文档:hadoop-hdfs-client-2.9.1-javadoc-...

    hadoop-hdfs-2.7.3-API文档-中英对照版.zip

    赠送jar包:hadoop-hdfs-2.7.3.jar; 赠送原API文档:hadoop-hdfs-2.7.3-javadoc.jar; 赠送源代码:hadoop-hdfs-2.7.3-sources.jar; 赠送Maven依赖信息文件:hadoop-hdfs-2.7.3.pom; 包含翻译后的API文档:hadoop...

    hadoop-hdfs-2.9.1-API文档-中文版.zip

    赠送jar包:hadoop-hdfs-2.9.1.jar 赠送原API文档:hadoop-hdfs-2.9.1-javadoc.jar 赠送源代码:hadoop-hdfs-2.9.1-sources.jar 包含翻译后的API文档:hadoop-hdfs-2.9.1-javadoc-API文档-中文(简体)版.zip 对应...

    hadoop-hdfs-client-2.9.1-API文档-中英对照版.zip

    赠送jar包:hadoop-hdfs-client-2.9.1.jar; 赠送原API文档:hadoop-hdfs-client-2.9.1-javadoc.jar; 赠送源代码:hadoop-hdfs-client-2.9.1-sources.jar; 赠送Maven依赖信息文件:hadoop-hdfs-client-2.9.1.pom;...

    大数据技术基础实验报告-HDFS常用操作命令.doc

    在大数据技术领域,Hadoop 分布式文件系统(HDFS)是核心组件之一,它为大规模数据存储提供了可扩展和高容错性的解决方案。本实验报告主要关注HDFS的常用操作命令,这些命令是管理员和数据分析师日常工作中不可或缺...

    ranger-2.0.0-SNAPSHOT-hdfs-plugin.tar.gz

    在Ranger 2.0.0-SNAPSHOT版本中,包含了对Hadoop分布式文件系统(HDFS)的插件支持,这个名为“ranger-2.0.0-SNAPSHOT-hdfs-plugin”的压缩包正是用于实现这一功能的核心组件。 一、Ranger概述 Ranger提供了一种...

    hadoop-hdfs-2.7.3-API文档-中文版.zip

    赠送jar包:hadoop-hdfs-2.7.3.jar; 赠送原API文档:hadoop-hdfs-2.7.3-javadoc.jar; 赠送源代码:hadoop-hdfs-2.7.3-sources.jar; 赠送Maven依赖信息文件:hadoop-hdfs-2.7.3.pom; 包含翻译后的API文档:hadoop...

    hadoop-hdfs-2.6.5-API文档-中文版.zip

    赠送jar包:hadoop-hdfs-2.6.5.jar; 赠送原API文档:hadoop-hdfs-2.6.5-javadoc.jar; 赠送源代码:hadoop-hdfs-2.6.5-sources.jar; 赠送Maven依赖信息文件:hadoop-hdfs-2.6.5.pom; 包含翻译后的API文档:hadoop...

    大数据实验二-HDFS编程实践

    1. **理解HDFS的角色**:HDFS作为Hadoop的核心组件之一,主要负责存储海量数据。理解其在Hadoop生态中的位置对于掌握整个大数据处理流程至关重要。 2. **熟练使用Shell命令**:通过一系列Shell命令的学习与实践,...

    hadoop-hdfs-2.5.1-API文档-中文版.zip

    赠送jar包:hadoop-hdfs-2.5.1.jar; 赠送原API文档:hadoop-hdfs-2.5.1-javadoc.jar; 赠送源代码:hadoop-hdfs-2.5.1-sources.jar; 赠送Maven依赖信息文件:hadoop-hdfs-2.5.1.pom; 包含翻译后的API文档:hadoop...

    hadoop-hdfs-2.9.1-API文档-中英对照版.zip

    赠送jar包:hadoop-hdfs-2.9.1.jar; 赠送原API文档:hadoop-hdfs-2.9.1-javadoc.jar; 赠送源代码:hadoop-hdfs-2.9.1-sources.jar; 赠送Maven依赖信息文件:hadoop-hdfs-2.9.1.pom; 包含翻译后的API文档:hadoop...

    hadoop-hdfs-2.5.1-API文档-中英对照版.zip

    赠送jar包:hadoop-hdfs-2.5.1.jar; 赠送原API文档:hadoop-hdfs-2.5.1-javadoc.jar; 赠送源代码:hadoop-hdfs-2.5.1-sources.jar; 赠送Maven依赖信息文件:hadoop-hdfs-2.5.1.pom; 包含翻译后的API文档:hadoop...

    hadoop-hdfs-2.6.5-API文档-中英对照版.zip

    赠送jar包:hadoop-hdfs-2.6.5.jar; 赠送原API文档:hadoop-hdfs-2.6.5-javadoc.jar; 赠送源代码:hadoop-hdfs-2.6.5-sources.jar; 赠送Maven依赖信息文件:hadoop-hdfs-2.6.5.pom; 包含翻译后的API文档:hadoop...

    对象存储服务OBSA-HDFS使用指南1

    OBSA-HDFS插件是关键组件,它提供了一个接口,使得Spark、MapReduce、Hive和HBase等大数据计算工具能够与OBS对象存储无缝对接,从而实现数据湖的概念,即以低成本、高扩展性的云存储作为大数据分析的基础。...

    ansible-hdfs:用于安装 Cloudera HDFS 的 Ansible 角色

    角色变量hdfs_version - HDFS 版本hdfs_cloudera_distribution - Cloudera 发行版(默认: cdh5.4 ) hdfs_conf_dir - HDFS 的配置目录(默认: /etc/hadoop/conf ) hdfs_namenode - 确定节点是否为 HDFS NameNode ...

    apache-doris-0.12.0-incubating-src.tar.gz-hdfs_broker.zip 编译ok

    在 Doris 中,HDFS Broker 负责读取和写入数据到 HDFS,提供了一种高效的数据导入和查询机制。"hdfs_broker.zip" 文件是已经使用 Java 8 编译好的 HDFS Broker,可以直接在相应的环境中部署使用。 1. **Apache ...

    repository-hdfs-5.5.0.zip

    elasticsearch5.5.0备份恢复插件repository-hdfs,需要的可以自行下载,也可去官网下载 https://artifacts.elastic.co/downloads/elasticsearch-plugins/repository-hdfs/repository-hdfs-5.5.0.zip

    hadoop-hdfs-2.4.1.jar

    hadoop-hdfs-2.4.1.jar

    java-Hdfs体系结构与基本概念

    * 数据复制:为了提高数据的可靠性,HDFS 使用数据复制机制,一个块可以被复制到多个 DataNode 上。 * 文件系统:HDFS 提供了一个文件系统接口,允许用户使用标准的文件操作来访问 HDFS 中的文件。 Java-HDFS ...

    大数据--Hadoop HDFS

    本文将详细介绍Hadoop及其核心组件之一HDFS(Hadoop Distributed File System)的相关知识点。 #### Hadoop概述 Hadoop由Apache基金会开发维护,其目标是为了解决大数据处理问题,使用户能够在集群上处理PB级别的...

Global site tag (gtag.js) - Google Analytics