二十三、Hadoop的HA(高可用)

       今天来给Hadoop的部分收收尾,这是Hadoop系列的最后一篇文章了,因为HA需要用到Zookeeper,所以在讲解了Zookeeper的部分内容后,才重新回过头来看Hadoop的HA部分,关注专栏《破茧成蝶——大数据篇》,查看更多相关的内容~


目录

一、HA概述

二、HDFS HA

2.1 HDFS HA工作机制

2.1.1 工作要点

2.1.2 工作机制

2.2 HDFS HA配置

2.2.1 环境准备

2.2.2 集群节点规划

2.2.3 配置Zookeeper集群

2.2.4 配置HDFS HA

2.2.5 启动HDFS HA集群

2.2.6 配置自动故障转移

三、Yarn HA

3.1 规划集群

3.2 配置Yarn HA


 

一、HA概述

       HA(High Available),即高可用(7*24小时不中断服务)。实现高可用最关键的策略是消除单点故障。HA严格来说应该分成各个组件的HA机制:HDFS的HA和YARN的HA。Hadoop2.0之前,在HDFS集群中NameNode存在单点故障(SPOF)。NameNode主要在以下两个方面影响HDFS集群:(1)NameNode机器发生意外,如宕机,集群将无法使用,直到管理员重启。(2)NameNode机器需要升级,包括软件、硬件升级,此时集群也将无法使用。
       HDFS HA功能通过配置Active/Standby两个NameNode实现在集群中对NameNode的热备来解决上述问题。如果出现故障,如机器崩溃或机器需要升级维护,这时可通过此种方式将NameNode很快的切换到另外一台机器。

二、HDFS HA

2.1 HDFS HA工作机制

2.1.1 工作要点

       1、元数据管理方式需要改变。
       (1)内存中各自保存一份元数据;
       (2)Edits日志只有Active状态的NameNode节点可以做写操作;
       (3)两个NameNode都可以读取Edits;
       (4)共享的Edits放在一个共享存储中管理(qjournal和NFS两个主流实现);
       2、需要一个状态管理功能模块。
       实现了一个zkfailover,常驻在每一个namenode所在的节点,每一个zkfailover负责监控自己所在NameNode节点,利用zk进行状态标识,当需要进行状态切换时,由zkfailover来负责切换,切换时需要防止brain split现象的发生。
       3、必须保证两个NameNode之间能够ssh无密码登录。
       4、隔离(Fence),即同一时刻仅仅有一个NameNode对外提供服务。

2.1.2 工作机制

       1、自动故障转移为HDFS部署增加了两个新组件:ZooKeeper和ZKFailoverController(ZKFC)进程。ZooKeeper是维护少量协调数据,通知客户端这些数据的改变和监视客户端故障的高可用服务。HA的自动故障转移依赖于ZooKeeper的以下功能:

       (1)故障检测:集群中的每个NameNode在ZooKeeper中维护了一个持久会话,如果机器崩溃,ZooKeeper中的会话将终止,ZooKeeper通知另一个NameNode需要触发故障转移。
       (2)现役NameNode选择:ZooKeeper提供了一个简单的机制用于唯一的选择一个节点为active状态。如果目前现役NameNode崩溃,另一个节点可能从ZooKeeper获得特殊的排外锁以表明它应该成为现役NameNode。

       2、ZKFC是自动故障转移中的另一个新组件,是ZooKeeper的客户端,也监视和管理NameNode的状态。每个运行NameNode的主机也运行了一个ZKFC进程,ZKFC负责:

       (1)健康监测:ZKFC使用一个健康检查命令定期地ping与之在相同主机的NameNode,只要该NameNode及时地回复健康状态,ZKFC认为该节点是健康的。如果该节点崩溃,冻结或进入不健康状态,健康监测器标识该节点为非健康的。
       (2)ZooKeeper会话管理:当本地NameNode是健康的,ZKFC保持一个在ZooKeeper中打开的会话。如果本地NameNode处于active状态,ZKFC也保持一个特殊的znode锁,该锁使用了ZooKeeper对短暂节点的支持,如果会话终止,锁节点将自动删除。
       (3)基于ZooKeeper的选择:如果本地NameNode是健康的,且ZKFC发现没有其它的节点当前持有znode锁,它将为自己获取该锁。如果成功,则它已经赢得了选择,并负责运行故障转移进程以使它的本地NameNode为Active。故障转移进程与前面描述的手动故障转移相似,首先如果必要保护之前的现役NameNode,然后本地NameNode转换为Active状态。

