初识高可用Hadoop

最近搭建高可用Hadoop为了某个节点脑壳疼啊,以用jps查看进程就如刮彩票一样,太难了。

为此探个究竟,就不信有我搞不懂的,深呼吸不骂粗口......

附上高可用Hadoop集群的官方文档手册:https://hadoop.apache.org/docs/r2.7.2/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWithQJM.html

 

背景

官方文档里说的很清楚,假如Namenode在集群是单节点,那么出现了故障后集群或进程不可用了,整个集群也就停止服务了,知道节点重新启动。所以,在以下两种情况下就不得不停止服务了:

  1. 发生意外事故,例如机器崩了,集群不可用,知道Namenode重新启动
  2. 计划对Namenode机器进行软件硬件维护时,集群也就无法进行服务了

进而,高可用Hadoop也就为了解决这样的一个问题,实现一个集群里有两个Namenode进行乱流服务,其中一个出现上述情况都对整个集群没有天大的影响,也可以说是没有影响。

其中,想要搭建高可用Hadoop实验环境,可以参考我的笔记文档,如有错误可以留言指出!

 

原理

按照上面所说,设置两个Namenode轮流进行服务就要解决下面的几个问题:

  1. 保证Namenode内存中的元数据一样(Namenode里的fsimage文件和edit logs文件),还要进行同步的时候保证其安全性
  2. 必须只有一个Namenode处在服务状态
  3. 客户端如何正确的访问并请求正在服务的Namenode
  4. 两个Namenode是怎样进行协调服务的,也就是说:当一个正在服务的Namenode名称节点挂了是如何切换到另一个备用的Namenode的?

 

高可用Hadoop是如何解决上述的几个问题的呢?

  1. 通过journalnode对两个namenode节点进行数据共享
  2. 通过zookeeper维持只有一个Namenode对外进行服务
  3. 因为zookeeper在一直维持着只有一个Namenode进行服务,另一个只能进行数据备份操作以等待服务机会的出现
  4. 也是通过zookeeper进行管理并维持的,具体就是zookeeper里的zkfc客户端

所以,在上述的疑问和解答里,journalnode和zookeeper在高可用集群里占据核心地位呀。连datanode的老大namenode也要听它俩的管理和支配。

 

下面对两位重量级的老大进行一些列抄底解说:

整个“社团”的管理看下面

 

journalnode

这个journalnode的大致功能类似于NFS(Network  File System),不同的是NFS是linux共享的文件系统,属于操作系统的配置,而journalnode是hadoop自身的组件,属于软件的配置。

主namenode需要journalnode进行同步主要数据有:edits log(日志)、block列表信息以及DataNode心跳检测。

两个NameNode为了数据同步,会通过一组称作JournalNodes的独立进程进行相互通信。当active状态的NameNode的命名空间有任何修改时,会告知大部分的JournalNodes进程,JournalNode实时从Active NameNode上拷贝edits文件。standby状态的NameNode有能力读取JNS中的变更信息,并且一直监控edit log的变化,把变化应用于自己的命名空间。standby可以确保在集群出错时,命名空间状态已经完全同步了。JournalNode有三台也是为了实现高可用。

 

zookeeper

zookeeper顾名思义 动物园管理员,他是拿来管大象(Hadoop) 、 蜜蜂(Hive) 等的管理员, zookeeper是一个分布式的,开放源码的分布式应用程序协调服务。

主namenode和备namenode的切换时自动切换的,通过zookeeper集群来完成!

 

首先添加zookeeper集群,在每个namenode上运行一个zkfc进程(zkfc是zookeeper的客户端)。zkfc要和zookeeper集群保持长连接和心跳。

在集群启动的时候,两个namenode都处于standby状态, 两个namenode的各自的zkfc要向zookeeper集群抢占创建一个临时节点Znode,该临时节点保存了主namenode的信息,哪个zkfc创建成功,则哪个zkfc所在主机上的namenode为主namenode。

namenode上的zkfc要监控主nameNode创建的临时节点,一旦主namenode出现故障,zkfc将删除该临时节点(实际上是因为主namenode上的zkfc不能和zookeeper集群保持心跳连接,临时节点消失),临时节点消失,则备namenode上的zkfc要向zookeeper集群抢占创建临时节点,如果创建成功,备namenode升级为主namenode。

在备份namenode升级为主namenode之前,要和原来的namenode通信,确保原来的namenode已经不能提供服务。如果原来的namenode是由于网络延迟等原因导致的临时节点消失(也就是说还能提供服务),则杀死原来的namenode。

想不到吧?连服务器都上演了香港大片黑社会的剧情。

所以,HDFS HA架构中有两台NameNode节点,一台是处于活动状态(Active)为客户端提供服务,另外一台处于热备份状态。

 

点赞

发表评论

昵称和uid可以选填一个,填邮箱必填(留言回复后将会发邮件给你)
tips:输入uid可以快速获得你的昵称和头像

Title - Artist
0:00