Hadoop2.0 Namenode HA实现方案介绍及汇总

基于社区最新release的Hadoop2.2.0版本,调研了hadoop HA方面的内容。hadoop2.0主要的新特性(Hadoop2.0稳定版2.2.0新特性剖析):

  1. hdfs snapshots: apache官方对hdfs snapshots说明
  2. namenode federation: namenode在集群规模大了之后会成为性能瓶颈,尤其是内存使用量急剧增大,同时hdfs所有元数据信息的读取和操作都要与namenode通信。而联邦模式解决的就是namenode的可扩展性问题。更多内容可以参看hadoop 2.0 namenode HA实战和federation实践 下图是我画的HA和Federation部署图。每个namesevice映射了HDFS中部分实际路径,可以单独给Client提供服务,也可以由Client通过Client Mount Table来访问若干NS。图中每个NS里有一个active NN和一个standby NN,这部分HA会在下面介绍。每个NS对应了一个Pool,Pool对应的DN是该NS可以访问的DN id的集合。这样做到可扩展,带来的好处有很多,比如后续添加的NS不会影响之前的NS等。联邦部署适合大规模集群,一般规模不大的情况下不需要使用。下面主要介绍HA的内容。
  3. namenode单点故障解决方案。NN现在的HA解决方案主要思路是提供一个保存元数据信息的地方,保证editlog不会丢失。董的这篇HA单点故障解决方案总结中介绍了从解决MRv1的Jobtracker HA,到HDFS HA,再到还未正式发布的YARN RM HA解决方案的异同,各自采用的共享存储系统有所不同,主要原因是HA的解决方案难度取决于Master自身记录信息的多少和信息可重构性。共享存储系统主要有NFS,ZK,BookKeeper,QJM。其中已经发行版本里默认使用的QJM(Quaro Journal Manager)。QJM是Cloudera公司提出的,在QJM出现前,如果在主从切换的这段时间内出现脑裂,破坏HDFS元数据的时候,常见方式是去掉activeNN的写权限来保证最多只有一个active NN。QJM本质上是Paxos算法的实现,通过启动2N+1个JournalNode来写editlog,当其中大于N个Node写成功时候认为本次写成功,且允许容忍N以下个Node挂掉。QJM实现及源码分析可以参考基于QJM的HDFS HA原理及代码分析。QJM和BKJM(借助BookKeeper实现的JM)都是将editlog信息写在磁盘上,这点也是与NFS方案的区别,且NFS相对而言其实更重量级,本身是一个需要独立维护的东西,而QJM是已经实现的默认方案,配置方法在官方里也可以找到,很详细。BKJM正在实现中且长期看好。关于BookKeeper相关的JIRA进展可以参考BookKeeper Option For NN HA。所以总结来说推荐使用QJM和BKJM,且他们的原理比较相似。再给出HDFS JIRA上一份cloudera员工给的Quorum-Journal Design设计文档,地址为https://issues.apache.org/jira/secure/attachment/12547598/qjournal-design.pdf
  4. hdfs symbo links将在2.3.0里发布。类似linux文件系统的软链接。相关资料可以参考理解 Linux 的硬链接与软链接  硬连接和软连接的原理

其实现在的HA方案,很大程度上参考的是Facebook的AvatarNode的NN HA方案,只是他是手动的。Facebook的AvatarNode是业界较早的Namenode HA方案,它是基于HDFS 0.20实现的,如下图所示。

由于采用的是人工切换,所以实现相对简单。AvatarNode对Namenode进行了封装,处于工作状态的叫Primary Avatar,处于热备状态的叫Standby Avatar(封装了Namenode和SecondaryNameNode),两者通过NFS共享EditLog所在目录。在工作状态下,Primary Avatar中的Namenode实例接收Client的请求并进行处理,Datanode会向Primary和Standby两个同时发送blockReport和心跳,Standby Avatar不断地从共享的EditLog中持续写入的新事务,并推送给它的Namenode实例,此时Standby Avatar内部的Namenode处于安全模式状态,不对外提供服务,但是状态与Primary Avatar中的保持一致。一旦Primary发生故障,管理员进行Failover切换:首先将原来的Primary进程杀死(避免了“Split Brain”和“IO Fencing”问题),然后将原来的Standby设置为Primary,新的Primary会保证回放完成所有的EditLog事务,然后退出安全模式,对外接收服务请求。为了实现对客户端透明,AvatarNode主从采用相同的虚拟IP,切换时将新的Primary设置为该虚拟IP即可。整个流程可在秒~分钟级别完成。可以参考FaceBook 2011年的论文Apache Hadoop Goes Realtime at Facebook 里面专门有一节讲到HA AvatarNode的设计。