2.2 HDFS HA配置

2.2.1 环境准备

       包括:修改IP,更改主机名、主机映射,关闭防火墙,关闭安全子系统,配置免秘钥登录,安装JDK配置环境变量等等。这些在前文中都有说道,在这就不再赘述了,可以参考《二、Linux下搭建Hadoop的运行环境》。

2.2.2 集群节点规划

master

 slave01

slave02

NameNode    

NameNode

 

JournalNode  

JournalNode  

JournalNode  

DataNode

DataNode

DataNode

ZK 

ZK 

ZK 

 

ResourceManager

 

NodeManager

NodeManager

NodeManager

2.2.3 配置Zookeeper集群

       步骤同《二、Linux安装Zookeeper》中分布式安装Zookeeper的步骤。

2.2.4 配置HDFS HA

1、首先在/opt/modules目录下新建ha目录,并将hadoop-2.7.2目录拷贝到ha目录下:

二十三、Hadoop的HA(高可用)_第1张图片

2、在hadoop-env.sh中配置JAVA_HOME:

3、配置core-site.xml文件


	
	
		fs.defaultFS
    	hdfs://namenodecluster
	

	
	
		hadoop.tmp.dir
		/opt/modules/ha/hadoop-2.7.2/data/tmp
	

二十三、Hadoop的HA(高可用)_第2张图片

4、配置hdfs-site.xml文件


	
	
		dfs.nameservices
		namenodecluster
	

	
	
		dfs.ha.namenodes.namenodecluster
		nn1,nn2
	

	
	
		dfs.namenode.rpc-address.namenodecluster.nn1
		master:9000
	

	
	
		dfs.namenode.rpc-address.namenodecluster.nn2
		slave01:9000
	

	
	
		dfs.namenode.http-address.namenodecluster.nn1
		master:50070
	

	
	
		dfs.namenode.http-address.namenodecluster.nn2
		slave01:50070
	

	
	
		dfs.namenode.shared.edits.dir
	qjournal://master:8485;slave01:8485;slave02:8485/namenodecluster
	

	
	
		dfs.ha.fencing.methods
		sshfence
	

	
	
		dfs.ha.fencing.ssh.private-key-files
		/root/.ssh/id_rsa
	

	
	
		dfs.journalnode.edits.dir
		/opt/modules/ha/hadoop-2.7.2/data/jn
	

	
	
		dfs.permissions.enable
		false
	

	
	
  		dfs.client.failover.proxy.provider.mycluster
	org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
	

5、将设置好的文件分发到其他节点

xsync /opt/modules/ha

2.2.5 启动HDFS HA集群

1、首先启动journalnode服务:

sbin/hadoop-daemons.sh start journalnode

2、在nn1上格式化NameNode并启动:

bin/hdfs namenode -format

二十三、Hadoop的HA(高可用)_第3张图片

sbin/hadoop-daemon.sh start namenode

3、在nn2上同步nn1的元数据信息并启动,这里需要注意的是:NameNode只能格式化一次!

bin/hdfs namenode -bootstrapStandby

二十三、Hadoop的HA(高可用)_第4张图片

sbin/hadoop-daemon.sh start namenode

4、浏览器访问进行测试

二十三、Hadoop的HA(高可用)_第5张图片

二十三、Hadoop的HA(高可用)_第6张图片

5、在nn1上启动所有的DataNode

sbin/hadoop-daemons.sh start datanode

6、将nn1的NameNode更改为Active

