HDFS HA(High Availability)高可用配置官方参考网址 http://hadoop.apache.org/docs/r2.7.3/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html
Prior to Hadoop 2.0.0, the NameNode was a single point of failure (SPOF) in an HDFS cluster. Each cluster had a single NameNode, and if that machine or process became unavailable, the cluster as a whole would be unavailable until the NameNode was either restarted or brought up on a separate machine. 在Hadoop 2.0.0之前,NameNode是HDFS集群中的单点故障(SPOF)。 每个集群都有一个NameNode,如果该机器或进程变得不可用,则整个集群将不可用,直到NameNode重新启动或在单独的计算机上启动。
下面两个方面影响了HDFS集群的总体可用性:
The HDFS High Availability feature addresses the above problems by providing the option of running two redundant NameNodes in the same cluster in an Active/Passive configuration with a hot standby. This allows a fast failover to a new NameNode in the case that a machine crashes, or a graceful administrator-initiated failover for the purpose of planned maintenance. HDFS高可用性功能通过提供在具有热备用的主动/被动配置中的同一集群中运行两个冗余名称节点的选项来解决上述问题。 这允许在机器崩溃的情况下快速故障转移到新的NameNode,或者为了计划维护而对管理员启动的优化转换进行了优雅。
Hadoop2.x(HA)中HDFS的高可靠指的是可以同时启动2个NameNode。其中一个处于工作状态(Active ),另一个处于随时待命状态(Standby)。当一个Active NameNode所在的服务器宕机时,可以在数据不丢失的情况下,手工或者自动将另一个Standby NameNode切换到Active 并继续提供服务。
JournalNode作用: (1)为了使备用节点(Standby NameNode)将其状态与Active节点保持同步,两个节点与一组名为“JournalNode”(JN)的单独守护程序进行通信。 (2)当Active NameNode执行任何命名空间修改时,会把最近的操作记录写到本地的一个edits文件中(edits file),并传输到大部分中JournalNode(写入2n+1个journalnode上,只要有n+1个写入成功就认为这次写入操作成功了)。 (3)standby namenode定期的检查,从JournalNode把最近的edit文件读过来,然后把edits文件和fsimage文件合并成一个新的fsimage。Standby NameNode可以确保在集群出错时,NameNode命名空间状态已经完全同步了。 (4)standby namenode合并生成新的fsimage后会通知active namenode获取这个新fsimage。active namenode获得这个新的fsimage文件之后,替换原来旧的fsimage文件。
主备节点的切换: 为了提供快速故障切换,还需要备用节点具有关于集群中块的位置的最新信息。为了实现这一点,DataNodes被配置为具有两个NameNodes的位置,并且向两者发送块位置信息和心跳。 人工切换是通过执行HA管理的命令来改变namenode的状态,从standby到active,或者从active到standby。自动切换则在active namenode挂掉的时候,standby namenode自动切换成active状态,取代原来的active namenode成为新的active namenode,HDFS继续正常工作。
对于HA群集的正确操作至关重要,因此一次只能有一个NameNodes处于活动状态。否则,命名空间状态将在两者之间迅速分歧,冒数据丢失或其他不正确的结果。为了确保这个属性并防止所谓的“分裂大脑情景”,JournalNodes将只允许一个NameNode作为一个作者向JournalNodes写数据。在故障切换期间,要变为活动状态的NameNode将简单地接管写入JournalNodes的角色,这将有效地防止其他NameNode继续处于活动状态,允许新的Active安全地进行故障切换。
主备节点的自动切换需要配置zookeeper。active namenode和standby namenode把他们的状态实时记录到zookeeper中,zookeeper监视他们的状态变化。当zookeeper发现active namenode挂掉后,会自动把standby namenode切换成active namenode。
为了部署HA群集,您应该准备以下内容:
请注意,在HA群集中,Standby NameNode还执行命名空间状态的检查点,因此不需要在HA群集中运行Secondary NameNode,CheckpointNode或BackupNode。其实这样做会是一个错误。这也允许正在重新配置非HA使能的HDFS集群的HA被启用以重新使用它们之前专用于Secondary NameNode的硬件。