Hadoop(六)Hadoop-HA模式(超详细,剑指第一)

写在前面

  本文为hadoop系列博客最后一篇博客,下篇博客开启Hive篇章,敬请期待。那这篇博客讲了个什么事呢?白话一下:就是HDFS和Yarn在集群里只能有一个namenode和resourcemanager,那么如果有一天他俩挂了,我们究竟要怎么做,才能使新的namenode或resourcemanager以最短的时间接管集群。大多数情况下我们会启动一个 NameNode 的热备(Warm standby )节点。也就是说当主节点不能正常服务时,由热备节点进行接替。此时主备节点切换时间为服务恢复时间,服务恢复时间越短高可用性越大(HA越大)。

一,概述

  HA 的英文全称是 High Availability,中文翻译为高可用性。HA 的定义为 系统对外正常提供服务时间的百分比。
  实现高可用最关键的策略是消除单点故障。HA严格来说应该分成各个组件的HA机制:HDFS的HA和YARN的HA。即 NameNode HA with QJM和ResourcesManager HA
  具体来说,集群的可靠性可用平均无故障时间(MTTF)来度量,即集群正常服务的平均运行时间,集群的可维护性用平均维修时间(MTTR)来度量,即集群从不能正常服务到重新正常服务所需要的平均维修时间。
  因此 HA 可精确定义为:MTTF/(MTTF+MTTR) * 100%

  1.NameNode HA

  HDFS HA功能通过NameNode的热备来解决故障问题。如果出现故障,如机器崩溃或机器需要升级维护,这时可通过此种方式将热备NameNode很快的切换到另外一台机器。

  那么要实现主备节点的切换,就要对传统的框架进行一些改变:

  1. 元数据管理方法
    需要两个namenode来分别做主备节点(zookeeper的去集群中心化)
  2. 增加一个状态管理功能模块
    就是说得有一个进程来管理namenode的状态,判断他是否在正常运行(zookeeper的zkfailover进程)
  3. 保证两个主备NameNode之间能够ssh无密码登录
  4. 隔离(Fence),即同一时刻仅仅有一个NameNode对外提供服务(两个namenode同时工作的情况称为脑裂现象)

  主备节点切换的细节

  1. 故障检测
    集群中的每个NameNode在ZooKeeper中维护了一个会话,如果机器崩溃,ZooKeeper中的会话将终止,ZooKeeper通知另一个NameNode需要触发故障转移。

  2. 现役namenode选择
    ZooKeeper提供了一个简单的机制用于唯一的选择一个节点为active状态。如果目前现役NameNode崩溃,另一个节点可能从ZooKeeper获得特殊的排外锁以表明它应该成为现役NameNode。
    ZKFC是自动故障转移中的另一个新组件,是ZooKeeper的客户端,也监视和管理NameNode的状态。每个运行NameNode的主机也运行了一个ZKFC进程。
    ZKFC负责:

  3. 健康监测
    ZKFC使用一个健康检查命令定期地ping与之在相同主机的NameNode,只要该NameNode及时地回复健康状态,ZKFC认为该节点是健康的。如果该节点崩溃,冻结或进入不健康状态,健康监测器标识该节点为非健康的。

  4. ZooKeeper会话管理
    当本地NameNode是健康的,ZKFC保持一个在ZooKeeper中打开的会话。如果本地NameNode处于active状态,ZKFC也保持一个特殊的znode锁,该锁使用了ZooKeeper对短暂节点的支持,如果会话终止,锁节点将自动删除。

  5. 基于ZooKeeper的选择
    如果本地NameNode是健康的,且ZKFC发现没有其它的节点当前持有znode锁,它将为自己获取该锁。如果成功,则它已经赢得了选择,并负责运行故障转移进程以使它的本地NameNode为Active。
      2.ResourceManager HA
      官方文档链接如下:http://hadoop.apache.org/docs/r3.1.3/hadoop-yarn/hadoop-yarn-site/ResourceManagerHA.html
      RM可以选择嵌入基于Zookeeper的ActiveStandbyElector,以确定哪个RM应该是Active。当Active发生故障或无响应时,另一个RM将自动被选为Active,然后接管。请注意,不需要像HDFS那样运行单独的ZKFC守护程序,因为嵌入在RM中的ActiveStandbyElector充当故障检测器和领导者选举者,而不是单独的ZKFC守护进程。
      思考一下,为啥Yarn有内嵌故障检测器,而HDFS没有呢?(是因为第一代hadoop里mapreduce包含了分布式计算和资源调配的功能,到了第二代把mapreduce的资源调配功能分离了出来做成了yarn,在第二代hadoop发行的时候,zookeeper也在发行,这时候一些大神就把ZKFC的函数直接加在yarn上了。)
    Hadoop(六)Hadoop-HA模式(超详细,剑指第一)_第1张图片