bin/hdfs haadmin -transitionToActive nn1

再次刷新浏览器:

二十三、Hadoop的HA(高可用)_第7张图片

也可以使用命令查看nn1是否为Active:

bin/hdfs haadmin -getServiceState nn1

2.2.6 配置自动故障转移

1、修改hdfs-site.xml配置文件,在下方添加如下内容:

	
		dfs.ha.automatic-failover.enabled
		true
	

2、在core-site.xml文件中增加如下内容:

	
		ha.zookeeper.quorum
		master:2181,slave01:2181,slave02:2181
	

配置完之后别忘了将修改的文件分发到其余的机器。

3、 删除目录下的data和logs文件。

rm -rf ./data ./logs

二十三、Hadoop的HA(高可用)_第8张图片

4、启动服务

(1)首先启动Zookeeper集群和journalnode服务。

bin/zkServer.sh start

sbin/hadoop-daemons.sh start journalnode

(2)格式化NameNode,同样的,只在一台机器上格式化即可。

bin/hdfs namenode -format

(3)初始化HA在Zookeeper中状态,值得注意的是,只需要在其中一台机器上执行就可以了

bin/hdfs zkfc -formatZK

二十三、Hadoop的HA(高可用)_第9张图片

此处,相当于在Zookeeper中新建了一个Node,如下所示:

 二十三、Hadoop的HA(高可用)_第10张图片

(4)启动HDFS服务

sbin/start-dfs.sh

(5)在nn2上执行如下命令同步nn1的元数据信息 

bin/hdfs namenode -bootstrapStandby

(6)单独启动nn2的NameNode

sbin/hadoop-daemon.sh start namenode

5、测试验证

目前,是master节点的NameNode处于Active的状态,现在我们手动杀死master节点的NameNode,发现slave01节点上的NameNode自动的由Standby转换为Active。

二十三、Hadoop的HA(高可用)_第11张图片

三、Yarn HA

3.1 规划集群

hadoop102

hadoop103 

hadoop104

NameNode    

NameNode

 

JournalNode  

JournalNode  

JournalNode  

DataNode

DataNode

DataNode

ZK

ZK

ZK

ResourceManager 

ResourceManager 

 

NodeManager

NodeManager

NodeManager

3.2 配置Yarn HA

1、在yarn-site.xml中添加如下配置



    
        yarn.nodemanager.aux-services
        mapreduce_shuffle
    

    
    
        yarn.resourcemanager.ha.enabled
        true
    
 
    
    
        yarn.resourcemanager.cluster-id
        cluster-yarn1
    

    
        yarn.resourcemanager.ha.rm-ids
        rm1,rm2
    

    
        yarn.resourcemanager.hostname.rm1
        master
    

    
        yarn.resourcemanager.hostname.rm2
        slave01
    
 
     
    
        yarn.resourcemanager.zk-address
        master:2181,slave01:2181,slave02:2181
    

     
    
        yarn.resourcemanager.recovery.enabled
        true
    
 
     
    
        yarn.resourcemanager.store.class
        org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore


2、将修改的内容同步到其余各个节点。

二十三、Hadoop的HA(高可用)_第12张图片

3、启动服务

(1)启动Zookeeper

bin/zkServer.sh start

(2)启动hdfs相关服务

sbin/start-dfs.sh

(3)启动yarn服务

sbin/start-yarn.sh

此时,需要去另外一条机器上启动ResourceManager。

sbin/yarn-daemon.sh start resourcemanager

4、查看状态

bin/yarn rmadmin -getServiceState rm1

二十三、Hadoop的HA(高可用)_第13张图片

通过页面访问,不管输入的是master还是slave01,都会跳转到active状态的节点上,这里是master:

二十三、Hadoop的HA(高可用)_第14张图片

 

本文到此也就结束了,你们在此过程中存在什么问题,欢迎留言,让我看看你们都遇到了什么问题~

 

你可能感兴趣的:(破茧成蝶——大数据篇,hadoop,hdfs,yarn,ha)