Hadoop 2.0 NameNode HA和Federation实践

一、背景

天云趋势在2012年下半年开始为某大型国有银行的历史交易 数据备份及查询提供基于Hadoop的技术解决方案,由于行业的特殊性,客户对服 务的可用性有着非常高的要求,而HDFS长久以来都被单点故障的问题所困扰,直 到Apache Hadoop在2012年5月发布了2.0的alpha版本,其中MRv2还很不成熟,可 HDFS的新功能已经基本可用,尤其是其中的的High Availability(以下简称HA) 和Federation。Cloudera也于7月制作了CDH4.0.1,包含了Hadoop 2.0的诸多新 功能和组件,于是我们就基于CDH4.0.1进行了HA和Federation的测试。

此工作由我和同事张军、钱兴会共同完成。

二、为什么需要HA和 Federation

1. 单点故障

在Hadoop 2.0之前,也有若干技术试图 解决单点故障的问题,我们在这里做个简短的总结

Secondary NameNode。它不是HA,它只是阶段性的合并edits和fsimage,以 缩短集群启动的时间。当NameNode(以下简称NN)失效的时候,Secondary NN并无 法立刻提供服务,Secondary NN甚至无法保证数据完整性:如果NN数据丢失的话 ,在上一次合并后的文件系统的改动会丢失。

Backup NameNode (HADOOP-4539)。它在内存中复制了NN的当前状态,算是 Warm Standby,可也就仅限于此,并没有failover等。它同样是阶段性的做 checkpoint,也无法保证数据完整性。

手动把name.dir指向NFS。这是安全的Cold Standby,可以保证元数据不丢失 ,但集群的恢复则完全靠手动。

Facebook AvatarNode。Facebook有强大的运维做后盾,所以Avatarnode只是 Hot Standby,并没有自动切换,当主NN失效的时候,需要管理员确认,然后手 动把对外提供服务的虚拟IP映射到Standby NN,这样做的好处是确保不会发生脑 裂的场景。其某些设计思想和Hadoop 2.0里的HA非常相似,从时间上来看, Hadoop 2.0应该是借鉴了Facebook的做法。

还有若干解决方案,基本都是依赖外部的HA机制,譬如DRBD,Linux HA, VMware的FT等等。

2. 集群容量和集群性能

单NN的架构使得HDFS在集群扩展性和性能上 都有潜在的问题,当集群大到一定程度后,NN进程使用的内存可能会达到上百G ,常用的估算公式为1G对应1百万个块,按缺省块大小计算的话,大概是64T (这 个估算比例是有比较大的富裕的,其实,即使是每个文件只有一个块,所有元数 据信息也不会有1KB/block)。同时,所有的元数据信息的读取和操作都需要与NN 进行通信,譬如客户端的addBlock、getBlockLocations,还有DataNode的 blockRecieved、sendHeartbeat、blockReport,在集群规模变大后,NN成为了 性能的瓶颈。Hadoop 2.0里的HDFS Federation就是为了解决这两个问题而开发 的。

三、Hadoop 2.0里HA的实现方式

图片来源: HDFS-1623 设计文档

图片作者: Sanjay Radia, Suresh Srinivas

在这个图里,我们可以看出HA的大致架构,其设计上的考虑包 括:

利用共享存储来在两个NN间同步edits信息。    以前的HDFS是 share nothing but NN,现在NN又share storage,这样其实是转移了单点故障 的位置,但中高端的存储设备内部都有各种RAID以及冗余硬件包括电源以及网卡 等,比服务器的可靠性还是略有提高。通过NN内部每次元数据变动后的flush操 作,加上NFS的close-to-open,数据的一致性得到了保证。社区现在也试图把元 数据存储放到BookKeeper上,以去除对共享存储的依赖,Cloudera也提供了 Quorum Journal Manager的实现和代码,这篇中文的blog有详尽分析:基于 QJM/Qurom Journal Manager/Paxos的HDFS HA原理及代码分析

DataNode(以下简称DN)同时向两个NN汇报块信息。    这是让 Standby NN保持集群最新状态的必需步骤,不赘述。

用于监视和控制NN进程的FailoverController进程    显然,我 们不能在NN进程内进行心跳等信息同步,最简单的原因,一次FullGC就可以让NN 挂起十几分钟,所以,必须要有一个独立的短小精悍的watchdog来专门负责监控 。这也是一个松耦合的设计,便于扩展或更改,目前版本里是用ZooKeeper(以下 简称ZK)来做同步锁,但用户可以方便的把这个ZooKeeper FailoverController( 以下简称ZKFC)替换为其他的HA方案或leader选举方案。

隔离(Fencing)),防止脑裂),就是保证在任何时候只有一个主NN,包括三个 方面:

共享存储fencing,确保只有一个NN可以写入edits。

客户端fencing,确保只有一个NN可以响应客户端的请求。

DataNode fencing,确保只有一个NN可以向DN下发命令,譬如删除块,复制 块,等等。