二,Namenode HA搭建

  1. 在/opt下新建ha目录,并将hadoop安装包拷贝一份
sudo mkdir /opt/ha
sudo chown atguigu:atguigu /opt/ha
cp -r /opt/module/hadoop-3.1.3 /opt/ha
rm -rf /opt/ha/hadoop-3.1.3/data /opt/ha/hadoop-3.1.3/logs
  1. 修改/opt/ha/hadoop-3.1.3的配置文件
  • core-site.xml


<configuration>
    <property>
        <name>fs.defaultFSname>
        <value>hdfs://myclustervalue>
    property>
    <property>
        <name>hadoop.tmp.dirname>
        <value>/opt/ha/hadoop-3.1.3/datavalue>
    property>
    <property>
        <name>hadoop.proxyuser.atguigu.hostsname>
        <value>*value>
    property>
    <property>
        <name>hadoop.proxyuser.atguigu.groupsname>
        <value>*value>
    property>
    <property>
        <name>hadoop.http.staticuser.username>
        <value>atguiguvalue>
    property>
    <property>
	    <name>ha.zookeeper.quorumname>
	    <value>hadoop102:2181,hadoop103:2181,hadoop104:2181value>
    property>

configuration>
  • hdfs-site.xml


<configuration>
  <property>
    <name>dfs.nameservicesname>
    <value>myclustervalue>
  property>
  <property>
    <name>dfs.ha.namenodes.myclustername>
    <value>nn1,nn2, nn3value>
  property>
  <property>
    <name>dfs.namenode.rpc-address.mycluster.nn1name>
    <value>hadoop102:8020value>
  property>
  <property>
    <name>dfs.namenode.rpc-address.mycluster.nn2name>
    <value>hadoop103:8020value>
  property>
  <property>
    <name>dfs.namenode.rpc-address.mycluster.nn3name>
    <value>hadoop104:8020value>
  property>
  <property>
    <name>dfs.namenode.http-address.mycluster.nn1name>
    <value>hadoop102:9870value>
  property>
  <property>
    <name>dfs.namenode.http-address.mycluster.nn2name>
    <value>hadoop103:9870value>
  property>
  <property>
    <name>dfs.namenode.http-address.mycluster.nn3name>
    <value>hadoop104:9870value>
  property>
  <property>
    <name>dfs.journalnode.edits.dirname>
    <value>${hadoop.tmp.dir}/jnvalue>
  property>
  <property>
    <name>dfs.namenode.shared.edits.dirname>
    <value>qjournal://hadoop102:8485;hadoop103:8485;hadoop104:8485/myclustervalue>
  property>
  <property>
    <name>dfs.client.failover.proxy.provider.myclustername>
    <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvidervalue>
  property>
  <property>
    <name>dfs.ha.fencing.methodsname>
    <value>sshfencevalue>
  property>
  <property>
    <name>dfs.ha.fencing.ssh.private-key-filesname>
    <value>/home/atguigu/.ssh/id_ecdsavalue>
  property>
  <property>
	<name>dfs.ha.automatic-failover.enabledname>
	<value>truevalue>
  property>
configuration>
  1. 发送hadoop到所有 节点
sudo xsync /opt/ha
  1. 修改环境变量
#HADOOP_HOME
export HADOOP_HOME=/opt/ha/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
sudo xsync /etc/profile.d/my_env.sh

source一下或者重启session

  1. 启动JournalNode

