zoukankan      html  css  js  c++  java
  • HadoopHA(高可用集群)

    一、介绍:

      1、所谓HA(High Available),即高可用(7*24小时不中断服务)

      2、实现高可用的关键是消除单点故障,即HDFS的nameNode和YARN的resourceManager,所以HA机制就是HDFS的HA和YARN的HA。 

        由于一个HDFS集群由一个NameNode节点和多个DataNode节点组成,一旦NameNode节点宕机,那么HDFS将不能进行文件的上传与下载。 

        由于一个Yarn集群由一个ResourceManager节点和多个NodeManager节点组成,一旦ResourceManager节点宕机,那么YARN集群将不能进行资源的调度。

      3、HDFS-HA工作要点:

        (1)、双nameNode来消除单点故障

        (2)、元数据管理方式需要改变

          内存中各自保存一份元数据;

          Edits日志只有Active状态的NameNode节点可以做写操作;两个NameNode都可以读取Edits

          共享的Edits放在一个共享存储中管理(qjournal和NFS两个主流实现);

        (3)、需要一个状态管理功能模块

          实现了一个zkfailover,常驻在每一个namenode所在的节点,每一个zkfailover负责监控自己所在NameNode节点,

          利用zooKeeper进行状态标识,当需要进行状态切换时,由zkfailover来负责切换,切换时需要防止brain splitnaolie脑裂现象的发生。

        (4)、必须保证两个NameNode之间能够ssh无密码登录

        (5)、隔离(Fence),即同一时刻仅仅有一个NameNode对外提供服务

      4、HDFS-HA故障转移机制图解:

        

      5、YARN-HA工作机制图解:

        

     二、HA集群配置

    1、在完全分布式集群的基础下

    2、配置zooKeeper集群

      (1)将zooKeeper压缩包放到 /opt/software/目录下

      (2)解压Zookeeper安装包到/opt/module/目录下

        [jinghang@Hadoop03 software]$ tar -zxvf zookeeper-3.4.10.tar.gz -C /opt/module/

      (3)重命名/opt/module/zookeeper-3.4.10/conf这个目录下的zoo_sample.cfg为zoo.cfg

        [jinghang@Hadoop03 conf]$ mv zoo_sample.cfg zoo.cfg

      (4)配置zoo.cfg文件

        修改存储节点数据

          dataDir=/opt/module/zookeeper-3.4.10/zkData

        增加zooKeeper集群配置

          #######################cluster##########################

            server.1=Hadoop03:2888:3888

          server.2=Hadoop04:2888:3888

           server.3=Hadoop05:2888:3888

      (5)在/opt/module/zookeeper-3.4.10/这个目录下创建zkData目录

        [jinghang@Hadoop03 zookeeper-3.4.14]$ mkdir zkData

      (6)在/opt/module/zookeeper-3.4.10/zkData目录下创建一个myid的文件

        [jinghang@Hadoop03 zkData]$ touch myid

      (7)编辑myid文件,在里面添加服务器ID,比如添加1

      (8)分发配置好的zookeeper到其他机器上,并修改分发过去的服务器的myid文件,修改服务器ID

      (9)分别启动zookeeper

          [jinghang@Hadoop03 zookeeper-3.4.14]$ bin/zkServer.sh start

         [jinghang@Hadoop03 zookeeper-3.4.14]$ bin/zkServer.sh start

        [jinghang@Hadoop03 zookeeper-3.4.14]$ bin/zkServer.sh start

      (10)查看状态

        [jinghang@Hadoop03 zookeeper-3.4.14]$ bin/zkServer.sh status

    3、配置HDFS-HA集群

      (1)在/opt/module/目录下创建一个ha文件夹

      (2)将/opt/module/下的 hadoop-2.7.2拷贝到/opt/module/ha目录下

      (3)配置hadoop-env.sh

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

      (4)配置core-site.xml  

          
     1 <configuration>
     2 <!-- 把两个NameNode)的地址组装成一个集群mycluster -->
     3         <property>
     4             <name>fs.defaultFS</name>
     5             <value>hdfs://mycluster</value>
     6         </property>
     7 
     8         <!-- 指定hadoop运行时产生文件的存储目录 -->
     9         <property>
    10             <name>hadoop.tmp.dir</name>
    11             <value>/opt/ha/hadoop-2.7.2/data/tmp</value>
    12         </property>
    13 <property>
    14     <name>ha.zookeeper.quorum</name>
    15     <value>hadoop102:2181,hadoop103:2181,hadoop104:2181</value>
    16 </property>
    17 </configuration>
    core-site.xml

       (5)配置hdfs-site.xml

          
     1 <configuration>
     2     <!-- 完全分布式集群名称 -->
     3     <property>
     4         <name>dfs.nameservices</name>
     5         <value>mycluster</value>
     6     </property>
     7 
     8     <!-- 集群中NameNode节点都有哪些 -->
     9     <property>
    10         <name>dfs.ha.namenodes.mycluster</name>
    11         <value>nn1,nn2</value>
    12     </property>
    13 
    14     <!-- nn1的RPC通信地址 -->
    15     <property>
    16         <name>dfs.namenode.rpc-address.mycluster.nn1</name>
    17         <value>hadoop102:9000</value>
    18     </property>
    19 
    20     <!-- nn2的RPC通信地址 -->
    21     <property>
    22         <name>dfs.namenode.rpc-address.mycluster.nn2</name>
    23         <value>hadoop103:9000</value>
    24     </property>
    25 
    26     <!-- nn1的http通信地址 -->
    27     <property>
    28         <name>dfs.namenode.http-address.mycluster.nn1</name>
    29         <value>hadoop102:50070</value>
    30     </property>
    31 
    32     <!-- nn2的http通信地址 -->
    33     <property>
    34         <name>dfs.namenode.http-address.mycluster.nn2</name>
    35         <value>hadoop103:50070</value>
    36     </property>
    37 
    38     <!-- 指定NameNode元数据在JournalNode上的存放位置 -->
    39     <property>
    40         <name>dfs.namenode.shared.edits.dir</name>
    41     <value>qjournal://hadoop102:8485;hadoop103:8485;hadoop104:8485/mycluster</value>
    42     </property>
    43 
    44     <!-- 配置隔离机制,即同一时刻只能有一台服务器对外响应 -->
    45     <property>
    46         <name>dfs.ha.fencing.methods</name>
    47         <value>sshfence</value>
    48     </property>
    49 
    50     <!-- 使用隔离机制时需要ssh无秘钥登录-->
    51     <property>
    52         <name>dfs.ha.fencing.ssh.private-key-files</name>
    53         <value>/home/jinghang/.ssh/id_rsa</value>
    54     </property>
    55 
    56     <!-- 声明journalnode服务器存储目录-->
    57     <property>
    58         <name>dfs.journalnode.edits.dir</name>
    59         <value>/opt/ha/hadoop-2.7.2/data/jn</value>
    60     </property>
    61 
    62     <!-- 关闭权限检查-->
    63     <property>
    64         <name>dfs.permissions.enable</name>
    65         <value>false</value>
    66     </property>
    67 
    68     <!-- 访问代理类:client,mycluster,active配置失败自动切换实现方式-->
    69     <property>
    70           <name>dfs.client.failover.proxy.provider.mycluster</name>
    71     <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
    72     </property>
    73 <property>
    74     <name>dfs.ha.automatic-failover.enabled</name>
    75     <value>true</value>
    76 </property>
    77 </configuration>
    hdfs-site.xml
     (6)分发到其他服务器
    4、配置YARN-HA集群
      (1)配置yarn-site.xml
     1 <configuration>
     2 
     3     <property>
     4         <name>yarn.nodemanager.aux-services</name>
     5         <value>mapreduce_shuffle</value>
     6     </property>
     7 
     8     <!--启用resourcemanager ha-->
     9     <property>
    10         <name>yarn.resourcemanager.ha.enabled</name>
    11         <value>true</value>
    12     </property>
    13  
    14     <!--声明两台resourcemanager的地址-->
    15     <property>
    16         <name>yarn.resourcemanager.cluster-id</name>
    17         <value>cluster-yarn1</value>
    18     </property>
    19 
    20     <property>
    21         <name>yarn.resourcemanager.ha.rm-ids</name>
    22         <value>rm1,rm2</value>
    23     </property>
    24 
    25     <property>
    26         <name>yarn.resourcemanager.hostname.rm1</name>
    27         <value>hadoop102</value>
    28     </property>
    29 
    30     <property>
    31         <name>yarn.resourcemanager.hostname.rm2</name>
    32         <value>hadoop103</value>
    33     </property>
    34  
    35     <!--指定zookeeper集群的地址--> 
    36     <property>
    37         <name>yarn.resourcemanager.zk-address</name>
    38         <value>hadoop102:2181,hadoop103:2181,hadoop104:2181</value>
    39     </property>
    40 
    41     <!--启用自动恢复--> 
    42     <property>
    43         <name>yarn.resourcemanager.recovery.enabled</name>
    44         <value>true</value>
    45     </property>
    46  
    47     <!--指定resourcemanager的状态信息存储在zookeeper集群--> 
    48     <property>
    49         <name>yarn.resourcemanager.store.class</name>     <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
    50 </property>
    51 </configuration>
    yarn-site.xml
       (2)分发到其他服务器
    
    
    5、启动

      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)启动所有DataNode

        sbin/hadoop-daemons.sh start datanode

      (6)再启动各台服务器中的Zookeeper集群:

        bin/zkServer.sh start

      (7)在任意服务器初始化HA在Zookeeper中状态:

        bin/hdfs zkfc -formatZK

      (8)在namenode所在的节点启动HDFS服务:

        sbin/start-dfs.sh

      (9)在resourcemanager所在的服务器执行:

        sbin/start-yarn.sh

      (10)确保两个resourcemanager都启动了,如果没有启动手动开启:

        sbin/yarn-daemon.sh start resourcemanager

      (11)查看服务状态,如图3-24所示

        bin/yarn rmadmin -getServiceState rm1

        bin/hdfs haadmin -getServiceState nn1

     
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
     

        
    
    

      

     

      

        

     

     

     

  • 相关阅读:
    Beginning Silverlight 4 in C#数据绑定和Silverlight List控件
    使用Socket通信实现Silverlight客户端实时数据的获取(模拟GPS数据,地图实时位置)
    分布式事物:第一章:分布式事物简介
    Redis数据结构存储系统:第三章:Redis在项目中如何使用?
    Android “NetworkOnMainThreadException”出错原因及解决办法
    asp.net 运行时, 报控件不存在
    Only the original thread that created a view hierarchy can touch its views
    android模拟器打开时比较慢,Run As就找不到模拟器
    db2数据库还原
    去掉代码中自动生成的TODO Autogenerated method stub
  • 原文地址:https://www.cnblogs.com/si-137/p/13380605.html
Copyright © 2011-2022 走看看