大数据之HDFS-HA高可用集群搭建

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

第一步:环境准备

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

参考第一篇文章:大数据之01虚拟机运行环境配置搭建

第二步:规划集群

启动Hadoop高可用集群 部署hdfs高可用集群_启动Hadoop高可用集群

第三步:配置Zookeeper集群

参考第三篇文章:大数据之03Zookeeper分布式集群搭建

第四步:配置HDFS-HA集群

  1. 在opt目录下创建一个ha文件夹 mkdir ha
  2. hadoop-3.1.3拷贝到/opt/ha目录下
    cp -r hadoop-3.1.3/ /opt/ha/
  3. 删除logs文件和data文件,保证Hadoop的纯净
  4. 启动Hadoop高可用集群 部署hdfs高可用集群_大数据_02

  5. 4.编辑配置文件

配置core-site.xml文件 vim core-site.xml

<configuration>
<!--指定HDFS的NameNode的地址-->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://mycluster</value>
    </property>
<!--指定Hadoop运行时产生文件的储存目录-->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/ha/hadoop-3.1.3/data</value>
    </property>
<!--zookeeper位置-->
    <property>
        <name>ha.zookeeper.quorum</name>
        <value>hadoop102:2181,hadoop103:2181,hadoop104:2181</value>
    </property>

</configuration>

配置hdfs-site.xml文件 vim hdfs-site.xml

<!--namenode存储目录 -->
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>/opt/ha/hadoop-3.1.3/data/dir/name</value>
        </property>
        <!--DataNode存储目录-->
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>/opt/ha/hadoop-3.1.3/data</value>
        </property>

        <!--nameservices-->
        <property>
                <name>dfs.nameservices</name>
                <value>mycluster</value>
        </property>

        <!--3个节点地址-->
        <property>
                <name>dfs.ha.namenodes.mycluster</name>
                <value>nn1,nn2,nn3</value>
        </property>

        <property>
                <name>dfs.namenode.rpc-address.mycluster.nn1</name>
                <value>hadoop102:8020</value>
         </property>
         <property>
                <name>dfs.namenode.rpc-address.mycluster.nn2</name>
                <value>hadoop103:8020</value>
        </property>
        <!--三个节点的http目录-->
        <property>
                <name>dfs.namenode.rpc-address.mycluster.nn3</name>
                <value>hadoop104:8020</value>
        </property>
        <property>
                <name>dfs.namenode.http-address.mycluster.nn1</name>
                <value>hadoop102:9870</value>
        </property>
        <property>
                <name>dfs.namenode.http-address.mycluster.nn2</name>
                <value>hadoop103:9870</value>
        </property>
        <property>
                <name>dfs.namenode.http-address.mycluster.nn3</name>
                <value>hadoop104:9870</value>
        </property>

        <!--QJM集群-->
        <property>
                <name>dfs.namenode.shared.edits.dir</name>
                <value>qjournal://hadoop102:8485;hadoop103:8485;hadoop104:8485/mycluster</value>
        </property>
        <!--代理类-->
        <property>
                <name>dfs.client.failover.proxy.provider.mycluster</name>
                <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
        </property>

        <!--隔离机制-->
        <property>
                <name>dfs.ha.fencing.methods</name>
                <value>sshfence</value>
        </property>
        <property>
                <name>dfs.ha.fencing.ssh.private-key-files</name>
                <value>/home/tan/.ssh/id_rsa</value>
        </property>

        <!--JN的存储目录-->
        <property>
                <name>dfs.journalnode.edits.dir</name>
                <value>/opt/ha/hadoop-3.1.3/data/dir/jn</value>
        </property>
        <!--开启自动切换-->
        <property>
                <name>dfs.ha.automatic-failover.enabled</name>
                <value>true</value>
        </property>

</configuration>

5.把修改好的hadoop配置文件分发同步到各个节点

xsync /opt/ha/hadoop-3.1.3/etc/hadoop

6.修改HADOOP_HOME环境变量更改到HA目录

[tan@daoop102 hadoop]$ sudo vim  /etc/profile.d/my_env.sh
##HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
改为
##HADOOP_HOME
export HADOOP_HOME=/opt/ha/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

7.把修改好的my_env.sh配置文件分发同步到各个节点

[tan@daoop102 hadoop]$ sudo xsync  /etc/profile.d/my_env.sh
8.重启xsell窗口,使环境变量生效

第五步:启动HDFS-HA集群

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

hdfs --daemon start journalnode

2.查看节点,发现journalnode节点启动成功