在任意一台节点执行

hdfs --workers --daemon start journalnode
  1. 32格式化NN
    第五步执行完后,等一段时间再格式化。
hdfs --workers --daemon start journalnode
  1. 33,34同步32的元数据
    在33,34上执行同步命令,并启动Namenode
hdfs namenode -bootstrapStandby
hdfs --daemon start namenode
  1. 初始化zkfc在zookeeper中的节点

先启动zookeeper集群 后,在任意一台节点格式化zkfc

hdfs zkfc -formatZK
  1. 启动zkfc

在32,33,34上分别启动zkfc

hdfs --daemon start zkfc
  1. 启动datanodes

在任意一节点执行

hdfs --workers --daemon start datanode
  1. 假设出了问题,想重新来,怎么办

  • 关闭集群,在所有节点执行
killall -9 java
  • 在所有节点删除data logs文件夹
rm -rf /opt/ha/hadoop-3.1.3/data /opt/ha/hadoop-3.1.3/logs
  • 启动Zookeeper集群
  • 执行第5,6,7,9,10步

三,Yarn HA搭建

  1. 修改配置文件yarn-site.xml
<configuration>

    <property>
        <name>yarn.nodemanager.aux-servicesname>
        <value>mapreduce_shufflevalue>
    property>

    
    <property>
        <name>yarn.resourcemanager.ha.enabledname>
        <value>truevalue>
    property>
 
    
    <property>
        <name>yarn.resourcemanager.cluster-idname>
        <value>cluster-yarn1value>
    property>
    
    <property>
        <name>yarn.resourcemanager.ha.rm-idsname>
        <value>rm1,rm2value>
property>


    <property>
        <name>yarn.resourcemanager.hostname.rm1name>
        <value>hadoop102value>
property>

<property>
     <name>yarn.resourcemanager.webapp.address.rm1name>
     <value>hadoop102:8088value>
property>

<property>
     <name>yarn.resourcemanager.address.rm1name>
     <value>hadoop102:8032value>
property>

<property>
     <name>yarn.resourcemanager.scheduler.address.rm1name>  
     <value>hadoop102:8030value>
property>
  
<property>
     <name>yarn.resourcemanager.resource-tracker.address.rm1name>
     <value>hadoop102:8031value>
property>

    
    <property>
        <name>yarn.resourcemanager.hostname.rm2name>
        <value>hadoop103value>
property>
<property>
     <name>yarn.resourcemanager.webapp.address.rm2name>
     <value>hadoop103:8088value>
property>
<property>
     <name>yarn.resourcemanager.address.rm2name>
     <value>hadoop103:8032value>
property>
<property>
     <name>yarn.resourcemanager.scheduler.address.rm2name>
     <value>hadoop103:8030value>
property>
<property>
     <name>yarn.resourcemanager.resource-tracker.address.rm2name>
     <value>hadoop103:8031value>
property>
 
     
    <property>
        <name>yarn.resourcemanager.zk-addressname>
        <value>hadoop102:2181,hadoop103:2181,hadoop104:2181value>
    property>

     
    <property>
        <name>yarn.resourcemanager.recovery.enabledname>
        <value>truevalue>
    property>
 
     
    <property>
        <name>yarn.resourcemanager.store.classname>     <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStorevalue>
property>

 <property>
        <name>yarn.nodemanager.env-whitelistname>
        <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOMEvalue>
    property>

configuration>

  1. 同步更新其他节点的配置信息,分发配置文件
xsync hadoop/

然后启动hdfs,启动yarn

写在最后

在网页端查看其状态,我这里就直截图HDFS的了,Yarn的比较好玩(坏笑)我就不截图了。
Hadoop(六)Hadoop-HA模式(超详细,剑指第一)_第2张图片
Hadoop(六)Hadoop-HA模式(超详细,剑指第一)_第3张图片
Hadoop(六)Hadoop-HA模式(超详细,剑指第一)_第4张图片
请杀掉正在运行的主namenode,查看下一个主namenode。

你可能感兴趣的:(hadoop,hadoop,分布式,大数据,hdfs,zookeeper)