小工具知识网

当前位置: 首页 > 行业知识 > 基于 HBase & Phoenix 构建实时数仓(1)—— Hadoop HA 安装部署

行业知识

基于 HBase & Phoenix 构建实时数仓(1)—— Hadoop HA 安装部署

2026-11-13 18:53:00 来源:互联网转载

���录

一、主机规划

二、环境准备

1. 启动 NTP 时钟同步

2. 修改 hosts 文件

3. 配置所有主机间 ssh 免密

4. 修改用户可打开文件数与进程数(可选)

三、安装 JDK

四、安装部署 Zookeeper 集群

1. 解压、配置环境变量

2. 创建配置文件

3. 创建新的空 ZooKeeper 数据目录和事务日志目录

4. 添加 myid 配置

5. 设置 Zookeeper 使用的 JVM 堆内存

6. 启动 ZooKeeper

7. 查看 ZooKeeper 状态

8. 简单测试 ZooKeeper 命令

五、安装配置 Hadoop HA 集群

1. 解压、配置环境变量(node1 执行)

2. HDFS 高可用配置

(1)创建存储目录

(2)修改核心模块配置

(3)修改 hdfs 文件系统模块配置

(4)修改 $HADOOP_HOME/etc/hadoop/workers

3. YARN ResourceManager 高可用配置

(1)修改 yarn 模块配置

(2)修改 MapReduce 模块配置

4. 分发配置文件其它节点

5. 启动 HDFS 相关服务

6. 添加环境变量

7. 启动 YARN 相关服务

8. 启动 YARN

9. 启动 MapReduce 任务历史服务

五、Hadoop HA 测试验证

1. HDFS NameNode HA 验证

(1)查看 NameNode 节点状态,任一节点执行

(2)故障模拟

(3)查看节点状态,任一节点执行

(4)故障恢复

(5)查看节点状态,任一节点执行

(6)再次测试自动切换

2. YARN ResourceManager HA 验证

(1)查看 ResourceManager 节点状态,任一节点执行

(2)故障模拟

(3)查看节点状态,任一节点执行

(4)故障恢复

(5)查看节点状态,任一节点执行

(6)再次测试自动切换

参考:


