HadoopHA-QJM和NFS

hadoop安装几种方式介绍

  1. 单机模式:不需要配置任何东西,直接解压就可以使用,这种模式下不存在分布式文件系统,单机模式下数据的存取来源于本地文件系统,没有任何守护进程,该模式主要用于开发调试MapReduce程序的应用逻辑。
  2. 伪分布式模式:将hadoop安装在一个节点上,存在分布式文件系统,用起来和完全分布式没有区别,只是性能较差,一般常用于个人测试使用。
  3. 完全分布式:多台机器组成的hadoop集群,使用的是master-slave(一主多从)的架构,该模式由于只有一个namanode,存在单点故障问题,所以生成中一般很少使用。
  4. 高可用模式:该模式解决了完全分布式单点故障的问题,该模式下namenode有多个,但是只有一个处于活跃(active)的状态,其他的全部是热备份(standby)的状态,当namenode出现故障的时候会自动的切换到其他备份的namenode,这种hadoop搭建的模式在生产中经常使用,但是也有缺点,例如:同时对外提供服务的namenode只有一个,当随着业务数据的增多和集群的扩大,namenode的压力会越来越大。本文主要介绍这种方式的安装。
  5. 联邦模式:该模式试用大规模的集群,同一时间可以有多个namenode对外提供服务,每一个namenode只负责datanode一部分的数据的描述存储。

在hadoop2.0之前,namenode只有一个,存在单点问题(虽然hadoop1.0有secondarynamenode,checkpointnode,buckcupnode这些,但是单点问题依然存在),在hadoop2.0引入了HA机制。hadoop2.0的HA机制官方介绍了有2种方式,一种是NFS(Network File System)方式,另外一种是QJM(Quorum Journal Manager)方式。

2 基本原理

hadoop2.0的HA 机制有两个namenode,一个是active namenode,状态是active;另外一个是standby namenode,状态是standby。两者的状态是可以切换的,但不能同时两个都是active状态,最多只有1个是active状态。只有active namenode提供对外的服务,standby namenode是不对外服务的。active namenode和standby namenode之间通过NFS或者JN(journalnode,QJM方式)来同步数据。

active namenode会把最近的操作记录写到本地的一个edits文件中(edits file),并传输到NFS或者JN中。standby namenode定期的检查,从NFS或者JN把最近的edit文件读过来,然后把edits文件和fsimage文件合并成一个新的fsimage,合并完成之后会通知active namenode获取这个新fsimage。active namenode获得这个新的fsimage文件之后,替换原来旧的fsimage文件。

这样,保持了active namenode和standby namenode的数据的实时同步,standby namenode可以随时切换成active namenode(譬如active namenode挂了)。而且还有一个原来hadoop1.0的secondarynamenode,checkpointnode,buckcupnode的功能:合并edits文件和fsimage文件,使fsimage文件一直保持更新。所以启动了hadoop2.0的HA机制之后,secondarynamenode,checkpointnode,buckcupnode这些都不需要了。

3 NFS方式

NFS作为active namenode和standby namenode之间数据共享的存储。active namenode会把最近的edits文件写到NFS,而standby namenode从NFS中把数据读过来。这个方式的缺点是,如果active namenode或者standby namenode有一个和NFS之间网络有问题,则会造成他们之前数据的同步出问题。

Hadoop2.0的HA介绍

4 QJM(Quorum Journal Manager )方式

QJM的方式可以解决上述NFS容错机制不足的问题。active namenode和standby namenode之间是通过一组journalnode(数量是奇数,可以是3,5,7…,2n+1)来共享数据。active namenode把最近的edits文件写到2n+1个journalnode上,只要有n+1个写入成功就认为这次写入操作成功了,然后standby namenode就可以从journalnode上读取了。可以看到,QJM方式有容错的机制,可以容忍n个journalnode的失败。

Hadoop2.0的HA介绍

5 主备节点的切换

active namenode和standby namenode可以随时切换。当active namenode挂掉后,也可以把standby namenode切换成active状态,成为active namenode。可以人工切换和自动切换。人工切换是通过执行HA管理的命令来改变namenode的状态,从standby到active,或者从active到standby。自动切换则在active namenode挂掉的时候,standby namenode自动切换成active状态,取代原来的active namenode成为新的active namenode,HDFS继续正常工作。

主备节点的自动切换需要配置zookeeper。active namenode和standby namenode把他们的状态实时记录到zookeeper中,zookeeper监视他们的状态变化。当zookeeper发现active namenode挂掉后,会自动把standby namenode切换成active namenode。

Hadoop2.0的HA介绍

6 实战tips

  • QJM方式有明显的优点,一是本身就有fencing的功能,二是通过多个journal节点增强了系统的健壮性,所以建议在生成环境中采用QJM的方式。
  • journalnode消耗的资源很少,不需要额外的机器专门来启动journalnode,可以从hadoop集群中选几台机器同时作为journalnode。

介绍完hadoop2.0的HA的基本原理之后,后面的文章会分别详细介绍这两种方式的配置和原理。

原文链接:(2条消息) Hadoop2的高可用并取代SecondaryNamenode_jarth的专栏-CSDN博客