[tan@daoop102 bin]$ jpsall
========    hadoop102    ========
11865 JournalNode
11066 QuorumPeerMain
========    hadoop103    ========
9797 QuorumPeerMain
10507 JournalNode
========    hadoop104    ========
9472 JournalNode
8922 QuorumPeerMain

3.在hadoop102上,对其进行格式化,并启动

[tan@daoop102 hadoop-3.1.3]$ pwd
/opt/ha/hadoop-3.1.3
[tan@daoop102 hadoop-3.1.3]$ bin/hdfs namenode -format  #格式化
[tan@daoop102 hadoop-3.1.3]$ hdfs --daemon start namenode  #启动namenode

4.在hadoop103,hadoop104上,同步hadoop102的元数据信息

[tan@hadoop103 ~]$ hdfs namenode -bootstrapStandby
[tan@hadoop103 ~]$ hdfs --daemon start namenode

[tan@hadoop104 ~]$ hdfs namenode -bootstrapStandby
[tan@hadoop104 ~]$ hdfs --daemon start namenode

第六步:查看web页面显示

启动Hadoop高可用集群 部署hdfs高可用集群_hdfs_03

启动Hadoop高可用集群 部署hdfs高可用集群_启动Hadoop高可用集群_04


启动Hadoop高可用集群 部署hdfs高可用集群_HDFS_05

第七步:群起节点

zk zkServer.sh start #所有节点启动zk
格式化zk  hdfs zkfc -formatZK #在hadoop102上格式化zk

群起节点

[tan@daoop102 hadoop-3.1.3]$ staret-dfs.sh

查看所有启动节点

========    hadoop102    ========
12612 DataNode
13351 DFSZKFailoverController
11865 JournalNode
11066 QuorumPeerMain
12351 NameNode
========    hadoop103    ========
10832 NameNode
11344 DFSZKFailoverController
9797 QuorumPeerMain
11001 DataNode
10507 JournalNode
========    hadoop104    ========
9472 JournalNode
9940 DataNode
9768 NameNode
8922 QuorumPeerMain
10285 DFSZKFailoverController

启动Hadoop高可用集群 部署hdfs高可用集群_hdfs_06


启动Hadoop高可用集群 部署hdfs高可用集群_大数据_07


启动Hadoop高可用集群 部署hdfs高可用集群_大数据_08

补充:配置YARN—HA集群

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

1.Yarn集群规划

启动Hadoop高可用集群 部署hdfs高可用集群_大数据_09


2.具体配置:vim yarn.site.xml

添加如下配置:

<configuration>

    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>

    <!--启用resourcemanager ha-->
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>
 
    <!--声明两台resourcemanager的地址-->
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>cluster-yarn1</value>
    </property>

    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>

    <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>hadoop102</value>
    </property>

    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>hadoop103</value>
    </property>
 
    <!--指定zookeeper集群的地址--> 
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>hadoop102:2181,hadoop103:2181,hadoop104:2181</value>
    </property>

    <!--启用自动恢复--> 
    <property>
        <name>yarn.resourcemanager.recovery.enabled</name>
        <value>true</value>
    </property>
 
    <!--指定resourcemanager的状态信息存储在zookeeper集群--> 
    <property>
        <name>yarn.resourcemanager.store.class</name>     <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>

</configuration>

3.分发同步其他节点配置信息

[tan@daoop102 hadoop]$ xsync yarn-site.xml

4.在hadoop103中启动yarn集群

[tan@hadoop103 ~]$ start-yarn.sh
[tan@daoop102 hadoop]$ jpsall
========    hadoop102    ========
12612 DataNode
18198 NodeManager
13351 DFSZKFailoverController
18104 ResourceManager
11865 JournalNode
11066 QuorumPeerMain
12351 NameNode
========    hadoop103    ========
10832 NameNode
11344 DFSZKFailoverController
9797 QuorumPeerMain
16294 ResourceManager
16440 NodeManager
11001 DataNode
10507 JournalNode
========    hadoop104    ========
9472 JournalNode
9940 DataNode
13493 NodeManager
9768 NameNode
8922 QuorumPeerMain
10285 DFSZKFailoverController

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

[tan@daoop102 hadoop]$ yarn rmadmin -getServiceState rm1
standby
[tan@daoop102 hadoop]$ yarn rmadmin -getServiceState rm2
active

查看web页面显示

在浏览器打开hadoop102:8088,会自动跳转为hadoop103:8088

因为hadoop103为active

启动Hadoop高可用集群 部署hdfs高可用集群_HDFS_10

注意:YARN—HA集群和HDFS—HA集群是俩个独立的过程