一、主机规划

        使用以下四台虚拟机搭建测试环境,保证网络连通,禁用防火墙。

  • IP/主机名:

    172.18.4.126    node1

    172.18.4.188    node2

    172.18.4.71      node3

    172.18.4.86      node4

    • 资源配置:

      CPU:4核超线程;内存:8GB;Swap:4GB;硬盘:200GB。

      • 操作系统:

        CentOS Linux release 7.9.2009 (Core)

        • 所需安装包:

          jdk-8u202
          Zookeeper-3.9.1
          Hadoop-3.3.6

                  下表描述了四个节点上分别将会运行的相关进程。简便起见,安装部署过程中所用的命令都使用操作系统的 root 用户执行。

                                        节点

          进程

          node1

          node2

          node3

          node4

          Zookeeper

          *

          *

          *

          NameNode

          *

          *

          DataNode

          *

          *

          *

          ZKFC

          *

          *

          JournalNode

          *

          *

          *

          ResourceManager

          *

          *

          NodeManager

          *

          *

          *

          JobHistoryServer

          *

          二、环境准备

                  在全部四台机器执行以下步骤。

          1. 启动 NTP 时钟同步

                  略。可参考 Greenplum 6 安装配置详解_greenplum6安装-CSDN博客

          2. 修改 hosts 文件

          # 编辑 /etc/hosts 文件vim /etc/hosts# 添加主机名172.18.4.126    node1172.18.4.188    node2172.18.4.71     node3172.18.4.86     node4

          3. 配置所有主机间 ssh 免密

          # 生成秘钥ssh-keygen# 复制公钥ssh-copy-id node1ssh-copy-id node2ssh-copy-id node3ssh-copy-id node4# 验证ssh node1 datessh node2 datessh node3 datessh node4 date

          4. 修改用户可打开文件数与进程数(可选)

          # 查看ulimit -a# 设置,编辑 /etc/security/limits.conf 文件vim /etc/security/limits.conf# 添加下面两行*    soft    nofile    512000*    hard    nofile    512000

          三、安装 JDK

                  分别在 node1 - node4 四台上机器执行:

          # 安装rpm -ivh jdk-8u202-linux-x64.rpm# 确认版本java -version

                  输出:

          [root@vvml-yz-hbase-test~]#java -versionjava version "1.8.0_202"Java(TM) SE Runtime Environment (build 1.8.0_202-b08)Java HotSpot(TM) 64-Bit Server VM (build 25.202-b08, mixed mode)[root@vvml-yz-hbase-test~]#

          四、安装部署 Zookeeper 集群

                  分别在 node1 - node3 三台机器执行以下步骤。

          1. 解压、配置环境变量

          # 解压tar -zxvf apache-zookeeper-3.9.1-bin.tar.gz# 编辑 /etc/profile 文件vim /etc/profile# 添加下面两行export ZOOKEEPER_HOME=/root/apache-zookeeper-3.9.1-bin/export PATH=$ZOOKEEPER_HOME/bin:$PATH# 加载生效source /etc/profile

          2. 创建配置文件

          # 备份cp $ZOOKEEPER_HOME/conf/zoo_sample.cfg $ZOOKEEPER_HOME/conf/zoo.cfgvim $ZOOKEEPER_HOME/conf/zoo.cfg# 编辑 zoo.cfg 文件内容如下:# ZooKeeper 使用的毫秒为单位的时间单元,用于进行心跳,最小会话超时将是 tickTime 的两倍。tickTime=2000# 存储内存中数据库快照的位置。dataDir=/var/lib/zookeeper/data# 数据库更新的事务日志所在目录。dataLogDir=/var/lib/zookeeper/log# 监听客户端连接的端口。clientPort=2181# LF 初始通信时限,即集群中的 follower 服务器(F)与 leader 服务器(L)之间初始连接时能容忍的最多心跳数(tickTime的数量)。initLimit=5# LF 同步通信时限,即集群中的 follower 服务器(F)与 leader 服务器(L)之间请求和应答之间能容忍的最多心跳数(tickTime的数量)。syncLimit=2# 集群配置 server.服务器ID=服务器IP地址:服务器之间通信端口:服务器之间投票选举端口。当服务器启动时,通过在数据目录中查找文件 myid 来知道它是哪台服务器。server.1=172.18.4.126:2888:3888server.2=172.18.4.188:2888:3888server.3=172.18.4.71:2888:3888# 指定自动清理事务日志和快照文件的频率,单位是小时。 autopurge.purgeInterval=1

          3. 创建新的空 ZooKeeper 数据目录和事务日志目录

          mkdir -p /var/lib/zookeeper/datamkdir -p /var/lib/zookeeper/log

          4. 添加 myid 配置

          # node1 上echo 1 > /var/lib/zookeeper/data/myid# node2 上echo 2 > /var/lib/zookeeper/data/myid# node3 上echo 3 > /var/lib/zookeeper/data/myid

          5. 设置 Zookeeper 使用的 JVM 堆内存

          vim $ZOOKEEPER_HOME/bin/zkEnv.sh# 修改 zkEnv.sh 文件中的ZK_SERVER_HEAP值,缺省为1000,单位是MB,修改为2048。# default heap for zookeeper serverZK_SERVER_HEAP="${ZK_SERVER_HEAP:-2048}"

          6. 启动 ZooKeeper

          zkServer.sh start

                  日志记录在安装目录下的 logs 目录中,如本例中的 /root/apache-zookeeper-3.9.1-bin/logs。用 jps 可以看到 QuorumPeerMain 进程:

          [root@vvml-yz-hbase-test~]#jps5316 QuorumPeerMain5373 Jps[root@vvml-yz-hbase-test~]#

          7. 查看 ZooKeeper 状态

          zkServer.sh status

                  node1 输出:

          /usr/bin/javaZooKeeper JMX enabled by defaultUsing config: /root/apache-zookeeper-3.9.1-bin/bin/../conf/zoo.cfgClient port found: 2181. Client address: localhost. Client SSL: false.Mode: follower

                  node2 输出:

          /usr/bin/javaZooKeeper JMX enabled by defaultUsing config: /root/apache-zookeeper-3.9.1-bin/bin/../conf/zoo.cfgClient port found: 2181. Client address: localhost. Client SSL: false.Mode: leader

                  node3 输出:

          /usr/bin/javaZooKeeper JMX enabled by defaultUsing config: /root/apache-zookeeper-3.9.1-bin/bin/../conf/zoo.cfgClient port found: 2181. Client address: localhost. Client SSL: false.Mode: follower

                  node2 为 leader,node1、node3 为 follower。

          8. 简单测试 ZooKeeper 命令

          # 连接ZooKeeperzkCli.sh -server node1:2181 # 控制台输出/usr/bin/javaConnecting to node1:2181...Welcome to ZooKeeper!...JLine support is enabled...[zk: node1:2181(CONNECTED) 0] helpZooKeeper -server host:port -client-configuration properties-file cmd args...Command not found: Command not found help[zk: node1:2181(CONNECTED) 1] ls /[zookeeper][zk: node1:2181(CONNECTED) 2] create /zk_test my_dataCreated /zk_test[zk: node1:2181(CONNECTED) 3] ls /[zk_test, zookeeper][zk: node1:2181(CONNECTED) 4] get /zk_testmy_data[zk: node1:2181(CONNECTED) 5] set /zk_test junk[zk: node1:2181(CONNECTED) 6] get /zk_testjunk[zk: node1:2181(CONNECTED) 7] delete /zk_test[zk: node1:2181(CONNECTED) 8] ls /[zookeeper][zk: node1:2181(CONNECTED) 9] quitWATCHER::WatchedEvent state:Closed type:None path:null zxid: -12024-03-05 10:18:32,189 [myid:] - INFO  [main:o.a.z.ZooKeeper@1232] - Session: 0x100421ce5c90000 closed2024-03-05 10:18:32,190 [myid:] - INFO  [main-EventThread:o.a.z.ClientCnxn$EventThread@553] - EventThread shut down for session: 0x100421ce5c900002024-03-05 10:18:32,193 [myid:] - INFO  [main:o.a.z.u.ServiceUtils@45] - Exiting JVM with code 0[root@vvml-yz-hbase-test~]#

          五、安装配置 Hadoop HA 集群

          1. 解压、配置环境变量(node1 执行)

          # 解压tar -zvxf hadoop-3.3.6.tar.gz# 编辑 /etc/profile 文件vim /etc/profile# 添加如下两行export HADOOP_HOME=/root/hadoop-3.3.6/export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH# 加载生效source /etc/profile# 编辑 $HADOOP_HOME/etc/hadoop/hadoop-env.sh 文件设置 Hadoop 运行环境vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh# 在文件末尾添加export JAVA_HOME=/usr/java/jdk1.8.0_202-amd64export HDFS_NAMENODE_USER=rootexport HDFS_DATANODE_USER=rootexport HDFS_SECONDARYNAMENODE_USER=rootexport YARN_RESOURCEMANAGER_USER=rootexport YARN_NODEMANAGER_USER=rootexport HADOOP_PID_DIR=/root/hadoop-3.3.6

          2. HDFS 高可用配置

          (1)创建存储目录

          mkdir -p $HADOOP_HOME/data/namenodemkdir -p $HADOOP_HOME/data/journalnode

          (2)修改核心模块配置

          # 编辑 $HADOOP_HOME/etc/hadoop/core-site.xml 文件vim $HADOOP_HOME/etc/hadoop/core-site.xml# 配置如下        fs.defaultFS    hdfs://mycluster    true          io.file.buffer.szie    131072          hadoop.tmp.dir    /root/hadoop-3.3.6/data/namenode          ha.zookeeper.quorum    node1:2181,node2:2181,node3:2181          hadoop.http.staticuser.user    root          hadoop.proxyuser.root.hosts    *             hadoop.proxyuser.root.groups     *              hadoop.proxyuser.root.users     *                 fs.trash.interval     1440   

          (3)修改 hdfs 文件系统模块配置

          # 编辑 $HADOOP_HOME/etc/hadoop/hdfs-site.xml 文件vim $HADOOP_HOME/etc/hadoop/hdfs-site.xml# 配置如下        dfs.nameservices    mycluster          dfs.ha.namenodes.mycluster    nn1,nn2          dfs.namenode.rpc-address.mycluster.nn1    node1:8082          dfs.namenode.rpc-address.mycluster.nn2    node4:8082          dfs.namenode.http-address.mycluster.nn1    node1:9870          dfs.namenode.http-address.mycluster.nn2    node4:9870          dfs.namenode.shared.edits.dir    qjournal://node1:8485;node2:8485;node3:8485/mycluster          dfs.client.failover.proxy.provider.mycluster    org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider          dfs.ha.fencing.methods    sshfence            dfs.ha.fencing.ssh.private-key-files    /root/.ssh/id_rsa          dfs.journalnode.edits.dir    /root/hadoop-3.3.6/data/journalnode          dfs.ha.automatic-failover.enabled    true          dfs.client.failover.proxy.provider.mycluster    org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider          dfs.replication    3          dfs.permissions.enabled    false          dfs.client.read.shortcircuit    true          dfs.domain.socket.path    /root/hadoop-3.3.6/dn_socket  

          (4)修改 $HADOOP_HOME/etc/hadoop/workers

                  将下面内容覆盖文件,默认只有 localhost,works 配置 DataNode 节点的主机名或IP,如果配置了 works 文件,并且配置 ssh 免密登录,可以使用 start-dfs.sh 启动 HDFS 集群。

          # 编辑 $HADOOP_HOME/etc/hadoop/workers 文件vim $HADOOP_HOME/etc/hadoop/workers# 内容如下node2node3node4

          3. YARN ResourceManager 高可用配置

          (1)修改 yarn 模块配置

          # 编辑 $HADOOP_HOME/etc/hadoop/yarn-site.xml 文件vim $HADOOP_HOME/etc/hadoop/yarn-site.xml# 内容如下        yarn.resourcemanager.ha.enabled    true          yarn.resourcemanager.cluster-id    myyarn          yarn.resourcemanager.ha.rm-ids    rm1,rm2          yarn.resourcemanager.hostname.rm1    node1          yarn.resourcemanager.hostname.rm2    node4          yarn.resourcemanager.webapp.address.rm1    node1:8088          yarn.resourcemanager.webapp.address.rm2    node4:8088          hadoop.zk.address    node1:2181,node2:2181,node3:2181          yarn.resourcemanager.recovery.enabled    true          yarn.resourcemanager.store.class    org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore        yarn.nodemanager.aux-services    mapreduce_shuffle            yarn.nodemanager.pmem-check-enabled    false          yarn.nodemanager.vmem-check-enabled    false          yarn.log-aggregation-enable    true          yarn.log.server.url    http://node1:19888/jobhistory/logs          yarn.log-aggregation.retain-seconds    604880  

          (2)修改 MapReduce 模块配置

          # 编辑 $HADOOP_HOME/etc/hadoop/mapred-site.xml 文件vim $HADOOP_HOME/etc/hadoop/mapred-site.xml# 内容如下        mapreduce.framework.name    yarn          mapreduce.jobhistory.address    node1:10020          mapreduce.jobhistory.webapp.address    node1:19888          yarn.app.mapreduce.am.env    HADOOP_MAPRED_HOME=${HADOOP_HOME}          mapreduce.map.env    HADOOP_MAPRED_HOME=${HADOOP_HOME}          mapreduce.reduce.env    HADOOP_MAPRED_HOME=${HADOOP_HOME}  

          4. 分发配置文件其它节点

          # 设置组和属主chown -R root:root $HADOOP_HOME# Hadoop 主目录复制到另外三个节点scp -r $HADOOP_HOME node2:$HADOOP_HOMEscp -r $HADOOP_HOME node3:$HADOOP_HOMEscp -r $HADOOP_HOME node4:$HADOOP_HOME

          5. 启动 HDFS 相关服务

          # 启动journalnode,在 node1、node2、node3 机器上执行hdfs --daemon start journalnode# HDFS NameNode 数据同步,格式化(第一次配置情况下使用,已运行集群不能用),在 node1 执行hdfs namenode -format# 启动 node1 上的 NameNode 节点hdfs --daemon start namenode# node4 节点上同步镜像数据hdfs namenode -bootstrapStandby# node4 节点上启动 NameNodehdfs --daemon start namenode# zookeeper FailerController 格式化,在 node1 上执行hdfs zkfc -formatZK# 所有节点安装 psmisc。ZKFC 远程杀***假*** SNN 使用的 killall namenode 命令属于 psmisc 软件中。建议所有节点都安装 psmisc。yum install -y psmisc

          6. 添加环境变量

          # 编辑 ~/.bash_profile 文件,或者在 start-dfs.sh、stop-dfs.sh(hadoop 安装目录的 sbin 里)两个文件顶部添加这些环境变量vim ~/.bash_profile# 内容如下export HDFS_NAMENODE_USER=rootexport HDFS_DATANODE_USER=rootexport HDFS_JOURNALNODE_USER=rootexport HDFS_SECONDARYNAMENODE_USER=rootexport YARN_RESOURCEMANAGER_USER=rootexport YARN_NODEMANAGER_USER=rootexport HDFS_ZKFC_USER=root# 加载生效source ~/.bash_profile

          7. 启动 YARN 相关服务

          # 启动 hdfs,在 node1 节点上执行start-dfs.sh# node1 进程[root@vvml-yz-hbase-test~]#jps11506 NameNode9621 QuorumPeerMain12373 Jps12300 DFSZKFailoverController11023 JournalNode[root@vvml-yz-hbase-test~]## node2 进程[root@vvml-yz-hbase-test~]#jps16754 DataNode16405 JournalNode16909 Jps15007 QuorumPeerMain[root@vvml-yz-hbase-test~]## node3 进程[root@vvml-yz-hbase-test~]#jps7026 DataNode5316 QuorumPeerMain6699 JournalNode7197 Jps[root@vvml-yz-hbase-test~]## node4 进程[root@vvml-yz-hbase-test~]#jps8000 Jps7731 DataNode7814 DFSZKFailoverController7528 NameNode[root@vvml-yz-hbase-test~]#

                  web地址:

          http://node1:9870/

          http://node4:9870/

                  如下图所示,node1 为 active,node4 为 standby。

          8. 启动 YARN

          # 在 node1 节点上执行start-yarn.sh# node1 进程[root@vvml-yz-hbase-test~]#jps11506 NameNode9621 QuorumPeerMain13354 Jps12300 DFSZKFailoverController12990 ResourceManager11023 JournalNode[root@vvml-yz-hbase-test~]## node2 进程[root@vvml-yz-hbase-test~]#jps16754 DataNode17219 NodeManager16405 JournalNode17350 Jps15007 QuorumPeerMain[root@vvml-yz-hbase-test~]## node3 进程[root@vvml-yz-hbase-test~]#jps7026 DataNode5316 QuorumPeerMain7626 Jps6699 JournalNode7483 NodeManager[root@vvml-yz-hbase-test~]## node4 进程[root@vvml-yz-hbase-test~]#jps8256 ResourceManager8352 NodeManager7731 DataNode7814 DFSZKFailoverController7528 NameNode8540 Jps[root@vvml-yz-hbase-test~]#

                  web地址:

          http://node1:8088/cluster/cluster

          http://node4:8088/cluster/cluster

                  如下图所示,node1 为 active,node4 为 standby。

          9. 启动 MapReduce 任务历史服务

          # 在 node1 节点上执行mapred --daemon start historyserver[root@vvml-yz-hbase-test~]#jps11506 NameNode9621 QuorumPeerMain13704 Jps12300 DFSZKFailoverController13645 JobHistoryServer12990 ResourceManager11023 JournalNode[root@vvml-yz-hbase-test~]#

          五、Hadoop HA 测试验证

          1. HDFS NameNode HA 验证

          (1)查看 NameNode 节点状态,任一节点执行

          hdfs haadmin -getServiceState nn1hdfs haadmin -getServiceState nn2# 输出[root@vvml-yz-hbase-test~]#hdfs haadmin -getServiceState nn1active[root@vvml-yz-hbase-test~]#hdfs haadmin -getServiceState nn2standby[root@vvml-yz-hbase-test~]#

          (2)故障模拟

          # 在 active 的 NameNode 节点上(这里是 node1),kill 掉 NameNode 进程jpsjps|grep NameNode|awk '{print }'|xargs kill -9jps# 输出[root@vvml-yz-hbase-test~]#jps13904 Jps11506 NameNode9621 QuorumPeerMain12300 DFSZKFailoverController13645 JobHistoryServer12990 ResourceManager11023 JournalNode[root@vvml-yz-hbase-test~]#jps|grep NameNode|awk '{print }'|xargs kill -9[root@vvml-yz-hbase-test~]#jps9621 QuorumPeerMain12300 DFSZKFailoverController13980 Jps13645 JobHistoryServer12990 ResourceManager11023 JournalNode[root@vvml-yz-hbase-test~]#

          (3)查看节点状态,任一节点执行

          hdfs haadmin -getServiceState nn1hdfs haadmin -getServiceState nn2hdfs haadmin -getAllServiceState# 输出[root@vvml-yz-hbase-test~]#hdfs haadmin -getServiceState nn12024-03-05 10:50:41,928 INFO ipc.Client: Retrying connect to server: node1/172.18.4.126:8082. Already tried 0 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=1, sleepTime=1000 MILLISECONDS)Operation failed: Call From node1/172.18.4.126 to node1:8082 failed on connection exception: java.net.ConnectException: Connection refused; For more details see:  http://wiki.apache.org/hadoop/ConnectionRefused[root@vvml-yz-hbase-test~]#hdfs haadmin -getServiceState nn2active[root@vvml-yz-hbase-test~]#hdfs haadmin -getAllServiceState2024-03-05 10:50:44,276 INFO ipc.Client: Retrying connect to server: node1/172.18.4.126:8082. Already tried 0 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=1, sleepTime=1000 MILLISECONDS)node1:8082                                         Failed to connect: Call From node1/172.18.4.126 to node1:8082 failed on connection exception: java.net.ConnectException: Connection refused; For more details see:  http://wiki.apache.org/hadoop/ConnectionRefusednode4:8082                                         active    [root@vvml-yz-hbase-test~]#

                  node4 状态变为 active。

          (4)故障恢复

          # 启动 namenode(node1 执行)hdfs --daemon start namenodejps# 输出[root@vvml-yz-hbase-test~]#hdfs --daemon start namenode[root@vvml-yz-hbase-test~]#jps14352 NameNode9621 QuorumPeerMain14407 Jps12300 DFSZKFailoverController13645 JobHistoryServer12990 ResourceManager11023 JournalNode[root@vvml-yz-hbase-test~]#

          (5)查看节点状态,任一节点执行

          hdfs haadmin -getServiceState nn1hdfs haadmin -getServiceState nn2hdfs haadmin -getAllServiceState# 输出[root@vvml-yz-hbase-test~]#hdfs haadmin -getServiceState nn1standby[root@vvml-yz-hbase-test~]#hdfs haadmin -getServiceState nn2active[root@vvml-yz-hbase-test~]#hdfs haadmin -getAllServiceStatenode1:8082                                         standby   node4:8082                                         active    [root@vvml-yz-hbase-test~]#

                  node1 状态变为 standby。

          (6)再次测试自动切换

          # node4 执行# 模拟故障jps|grep NameNode|awk '{print }'|xargs kill -9# 确认切换hdfs haadmin -getAllServiceState# 故障恢复hdfs --daemon start namenode# 角色交换hdfs haadmin -getAllServiceState# 输出[root@vvml-yz-hbase-test~]#jps|grep NameNode|awk '{print }'|xargs kill -9[root@vvml-yz-hbase-test~]#hdfs haadmin -getAllServiceStatenode1:8082                                         active    2024-03-05 10:56:35,128 INFO ipc.Client: Retrying connect to server: node4/172.18.4.86:8082. Already tried 0 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=1, sleepTime=1000 MILLISECONDS)node4:8082                                         Failed to connect: Call From node4/172.18.4.86 to node4:8082 failed on connection exception: java.net.ConnectException: Connection refused; For more details see:  http://wiki.apache.org/hadoop/ConnectionRefused[root@vvml-yz-hbase-test~]#hdfs --daemon start namenode[root@vvml-yz-hbase-test~]#hdfs haadmin -getAllServiceStatenode1:8082                                         active    node4:8082                                         standby   [root@vvml-yz-hbase-test~]#

          2. YARN ResourceManager HA 验证

          (1)查看 ResourceManager 节点状态,任一节点执行

          yarn rmadmin -getServiceState rm1yarn rmadmin -getServiceState rm2# 输出[root@vvml-yz-hbase-test~]#yarn rmadmin -getServiceState rm1active[root@vvml-yz-hbase-test~]#yarn rmadmin -getServiceState rm2standby[root@vvml-yz-hbase-test~]#

          (2)故障模拟

          # 在 active 的 ResourceManager 节点上(这里是 node1),kill 掉 ResourceManager 进程:jpsjps|grep ResourceManager|awk '{print }'|xargs kill -9jps# 输出[root@vvml-yz-hbase-test~]#jps14352 NameNode15122 Jps9621 QuorumPeerMain12300 DFSZKFailoverController13645 JobHistoryServer12990 ResourceManager11023 JournalNode[root@vvml-yz-hbase-test~]#jps|grep ResourceManager|awk '{print }'|xargs kill -9[root@vvml-yz-hbase-test~]#jps14352 NameNode9621 QuorumPeerMain12300 DFSZKFailoverController15164 Jps13645 JobHistoryServer11023 JournalNode[root@vvml-yz-hbase-test~]#

          (3)查看节点状态,任一节点执行

          yarn rmadmin -getServiceState rm1yarn rmadmin -getServiceState rm2yarn rmadmin -getAllServiceState# 输出[root@vvml-yz-hbase-test~]#yarn rmadmin -getServiceState rm12024-03-05 10:59:29,051 INFO ipc.Client: Retrying connect to server: node1/172.18.4.126:8033. Already tried 0 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=1, sleepTime=1000 MILLISECONDS)Operation failed: Call From node1/172.18.4.126 to node1:8033 failed on connection exception: java.net.ConnectException: Connection refused; For more details see:  http://wiki.apache.org/hadoop/ConnectionRefused[root@vvml-yz-hbase-test~]#yarn rmadmin -getServiceState rm2active[root@vvml-yz-hbase-test~]#yarn rmadmin -getAllServiceState2024-03-05 10:59:31,328 INFO ipc.Client: Retrying connect to server: node1/172.18.4.126:8033. Already tried 0 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=1, sleepTime=1000 MILLISECONDS)node1:8033                                         Failed to connect: Call From node1/172.18.4.126 to node1:8033 failed on connection exception: java.net.ConnectException: Connection refused; For more details see:  http://wiki.apache.org/hadoop/ConnectionRefusednode4:8033                                         active    [root@vvml-yz-hbase-test~]#

                  node4 状态变为 active。

          (4)故障恢复

          # 启动 resourcemanager(node1执行)yarn --daemon start resourcemanagerjps# 输出[root@vvml-yz-hbase-test~]#yarn --daemon start resourcemanager[root@vvml-yz-hbase-test~]#jps14352 NameNode15620 Jps9621 QuorumPeerMain15563 ResourceManager12300 DFSZKFailoverController13645 JobHistoryServer11023 JournalNode[root@vvml-yz-hbase-test~]#

          (5)查看节点状态,任一节点执行

          yarn rmadmin -getAllServiceState# 输出[root@vvml-yz-hbase-test~]#yarn rmadmin -getAllServiceStatenode1:8033                                         standby   node4:8033                                         active    [root@vvml-yz-hbase-test~]#

                  node1 状态变为 standby。

          (6)再次测试自动切换

          # node4 执行# 模拟故障jps|grep ResourceManager|awk '{print }'|xargs kill -9# 确认切换yarn rmadmin -getAllServiceState# 故障恢复yarn --daemon start resourcemanager# 角色交换yarn rmadmin -getAllServiceState# 输出[root@vvml-yz-hbase-test~]#jps|grep ResourceManager|awk '{print }'|xargs kill -9[root@vvml-yz-hbase-test~]#yarn rmadmin -getAllServiceStatenode1:8033                                         active    2024-03-05 11:03:47,735 INFO ipc.Client: Retrying connect to server: node4/172.18.4.86:8033. Already tried 0 time(s); retry policy is RetryUpToMaximumCountWithFixedSleep(maxRetries=1, sleepTime=1000 MILLISECONDS)node4:8033                                         Failed to connect: Call From node4/172.18.4.86 to node4:8033 failed on connection exception: java.net.ConnectException: Connection refused; For more details see:  http://wiki.apache.org/hadoop/ConnectionRefused[root@vvml-yz-hbase-test~]#yarn --daemon start resourcemanager[root@vvml-yz-hbase-test~]#yarn rmadmin -getAllServiceStatenode1:8033                                         active    node4:8033                                         standby   [root@vvml-yz-hbase-test~]#

                  在配置了 Automatic failover 后,可以使用 -forcemanual 参数执行手动切换主备:

          # HDFS NameNode 切换,手动指定主备节点hdfs haadmin -transitionToStandby --forcemanual nn1hdfs haadmin -transitionToActive  --forcemanual nn2# YARN ResourceManager 切换,手动指定主备节点yarn rmadmin -transitionToStandby -forcemanual rm1yarn rmadmin -transitionToActive  -forcemanual rm2

                  一定要谨慎使用 -forcemanual 参数,它可能引起问题,尤其是 YARN ResourceManager HA。在我的测试中,当手动指定 ResourceManager 主备节点切换后,停掉 active 节点,standby 不会变成 active,而是保持 standby 状态。再次启动停掉的节点,此时两个 ResourceManager 节点的状态都是 standby。只有重启 yarn 后才能再次正常执行自动失败切换。

          参考:

          • 大数据Hadoop之——Hadoop 3.3.4 HA(高可用)原理与实现(QJM)
          • HDFS High Availability Using the Quorum Journal Manager
          • ResourceManager High Availability

上一篇:如何将音乐从电脑下载到U盘

下一篇:google怎么代理服务器?