六、HADOOP-HA(zookeeper之后)

一、HDFS的HA

HSFS传统集群只有一个NameNode,当此Manager宕机后,整个集群就宕机了,只有等管理员手动重启修复了NameNode之后,才会恢复。ha使整个集群拥有两个或两个以上的NameNode,其中一个为Active状态,其他的为Standby状态,当Active状态的NameNode宕机后,Standby状态中的一台NameNode会立即切换为Active状态,保证整个集群正常运行

二、HDFS-HA工作要点

1.元数据管理方式需要改变

内存中各自保存一份元数据;
Edits日志只有Active状态的namenode节点可以做写操作;
两个namenode都可以读取edits;
共享的edits放在一个共享存储中管理(qjournal和NFS两个主流实现);

2.需要一个状态管理功能模块

实现了一个zkfailover,常驻在每一个namenode所在的节点,每一个zkfailover负责监控自己所在namenode节点,利用zk进行状态标识,当需要进行状态切换时,由zkfailover来负责切换,切换时需要防止brain split现象的发生。

3.必须保证两个NameNode之间能够ssh无密码登录

4.隔离(Fence)

即同一时刻仅仅有一个NameNode对外提供服务

三、HDFS-HA自动故障转移工作机制

前面学习了使用命令hdfs haadmin -failover手动进行故障转移,在该模式下,即使现役NameNode已经失效,系统也不会自动从现役NameNode转移到待机NameNode,下面学习如何配置部署HA自动进行故障转移。自动故障转移为HDFS部署增加了两个新组件:ZooKeeper和ZKFailoverController(ZKFC)进程。ZooKeeper是维护少量协调数据,通知客户端这些数据的改变和监视客户端故障的高可用服务。HA的自动故障转移依赖于ZooKeeper的以下功能:
1)故障检测:集群中的每个NameNode在ZooKeeper中维护了一个持久会话,如果机器崩溃,ZooKeeper中的会话将终止,ZooKeeper通知另一个NameNode需要触发故障转移。
2)现役NameNode选择:ZooKeeper提供了一个简单的机制用于唯一的选择一个节点为active状态。如果目前现役NameNode崩溃,另一个节点可能从ZooKeeper获得特殊的排外锁以表明它应该成为现役NameNode。
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状态。


HA工作机制

四、 集群配置

1.环境准备

1)修改IP
2)修改主机名及主机名和IP地址的映射
3)关闭防火墙
4)ssh免密登录
5)安装JDK,配置环境变量等

2.规划集群

集群规划

3.配置Zookeeper集群

参考大数据学习之旅-Zookeeper

4.配置HDFS-HA集群

1)官方地址:http://hadoop.apache.org
2)在/opt/module目录下创建一个ha文件夹

mkdir /opt/module/ha

3)解压Hadoop到/opt/module/ha目录下

tar -zxvf hadoop-2.8.4.tar.gz -C /opt/module/ha

4)配置hadoop-env.sh

export JAVA_HOME=/opt/module/jdk1.8.0_212

5)配置core-site.xml

                 
                
                        fs.defaultFS
                        hdfs://mycluster
                

                
                
                        hadoop.tmp.dir
                        /opt/module/ha/hadoop-2.8.4/data/tmp
                

6)配置hdfs-site.xml

        
        
                dfs.nameservices
                mycluster
        

        
        
                dfs.ha.namenodes.mycluster
                nn1,nn2
        
        
        
                dfs.namenode.rpc-address.mycluster.nn1
                bigdata111:9000
        

        
        
                dfs.namenode.rpc-address.mycluster.nn2
                bigdata112:9000
        

        
        
                dfs.namenode.http-address.mycluster.nn1
                bigdata111:50070
        
        
        
                dfs.namenode.http-address.mycluster.nn2
                bigdata112:50070
        

        
        
                dfs.namenode.shared.edits.dir               
 qjournal://bigdata111:8485;bigdata112:8485;bigdata113:8485/mycluster
        

        
        
                dfs.ha.fencing.methods
                sshfence
        

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

        
        
                dfs.journalnode.edits.dir
                /opt/module/ha/hadoop-2.8.4/data/jn
        

        
        
                dfs.permissions.enable
                false
        

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