四、Hadoop 2.0里Federation的实现方式

图片来源: HDFS-1052 设计文档

图片作者: Sanjay Radia, Suresh Srinivas

时间: 2024-11-01 17:14:51

Hadoop 2.0 NameNode HA和Federation实践的相关文章

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

基于社区最新release的Hadoop2.2.0版本,调研了hadoop HA方面的内容.hadoop2.0主要的新特性(Hadoop2.0稳定版2.2.0新特性剖析): hdfs snapshots: apache官方对hdfs snapshots说明 namenode federation: namenode在集群规模大了之后会成为性能瓶颈,尤其是内存使用量急剧增大,同时hdfs所有元数据信息的读取和操作都要与namenode通信.而联邦模式解决的就是namenode的可扩展性问题.更多内

BookKeeper设计介绍及其在Hadoop2.0 Namenode HA方案中的使用分析

BookKeeper背景 BK是一个可靠的日志流记录系统,用于将系统产生的日志(也可以是其他数据)记录在BK集群上,由BK这个第三方Storage保证数据存储的可靠和一致性.典型场景是系统写write-ahead log,即先把log写到BK上,再对log做处理,比如将log写到内存的数据结构中.BookKeeper同时适用于任何单点写入并要求保证高性能和数据不丢失(Strong Durabilty Guarantees)的场景. BK诞生于Hadoop2.0的namenode HA.在Hado

【干货】Apache Hadoop 2.8 完全分布式集群搭建超详细过程,实现NameNode HA、ResourceManager HA高可靠性

最近在自己的笔记本电脑上搭建了Apache Hadoop分布式集群,采用了最新的稳定版本2.8,并配置了NameNode.ResourceManager的HA高可用,方便日常对Hadoop的研究与测试工作.详细的搭建过程如下: 1.安装docker,创建docker容器,用于搭建hadoop节点 docker真是个好东西啊,当要在自己的笔记本上搭建分布式集群时,由于CPU.内存.磁盘有限,无法在VMware上虚拟出太多节点,这时使用docker创建几个容器,就能轻松搭建一个分布式集群了. (1)

淘宝主搜索离线集群完成Hadoop 2.0升级

搜索离线dump集群(hadoop&hbase)2013进行了几次重大升级: 2013-04 第一阶段,主要是升级hdfs为2.0版本,mapreduce仍旧是1.0;同时hbase也进行了一次重大升级(0.94.5版本),hive升级到0.9.0: 2013-09,2013-12 第二阶段,主要升级mapreduce到2.0版本即(YARN),hive升级到0.10.0,在13年年底的时候对hbase进行了一次小版本升级: 至此,dump离线集群完全进入2.0时代: 通过升级hdfs 2.0优

一脸懵逼学习Hadoop分布式集群HA模式部署(七台机器跑集群)

1)集群规划:主机名        IP      安装的软件                     运行的进程master    192.168.199.130   jdk.hadoop                     NameNode.DFSZKFailoverController(zkfc)slaver1    192.168.199.131    jdk.hadoop                       NameNode.DFSZKFailoverController(

Hadoop-2.7.0中HDFS NameNode HA实现之DFSZKFailoverController、ZKFailoverController(一)

一.简介       DFSZKFailoverController是Hadoop-2.7.0中HDFS NameNode HA实现的中心组件,它负责整体的故障转移控制等.它是一个守护进程,通过main()方法启动,继承自ZKFailoverController. 二.实现流程       1.启动        通过main()方法启动,如下: /** * 进程启动的main()方法 */ public static void main(String args[]) throws Except

Hadoop-2.7.0中HDFS NameNode HA实现综述

一.原理       HDFS中NameNode等的HA是基于ZooKeeper实现的.它应用了ZooKeeper集群的如下功能或特性:       1.只要半数以上节点还存活,就继续能对外提供服务:       2.ZooKeeper通过Paxos算法提供了leader选举功能,其它follower learn leader:       3.ZooKeeper提供了watcher机制,只要ZooKeeper上znode增减,或内容发生变化,或其子znode有增减,客户端都可以通过注册的wat

Hadoop 2.0中的基本术语解释

(1) Hadoop 1.0 第一代Hadoop,由分布式存储系统HDFS和分布式计算框架MapReduce组成,其中,HDFS由一个NameNode和多个DataNode组成,MapReduce由一个JobTracker和多个TaskTracker组成,对应Hadoop版本为Hadoop 1.x和0.21.X,0.22.x. (2) Hadoop 2.0 第二代Hadoop,为克服Hadoop 1.0中HDFS和MapReduce存在的各种问题而提出的.针对Hadoop 1.0中的单NameN

如何正确配置hadoop中的namenode

问题描述 如何正确配置hadoop中的namenode 我现在在配置hadoop,可是在格式化hadoop时,提示aborted at /home/user/hadoop/hadoop1.0.2/hdfs/name,不知道什么原因导致了这个问题,请大神们加以指点... 本人初学者,很多还不懂...