Hadoop2.0 Namenode HA实现方案的更多相关文章

  1. Hadoop 2.0 NameNode HA和Federation实践【转】

    Hadoop 2.0 NameNode HA和Federation实践 Posted on 2012/12/10 一.背景 天云趋势在2012年下半年开始为某大型国有银行的历史交易数据备份及查询提供基 ...

  2. 【伊利丹】Hadoop2.0 NN HA实验记录

    1.关于Hadoop2.2.0中HA的介绍 watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxNDUxMjEyNA==/font/5a6L5L2T/fo ...

  3. Hadoop2之NameNode HA详解

    在Hadoop1中NameNode存在一个单点故障问题,如果NameNode所在的机器发生故障,整个集群就将不可用(Hadoop1中虽然有个SecorndaryNameNode,但是它并不是NameN ...

  4. Hadoop 2.6.0 Namenode HA,ResourceManager HA

    先启动所有的zookeeper zkServer.sh start 在所有节点上启动JournalNode: sbin/hadoop-daemon.sh start journalnode 格式化第一 ...

  5. Cloudera Hadoop 5& Hadoop高阶管理及调优课程(CDH5,Hadoop2.0,HA,安全,管理,调优)

    1.课程环境 本课程涉及的技术产品及相关版本: 技术 版本 Linux CentOS 6.5 Java 1.7 Hadoop2.0 2.6.0 Hadoop1.0 1.2.1 Zookeeper 3. ...

  6. Hadoop2.0中单点故障解决方案分析

    Hadoop 1.0内核主要由两个分支组成:MapReduce和HDFS,众所周知,这两个系统的设计缺陷是单点故障,即MR的JobTracker和HDFS的NameNode两个核心服务均存在单点问题, ...

  7. Hadoop2.0中单点故障解决方案总结---老董

    Hadoop 1.0内核主要由两个分支组成:MapReduce和HDFS,众所周知,这两个系统的设计缺陷是单点故障,即MR的JobTracker和HDFS的NameNode两个核心服务均存在单点问题, ...

  8. Ubuntu 14.10 下ZooKeeper+Hadoop2.6.0+HBase1.0.0 的HA机群高可用配置

    1 硬件环境 Ubuntu 14.10 64位 2 软件环境 openjdk-7-jdk hadoop 2.6.0 zookeeper-3.4.6 hbase-1.0.0 3 机群规划 3.1 zoo ...

  9. hadoop2.2.0的ha分布式集群搭建

    hadoop2.2.0 ha集群搭建 使用的文件如下:    jdk-6u45-linux-x64.bin    hadoop-2.2.0.x86_64.tar    zookeeper-3.4.5. ...

随机推荐

  1. 15.io流,递归

    一.file的常用api 二.算法:递归1.定义:递归算法是把问题转化为规模缩小了的同类问题的子问题.然后递归调用函数(或过程)来表示问题的解.一个过程(或函数)直接或间接调用自己本身,这种过程(或函 ...

  2. git&github入门使用

    一.在Linux上安装Git 首先,你可以试着输入git,看看系统有没有安装Git,没有就yum一个,反正也是自己玩玩 二.版本库创建 什么是版本库呢?版本库又名仓库,英文名repository,你可 ...

  3. day23 Pythonpython 本文re模块

    re模块用于对python的正则表达式的操作. 字符: . 匹配除换行符以外的任意字符 \w 匹配字母或数字或下划线或汉字 \s 匹配任意的空白符 \d 匹配数字 \b 匹配单词的开始或结束 ^ 匹配 ...

  4. day2-安装python以及基本使用

    安装Python windows 1.下载安装包 https://www.python.org/downloads/ 2.安装 默认安装路径:C:\python27 3.配置环境变量 [右键计算机]- ...

  5. linux内存源码分析 - 内存压缩(实现流程)

    本文为原创,转载请注明:http://www.cnblogs.com/tolimit/ 概述 本文章最好结合linux内存管理源码分析 - 页框分配器与linux内存源码分析 -伙伴系统(初始化和申请 ...

  6. .net core 简单项目的创建

    1.linux 安装net coref https://www.microsoft.com/net/learn/get-started/linuxubuntu 2.创建目录 2.创建控制台项目 第一次 ...

  7. vue编程式导航

    vue项目中使用到了组件间传值,通过路由跳转实现从产品页进入产品详情页查看功能. 使用了this.$router.push(编程式导航) product页面中:因为只需要遮住产品列表页来显示产品详情页 ...

  8. Linq to XML操作XML文件

    LINQ的类型 在MSDN官方文件中,LINQ分为几种类型: . LINQ to Objects(或称LINQ to Collection),这是LINQ的基本功能,针对集合对象进行查询处理,包括基本 ...

  9. .Net Core2.0下使用Dapper遇到的问题

    今天成功把.Net Framework下使用Dapper进行封装的ORM成功迁移到.Net Core 2.0上,在迁移的过程中也遇到一些很有意思的问题,值得和大家分享一下.下面我会还原迁移的每一个过程 ...

  10. Windows Community Toolkit 3.0 - InfiniteCanvas

    概述 InfiniteCanvas 是一个 Canvas 控件,它支持无限画布的滚动,支持 Ink,文本,格式文本,画布缩放操作,撤销重做操作,导入和导出数据. 这是一个非常实用的控件,在“来画视频” ...