7)配置slaves文件
bigdata111
bigdata112
bigdata113
8)拷贝配置好的hadoop环境到其他节点
scp -r hadoop-2.8.4/ root@bigdata112:/opt/module/ha
scp -r hadoop-2.8.4/ root@bigdata113:/opt/module/ha

5.启动HDFS-HA集群

1)在各个JournalNode节点上,输入以下命令启动journalnode服务

sbin/hadoop-daemon.sh start journalnode

2)在[nn1]上,对其进行格式化,并启动

bin/hdfs namenode -format
sbin/hadoop-daemon.sh start namenode

3)在[nn2]上,同步nn1的元数据信息

bin/hdfs namenode -bootstrapStandby

4)启动[nn2]

sbin/hadoop-daemon.sh start namenode

5)查看web页面显示
image.png

image.png
6)启动所有datanode

sbin/hadoop-daemons.sh start datanode

7)将[nn1]切换为Active

bin/hdfs haadmin -transitionToActive nn1

8)查看是否Active

bin/hdfs haadmin -getServiceState nn1

image.png

6.配置HDFS-HA自动故障转移

(1)在hdfs-site.xml中增加

    dfs.ha.automatic-failover.enabled
    true

(2)在core-site.xml文件中增加

    ha.zookeeper.quorum
    bigdata111:2181,bigdata112:2181,bigdata113:2181

Hadoop的ha配置自动故障转移后,杀死active所在的namenode,Standby所在的namenode不会自动切换为active状态。
分析错误:查看zkcf的log日志
发现错误日志:
2019-05-05 03:59:38,306 WARN org.apache.hadoop.ha.SshFenceByTcpPort: PATH=$PATH:/sbin:/usr/sbin fuser -v -k -n tcp 9000 via ssh: bash: fuser: command not found
解决错误:这个原因是Linux系统没有fuser命令
导致在HA进行主备切换是执行fuser失败了
通过yum命令安装:yum -y install psmisc
安装完成再次测试,即可切换成功。

(3)关闭所有HDFS服务:sbin/stop-dfs.sh
(4)启动Zookeeper集群:bin/zkServer.sh start
(5)初始化HA在Zookeeper中状态:bin/hdfs zkfc -formatZK
(6)启动HDFS服务:sbin/start-dfs.sh
image.png

image.png

image.png
(7)在各个NameNode节点上启动DFSZK Failover Controller,先在哪台机器启动,哪个机器的NameNode就是Active NameNode

sbin/hadoop-daemon.sh start zkfc

(8)将Active NameNode进程kill:kill -9 namenode的进程id
(9)将Active NameNode机器断开网络:service network stop

7.配置YARN-HA集群

(1)规划集群
image.png
(2)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
        bigdata111
    

    
        yarn.resourcemanager.hostname.rm2
        bigdata112
    
 
     
    
        yarn.resourcemanager.zk-address
        bigdata111:2181,bigdata112:2181,bigdata113:2181
    

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



(3)mapred-site.xml配置

    
    
        mapreduce.framework.name
        yarn
    
    
    
        mapreduce.jobhistory.address
        bigdata111:10020
    
    
    
        mapreduce.jobhistory.webapp.address
        bigdata111:19888
    

(4)启动yarn

在bigdata111上执行:sbin/start-yarn.sh
在bigdata112上执行:sbin/yarn-daemon.sh start resourcemanager

(5)查看服务状态(注意:yarn自动切换需要稍等下大概5到10秒,就切换成功)

bin/yarn rmadmin -getServiceState rm1

image.png

image.png

image.png

image.png

你可能感兴趣的:(六、HADOOP-HA(zookeeper之后))