• 基于 HBase & Phoenix 构建实时数仓(2)—— HBase 完全分布式安装


    目录

    一、开启 HDFS 机柜感知

    1. 增加 core-site.xml 配置项

    2. 创建机柜感知脚本

    3. 创建机柜配置信息文件

    4. 分发相关文件到其它节点

    5. 重启 HDFS 使机柜感知生效

    二、主机规划

    三、安装配置 HBase 完全分布式集群

    1. 在所有节点上配置环境变量

    2. 解压、配置环境

    3. 修改 $HBASE_HOME/conf/regionservers 文件

    4. 创建 HBase 使用的临时目录

    5. 修改 HBase 配置文件

    6. 创建备用主节点文件

    7. 分发配置文件到其它节点

    四、启动 HBase 集群

    1. 启动 HBase

    2. 查看 HBase 相关进程

    3. 查看 web 页面

    4. 查看 HBase 在 Zookeeper 中的 znode

    五、安装验证

    1. 进入 hbase shell 查看状态及简单读写测试

    2. 自动切换测试

    (1)故障模拟

    (2)查看状态

    (3)故障恢复

    (5)查看状态

    (6)再次自动切换

    参考:


            完全分布式 HBase 集群的运行依赖于 Zookeeper 和 Hadoop,在前一篇中已经详细介绍了他们的安装部署及运行,参见“基于 HBase & Phoenix 构建实时数仓(1)—— Hadoop HA 安装部署”。本篇继续介绍在相同主机环境下安装配置完全分布式 HBase 集群。

    一、开启 HDFS 机柜感知

            HBase 中的数据存储在 HDFS 上,为了优化性能,首先开启 HDFS 的机柜感知功能。在 node1 上执行下面的操作步骤。

    1. 增加 core-site.xml 配置项

    1. # 编辑 $HADOOP_HOME/etc/hadoop/core-site.xml 文件
    2. vim $HADOOP_HOME/etc/hadoop/core-site.xml
    3. # 增加配置项
    4. <property>
    5.   <name>topology.script.file.name</name>
    6.   <value>/root/hadoop-3.3.6/etc/hadoop/topology.sh</value>
    7. </property>

    2. 创建机柜感知脚本

    1. # 编辑 /root/hadoop-3.3.6/etc/hadoop/topology.sh 文件
    2. vim /root/hadoop-3.3.6/etc/hadoop/topology.sh

            内容如下:

    1. #!/bin/bash
    2. # 此处是你的机架配置文件 topology.sh 所在目录
    3. HADOOP_CONF=/root/hadoop-3.3.6/etc/hadoop
    4. while [ $# -gt 0 ] ;
    5. do
    6. # 脚本第一个参数节点 ip 或者主机名称赋值给 nodeArg
    7. nodeArg=$1
    8. # 以只读的方式打开机架配置文件
    9. exec<${HADOOP_CONF}/topology.data
    10. # 声明返回值临时变量
    11. result=""
    12. # 开始逐行读取
    13. while read line
    14. do
    15. # 赋值行内容给 ar,通过这种 变量=( 值 )的方式赋值,下面可以通过数组的方式取出每个词
    16. ar=( $line )
    17. # 判断输入的主机名或者 ip 是否和该行匹配
    18. if [ "${ar[0]}" = "$nodeArg" ]||[ "${ar[1]}" = "$nodeArg" ]
    19. then
    20. # 将机架信息赋值给 result
    21. result="${ar[2]}"
    22. fi
    23. done
    24. shift
    25. # -z 判断字符串长度是否为0,不为0输出实际机架,为0返回默认机架信息
    26. if [ -z "$result" ]
    27. then
    28. echo -n "/default-rack"
    29. else
    30. echo -n "$result"
    31. fi
    32. done

            修改文件属性为可执行:

    chmod 755 /root/hadoop-3.3.6/etc/hadoop/topology.sh

    3. 创建机柜配置信息文件

    1. # 编辑 /root/hadoop-3.3.6/etc/hadoop/topology.data 文件
    2. vim /root/hadoop-3.3.6/etc/hadoop/topology.data

            内容如下:

    1. 172.18.4.126 node1 /dc1/rack1
    2. 172.18.4.188 node2 /dc1/rack1
    3. 172.18.4.71 node3 /dc1/rack1
    4. 172.18.4.86 node4 /dc1/rack1

    4. 分发相关文件到其它节点

    1. scp /root/hadoop-3.3.6/etc/hadoop/core-site.xml node2:/root/hadoop-3.3.6/etc/hadoop/
    2. scp /root/hadoop-3.3.6/etc/hadoop/topology.sh node2:/root/hadoop-3.3.6/etc/hadoop/
    3. scp /root/hadoop-3.3.6/etc/hadoop/topology.data node2:/root/hadoop-3.3.6/etc/hadoop/
    4. scp /root/hadoop-3.3.6/etc/hadoop/core-site.xml node3:/root/hadoop-3.3.6/etc/hadoop/
    5. scp /root/hadoop-3.3.6/etc/hadoop/topology.sh node3:/root/hadoop-3.3.6/etc/hadoop/
    6. scp /root/hadoop-3.3.6/etc/hadoop/topology.data node3:/root/hadoop-3.3.6/etc/hadoop/
    7. scp /root/hadoop-3.3.6/etc/hadoop/core-site.xml node4:/root/hadoop-3.3.6/etc/hadoop/
    8. scp /root/hadoop-3.3.6/etc/hadoop/topology.sh node4:/root/hadoop-3.3.6/etc/hadoop/
    9. scp /root/hadoop-3.3.6/etc/hadoop/topology.data node4:/root/hadoop-3.3.6/etc/hadoop/

    5. 重启 HDFS 使机柜感知生效

    1. # node1 执行
    2. stop-dfs.sh
    3. # node1、node2、node3 执行
    4. hdfs --daemon stop journalnode
    5. hdfs --daemon start journalnode
    6. # node1 执行
    7. start-dfs.sh

            执行 hdfs dfsadmin -printTopology 打印机架信息,可以看到集群已经按照配置感应到节点机架位置。

    1. [root@vvml-yz-hbase-test~]#hdfs dfsadmin -printTopology
    2. Rack: /dc1/rack1
    3.    172.18.4.71:9866 (node3) In Service
    4.    172.18.4.188:9866 (node2) In Service
    5.    172.18.4.86:9866 (node4) In Service
    6. [root@vvml-yz-hbase-test~]#

    二、主机规划

            所需安装包:HBase-2.5.7

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

                                节点

    进程

    node1

    node2

    node3

    node4

    HMaster

    *

    *

    HRegionServer

    *

    *

    *

    三、安装配置 HBase 完全分布式集群

    1. 在所有节点上配置环境变量

    1. # 编辑 /etc/profile 文件
    2. vim /etc/profile
    3.  
    4. # 添加下面两行
    5. export HBASE_HOME=/root/hbase-2.5.7-hadoop3/
    6. export PATH=$HBASE_HOME/bin:$PATH
    7.  
    8. # 加载生效
    9. source /etc/profile

            在 node1 上执行以下步骤。

    2. 解压、配置环境

    1. # 解压
    2. tar -zxvf hbase-2.5.7-hadoop3-bin.tar.gz
    3. # 将 Hadoop 配置文件复制到 HBase 配置目录下,
    4. # 以解决 java.lang.IllegalArgumentException: java.net.UnknownHostException: mycluster 问题
    5. cp $HADOOP_HOME/etc/hadoop/core-site.xml $HBASE_HOME/conf/
    6. cp $HADOOP_HOME/etc/hadoop/hdfs-site.xml $HBASE_HOME/conf/
    7. # 编辑 $HBASE_HOME/conf/hbase-env.sh 文件设置 HBase 运行环境
    8. vim $HBASE_HOME/conf/hbase-env.sh
    9. # 在文件末尾添加
    10. export JAVA_HOME=/usr/java/jdk1.8.0_202-amd64
    11. export HBASE_LOG_DIR=${HBASE_HOME}/logs
    12. export HBASE_MANAGES_ZK=false
    13. export HBASE_CLASSPATH=/root/hadoop-3.3.6/etc/hadoop
    14. export HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP="true"
    15. export HBASE_PID_DIR=${HBASE_HOME}/tmp
    • HBASE_MANAGES_ZK 设置成 true,则使用 HBase 自带的 Zookeeper 进行管理,只能实现单机模式,常用于测试环境。设为false,启动独立的 Zookeeper。
    • HBASE_CLASSPATH 用于引导 HBase 找到 Hadoop 集群,一定要改成 Hadoop 的配置文件目录,不然无法识别 Hadoop 集群名称。
    • HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP 设置不扫描 hadoop 的 jar。如果扫描很容易出现异常 object is not an instance of declaring class。

    3. 修改 $HBASE_HOME/conf/regionservers 文件

            将下面内容覆盖文件,默认只有 localhost。

    1. # 编辑 $HBASE_HOME/conf/regionservers 文件
    2. vim $HBASE_HOME/conf/regionservers

            内容如下:

    1. node2
    2. node3
    3. node4

    4. 创建 HBase 使用的临时目录

    mkdir $HBASE_HOME/tmp

    5. 修改 HBase 配置文件

    1. # 备份原始文件
    2. cp $HBASE_HOME/conf/hbase-site.xml $HBASE_HOME/conf/hbase-site.xml.bak
    3. # 编辑 $HBASE_HOME/conf/hbase-site.xml 文件
    4. vim $HBASE_HOME/conf/hbase-site.xml

            配置如下:

    1. <configuration>
    2. <property>
    3. <name>hbase.cluster.distributed</name>
    4. <value>true</value>
    5. </property>
    6. <property>
    7. <name>hbase.rootdir</name>
    8. <value>hdfs://mycluster/hbase</value>
    9. </property>
    10. <property>
    11. <name>hbase.tmp.dir</name>
    12. <value>/root/hbase-2.5.7-hadoop3/tmp</value>
    13. </property>
    14. <property>
    15. <name>hbase.zookeeper.quorum</name>
    16. <value>node1:2181,node2:2181,node3:2181</value>
    17. </property>
    18. <!-- Zookeeper元数据快照的存储目录(需要和Zookeeper的zoo.cfg 配置文件中的属性一致)-->
    19. <property>
    20. <name>hbase.zookeeper.property.dataDir</name>
    21. <value>/var/lib/zookeeper/data</value>
    22. </property>
    23. <property>
    24. <name>hbase.unsafe.stream.capability.enforce</name>
    25. <value>false</value>
    26. </property>
    27. <property>
    28. <name>hbase.unsafe.stream.capability.enforce</name>
    29. <value>true</value>
    30. </property>
    31. <property>
    32. <name>hbase.wal.provider</name>
    33. <value>filesystem</value>
    34. </property>
    35. <!-- 为使用 Phoenix,hbase.client.keyvalue.maxsize 不能设置为 0 -->
    36. <property>
    37. <name>hbase.client.keyvalue.maxsize</name>
    38. <value>10485760</value>
    39. </property>
    40. <property>
    41. <name>hbase.master.distributed.log.splitting</name>
    42. <value>true</value>
    43. </property>
    44. <!-- 一次 RPC 请求读取的数据行数,该参数设置有助于优化读取效率 -->
    45. <property>
    46. <name>hbase.client.scanner.caching</name>
    47. <value>5000</value>
    48. </property>
    49. <!-- 当分区中 StoreFile 大小超过该值时,该分区可能会被拆分(受是否开启了自动 split 影响),
    50. 一般线上集群会关闭 split 以免影响性能,因此会将该值设置的比较大,如 100G -->
    51. <property>
    52. <name>hbase.hregion.max.filesize</name>
    53. <value>107374182400</value>
    54. </property>
    55. <property>
    56. <name>hbase.hregion.memstore.flush.size</name>
    57. <value>268435456</value>
    58. </property>
    59. <property>
    60. <name>hbase.regionserver.handler.count</name>
    61. <value>200</value>
    62. </property>
    63. <property>
    64. <name>hbase.regionserver.global.memstore.lowerLimit</name>
    65. <value>0.38</value>
    66. </property>
    67. <property>
    68. <name>hbase.hregion.memstore.block.multiplier</name>
    69. <value>8</value>
    70. </property>
    71. <property>
    72. <name>hbase.server.thread.wakefrequency</name>
    73. <value>1000</value>
    74. </property>
    75. <property>
    76. <name>hbase.rpc.timeout</name>
    77. <value>400000</value>
    78. </property>
    79. <!-- 当 HStore 的 StoreFile 数量超过该配置时,MemStore 刷新到磁盘之前需要进行拆分(split)
    80. 或压缩(compact),除非超过 hbase.hstore.blockingWaitTime 配置的时间。因此,当禁止
    81. 自动主压缩(major compact)的时候该配置项一定要注意配置一个较大的值 -->
    82. <property>
    83. <name>hbase.hstore.blockingStoreFiles</name>
    84. <value>5000</value>
    85. </property>
    86. <property>
    87. <name>hbase.client.scanner.timeout.period</name>
    88. <value>1000000</value>
    89. </property>
    90. <property>
    91. <name>zookeeper.session.timeout</name>
    92. <value>180000</value>
    93. </property>
    94. <property>
    95. <name>hbase.regionserver.optionallogflushinterval</name>
    96. <value>5000</value>
    97. </property>
    98. <property>
    99. <name>hbase.client.write.buffer</name>
    100. <value>5242880</value>
    101. </property>
    102. <!-- 当 HStore 的 StoreFile 数量超过该配置的值时,可能会触发压缩,该值不能设置得过大,否则
    103. 会影响性能,一般建议设置为 3~5 -->
    104. <property>
    105. <name>hbase.hstore.compactionThreshold</name>
    106. <value>5</value>
    107. </property>
    108. <property>
    109. <name>hbase.hstore.compaction.max</name>
    110. <value>12</value>
    111. </property>
    112. <!-- 将该值设置为 1 以禁止线上表的自动拆分(split),可以在建表的时候预分区或者之后手动分区 -->
    113. <property>
    114. <name>hbase.regionserver.regionSplitLimit</name>
    115. <value>1</value>
    116. </property>
    117. <property>
    118. <name>hbase.regionserver.thread.compaction.large</name>
    119. <value>5</value>
    120. </property>
    121. <property>
    122. <name>hbase.regionserver.thread.compaction.small</name>
    123. <value>8</value>
    124. </property>
    125. <property>
    126. <name>hbase.master.logcleaner.ttl</name>
    127. <value>3600000</value>
    128. </property>
    129. <!-- 配置主压缩的时间间隔,0 表示禁止自动主压缩,如果是线上响应时间敏感的应用,则建议禁止而
    130. 等到非高峰期手动压缩,否则很可能导致 HBase 响应超时而引起性能抖动 -->
    131. <property>
    132. <name>hbase.hregion.majorcompaction</name>
    133. <value>0</value>
    134. </property>
    135. <property>
    136. <name>dfs.client.hedged.read.threadpool.size</name>
    137. <value>20</value> <!-- 20 threads -->
    138. </property>
    139. <property>
    140. <name>dfs.client.hedged.read.threshold.millis</name>
    141. <value>5000</value> <!-- 10 milliseconds -->
    142. </property>
    143. <!-- 用于 phoenix 开启 schema 功能-->
    144. <property>
    145. <name>phoenix.schema.isNamespaceMappingEnabled</name>
    146. <value>true</value>
    147. </property>
    148. <property>
    149. <name>phoenix.schema.mapSystemTablesToNamespace</name>
    150. <value>true</value>
    151. </property>
    152. </configuration>

    6. 创建备用主节点文件

    1. # 编辑 $HBASE_HOME/conf/backup-masters 文件
    2. vim $HBASE_HOME/conf/backup-masters

            内容如下:

    node4

            注意:该文件不能写注释,因为启动时会把注释的那行当成服务器列表而导致启动失败。

    7. 分发配置文件到其它节点

    1. scp -r $HBASE_HOME node2:/root/
    2. scp -r $HBASE_HOME node3:/root/
    3. scp -r $HBASE_HOME node4:/root/

    四、启动 HBase 集群

    1. 启动 HBase

    1. # 在 node1 节点上执行
    2. start-hbase.sh
    3. # 输出
    4. [root@vvml-yz-hbase-test~]#start-hbase.sh
    5. running master, logging to /root/hbase-2.5.7-hadoop3//logs/hbase-root-master-vvml-yz-hbase-test.172.18.4.126.out
    6. node2: running regionserver, logging to /root/hbase-2.5.7-hadoop3/bin/../logs/hbase-root-regionserver-vvml-yz-hbase-test.172.18.4.188.out
    7. node3: running regionserver, logging to /root/hbase-2.5.7-hadoop3/bin/../logs/hbase-root-regionserver-vvml-yz-hbase-test.172.18.4.71.out
    8. node4: running regionserver, logging to /root/hbase-2.5.7-hadoop3/bin/../logs/hbase-root-regionserver-vvml-yz-hbase-test.172.18.4.86.out
    9. node4: running master, logging to /root/hbase-2.5.7-hadoop3/bin/../logs/hbase-root-master-vvml-yz-hbase-test.172.18.4.86.out
    10. [root@vvml-yz-hbase-test~]#

    2. 查看 HBase 相关进程

            用 jps 可以看到 HMaster、HRegionServer 进程:

    1. # node1
    2. [root@vvml-yz-hbase-test~]#jps
    3. 578 NameNode
    4. 32724 JournalNode
    5. 9621 QuorumPeerMain
    6. 3654 HMaster
    7. 15563 ResourceManager
    8. 13645 JobHistoryServer
    9. 32079 DFSZKFailoverController
    10. 4367 Jps
    11. [root@vvml-yz-hbase-test~]#
    12. # node2
    13. [root@vvml-yz-hbase-test~]#jps
    14. 1249 DataNode
    15. 17219 NodeManager
    16. 4291 HRegionServer
    17. 1925 JournalNode
    18. 4969 Jps
    19. 15007 QuorumPeerMain
    20. [root@vvml-yz-hbase-test~]#
    21. # node3
    22. [root@vvml-yz-hbase-test~]#jps
    23. 5316 QuorumPeerMain
    24. 12452 DataNode
    25. 13144 JournalNode
    26. 7483 NodeManager
    27. 15356 HRegionServer
    28. 16030 Jps
    29. [root@vvml-yz-hbase-test~]#
    30. # node4
    31. [root@vvml-yz-hbase-test~]#jps
    32. 8352 NodeManager
    33. 22480 HRegionServer
    34. 19857 NameNode
    35. 10531 ResourceManager
    36. 23555 Jps
    37. 19206 DFSZKFailoverController
    38. 22599 HMaster
    39. 19116 DataNode
    40. [root@vvml-yz-hbase-test~]#

    3. 查看 web 页面

            web地址:
    http://node1:16010/
    http://node4:16010/

            如下图所示,node1 为 Master,node4 为 Backup Master。

    4. 查看 HBase 在 Zookeeper 中的 znode

    1. zkCli.sh -server node1:2181
    2. ...
    3. [zk: node1:2181(CONNECTED) 0] ls /hbase
    4. [backup-masters, draining, flush-table-proc, hbaseid, master, master-maintenance, meta-region-server, namespace, online-snapshot, rs, running, splitWAL, switch, table]
    5. [zk: node1:2181(CONNECTED) 1

    五、安装验证

    1. 进入 hbase shell 查看状态及简单读写测试

    1. # 进入 hbase shell
    2. hbase shell
    3. # 查看状态
    4. status
    5. # 创建测试表
    6. create 'test', 'cf'
    7. # 列出表
    8. list 'test'
    9. # 查看表结构
    10. describe 'test'
    11. # 插入数据
    12. put 'test', 'row1', 'cf:a', 'value1'
    13. put 'test', 'row2', 'cf:b', 'value2'
    14. put 'test', 'row3', 'cf:c', 'value3'
    15. # 全表扫描
    16. scan 'test'
    17. # 用 rowkey 查询
    18. get 'test', 'row1'
    19. # 退出 hbase shell
    20. exit

            输出:

    1. [root@vvml-yz-hbase-test~]#hbase shell
    2. HBase Shell
    3. Use "help" to get list of supported commands.
    4. Use "exit" to quit this interactive shell.
    5. For Reference, please visit: http://hbase.apache.org/2.0/book.html#shell
    6. Version 2.5.7-hadoop3, r6788f98356dd70b4a7ff766ea7a8298e022e7b95, Thu Dec 14 16:16:10 PST 2023
    7. Took 0.0011 seconds                                                                                                                       
    8. hbase:001:0> status
    9. 1 active master, 1 backup masters, 3 servers, 0 dead, 0.6667 average load
    10. Took 0.4587 seconds                                                                                                                       
    11. hbase:002:0> create 'test', 'cf'
    12. Created table test
    13. Took 0.6557 seconds                                                                                                                       
    14. => Hbase::Table - test
    15. hbase:003:0> list 'test'
    16. TABLE                                                                                                                                     
    17. test                                                                                                                                      
    18. 1 row(s)
    19. Took 0.0209 seconds                                                                                                                       
    20. => ["test"]
    21. hbase:004:0> describe 'test'
    22. Table test is ENABLED                                                                                                                     
    23. test, {TABLE_ATTRIBUTES => {METADATA => {'hbase.store.file-tracker.impl' => 'DEFAULT'}}}                                                  
    24. COLUMN FAMILIES DESCRIPTION                                                                                                               
    25. {NAME => 'cf', INDEX_BLOCK_ENCODING => 'NONE', VERSIONS => '1', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FORE
    26. VER', MIN_VERSIONS => '0', REPLICATION_SCOPE => '0', BLOOMFILTER => 'ROW', IN_MEMORY => 'false', COMPRESSION => 'NONE', BLOCKCACHE => 'tru
    27. e', BLOCKSIZE => '65536 B (64KB)'}                                                                                                        
    28. 1 row(s)
    29. Quota is disabled
    30. Took 0.1227 seconds                                                                                                                       
    31. hbase:005:0> put 'test', 'row1', 'cf:a', 'value1'
    32. Took 0.0683 seconds                                                                                                                       
    33. hbase:006:0> put 'test', 'row2', 'cf:b', 'value2'
    34. Took 0.0053 seconds                                                                                                                       
    35. hbase:007:0> put 'test', 'row3', 'cf:c', 'value3'
    36. Took 0.0093 seconds                                                                                                                       
    37. hbase:008:0> scan 'test'
    38. ROW                                 COLUMN+CELL                                                                                           
    39.  row1                               column=cf:a, timestamp=2024-03-07T11:20:22.299, value=value1                                          
    40.  row2                               column=cf:b, timestamp=2024-03-07T11:20:29.270, value=value2                                          
    41.  row3                               column=cf:c, timestamp=2024-03-07T11:20:33.538, value=value3                                          
    42. 3 row(s)
    43. Took 0.0241 seconds                                                                                                                       
    44. hbase:009:0> get 'test', 'row1'
    45. COLUMN                              CELL                                                                                                  
    46.  cf:a                               timestamp=2024-03-07T11:20:22.299, value=value1                                                       
    47. 1 row(s)
    48. Took 0.0071 seconds                                                                                                                       
    49. hbase:010:0> exit
    50. [root@vvml-yz-hbase-test~]#

            可以看到,现在是一个 active master,一个 backup masters,三个 RegionServer。

    2. 自动切换测试

    (1)故障模拟

    1. # 在 active master 节点上(这里是 node1),kill 掉 HMaster 进程
    2. jps|grep HMaster|awk '{print $1}'|xargs kill -9

    (2)查看状态

    1. [root@vvml-yz-hbase-test~]#hbase shell
    2. HBase Shell
    3. Use "help" to get list of supported commands.
    4. Use "exit" to quit this interactive shell.
    5. For Reference, please visit: http://hbase.apache.org/2.0/book.html#shell
    6. Version 2.5.7-hadoop3, r6788f98356dd70b4a7ff766ea7a8298e022e7b95, Thu Dec 14 16:16:10 PST 2023
    7. Took 0.0010 seconds                                                                                                                       
    8. hbase:001:0> status
    9. 1 active master, 0 backup masters, 3 servers, 0 dead, 1.0000 average load
    10. Took 0.4730 seconds                                                                                                                       
    11. hbase:002:0> put 'test', 'row4', 'cf:d', 'value4'
    12. Took 0.1254 seconds                                                                                                                       
    13. hbase:003:0> scan 'test'
    14. ROW                                 COLUMN+CELL                                                                                           
    15.  row1                               column=cf:a, timestamp=2024-03-07T11:20:22.299, value=value1                                          
    16.  row2                               column=cf:b, timestamp=2024-03-07T11:20:29.270, value=value2                                          
    17.  row3                               column=cf:c, timestamp=2024-03-07T11:20:33.538, value=value3                                          
    18.  row4                               column=cf:d, timestamp=2024-03-07T11:26:55.140, value=value4                                          
    19. 4 row(s)
    20. Took 0.0244 seconds                                                                                                                       
    21. hbase:004:0> exit
    22. [root@vvml-yz-hbase-test~]#

            现在只有一个 active master,数据正常读写。

    (3)故障恢复

    1. # node1 上执行
    2. hbase-daemon.sh start master
    3. jps

            输出:

    1. [root@vvml-yz-hbase-test~]#hbase-daemon.sh start master
    2. running master, logging to /root/hbase-2.5.7-hadoop3//logs/hbase-root-master-vvml-yz-hbase-test.172.18.4.126.out
    3. [root@vvml-yz-hbase-test~]#jps
    4. 578 NameNode
    5. 7138 Jps
    6. 32724 JournalNode
    7. 9621 QuorumPeerMain
    8. 15563 ResourceManager
    9. 13645 JobHistoryServer
    10. 6781 HMaster
    11. 32079 DFSZKFailoverController
    12. [root@vvml-yz-hbase-test~]#

    (5)查看状态

    1. [root@vvml-yz-hbase-test~]#hbase shell
    2. HBase Shell
    3. Use "help" to get list of supported commands.
    4. Use "exit" to quit this interactive shell.
    5. For Reference, please visit: http://hbase.apache.org/2.0/book.html#shell
    6. Version 2.5.7-hadoop3, r6788f98356dd70b4a7ff766ea7a8298e022e7b95, Thu Dec 14 16:16:10 PST 2023
    7. Took 0.0011 seconds                                                                                                                       
    8. hbase:001:0> status
    9. 1 active master, 1 backup masters, 3 servers, 0 dead, 1.0000 average load
    10. Took 5.4624 seconds                                                                                                                       
    11. hbase:002:0> status 'detailed'
    12. version 2.5.7-hadoop3
    13. 0 regionsInTransition
    14. active master:  node4:16000 1709780353589
    15.     RpcServer.priority.RWQ.Fifo.write.handler=0,queue=0,port=16000: status=Waiting for a call, state=WAITING, startTime=1709781875067, completionTime=-1
    16.     RpcServer.priority.RWQ.Fifo.write.handler=1,queue=0,port=16000: status=Waiting for a call, state=WAITING, startTime=1709781875221, completionTime=-1
    17.     RpcServer.default.FPBQ.Fifo.handler=199,queue=19,port=16000: status=Servicing call from 172.18.4.126:36280: GetClusterStatus, state=RUNNING, startTime=1709781969214, completionTime=-1
    18. 1 backup masters
    19.     node1:16000 1709782204055
    20. master coprocessors: []
    21. 3 live servers
    22.     node2:16020 1709780352218
    23. ...
    24.     node3:16020 1709780355334
    25. ...
    26.     node4:16020 1709780353541
    27. ...
    28. 0 dead servers
    29. Took 0.0275 seconds                                                                                                                       
    30. => #<Java::JavaUtil::Collections::UnmodifiableRandomAccessList:0x7db162f2>
    31. hbase:003:0> exit
    32. [root@vvml-yz-hbase-test~]#

            可以看到,现在 node1 和 node4 互换了角色,node4 为 active master,node1 为 backup master,三个 RegionServer 正常。

    (6)再次自动切换

    1. # node4 上执行
    2. jps|grep HMaster|awk '{print $1}'|xargs kill -9
    3. # 查看状态
    4. [root@vvml-yz-hbase-test~]#hbase shell
    5. HBase Shell
    6. Use "help" to get list of supported commands.
    7. Use "exit" to quit this interactive shell.
    8. For Reference, please visit: http://hbase.apache.org/2.0/book.html#shell
    9. Version 2.5.7-hadoop3, r6788f98356dd70b4a7ff766ea7a8298e022e7b95, Thu Dec 14 16:16:10 PST 2023
    10. Took 0.0011 seconds                                                                                                                       
    11. hbase:001:0> status
    12. 1 active master, 0 backup masters, 3 servers, 0 dead, 1.0000 average load
    13. Took 5.4625 seconds                                                                                                                       
    14. hbase:002:0> exit
    15. [root@vvml-yz-hbase-test~]#
    16. # node4 上执行
    17. hbase-daemon.sh start master
    18. # 查看状态
    19. [root@vvml-yz-hbase-test~]#hbase shell
    20. HBase Shell
    21. Use "help" to get list of supported commands.
    22. Use "exit" to quit this interactive shell.
    23. For Reference, please visit: http://hbase.apache.org/2.0/book.html#shell
    24. Version 2.5.7-hadoop3, r6788f98356dd70b4a7ff766ea7a8298e022e7b95, Thu Dec 14 16:16:10 PST 2023
    25. Took 0.0010 seconds                                                                                                                       
    26. hbase:001:0> status 'detailed'
    27. version 2.5.7-hadoop3
    28. 0 regionsInTransition
    29. active master:  node1:16000 1709782204055
    30.     RpcServer.priority.RWQ.Fifo.write.handler=0,queue=0,port=16000: status=Waiting for a call, state=WAITING, startTime=1709782709881, completionTime=-1
    31.     RpcServer.priority.RWQ.Fifo.write.handler=1,queue=0,port=16000: status=Waiting for a call, state=WAITING, startTime=1709782709895, completionTime=-1
    32.     RpcServer.default.FPBQ.Fifo.handler=199,queue=19,port=16000: status=Servicing call from 172.18.4.86:39042: GetClusterStatus, state=RUNNING, startTime=1709782750795, completionTime=-1
    33. 1 backup masters
    34.     node4:16000 1709782808170
    35. master coprocessors: []
    36. 3 live servers
    37.     node2:16020 1709780352218
    38. ...
    39.     node3:16020 1709780355334
    40. ...
    41.     node4:16020 1709780353541
    42. ...
    43. 0 dead servers
    44. Took 0.4674 seconds                                                                                                                       
    45. => #<Java::JavaUtil::Collections::UnmodifiableRandomAccessList:0x28bd5015>
    46. hbase:002:0> put 'test', 'row5', 'cf:e', 'value5'
    47. Took 0.1138 seconds                                                                                                                       
    48. hbase:003:0> scan 'test'
    49. ROW                                 COLUMN+CELL                                                                                           
    50.  row1                               column=cf:a, timestamp=2024-03-07T11:20:22.299, value=value1                                          
    51.  row2                               column=cf:b, timestamp=2024-03-07T11:20:29.270, value=value2                                          
    52.  row3                               column=cf:c, timestamp=2024-03-07T11:20:33.538, value=value3                                          
    53.  row4                               column=cf:d, timestamp=2024-03-07T11:26:55.140, value=value4                                          
    54.  row5                               column=cf:e, timestamp=2024-03-07T11:41:18.171, value=value5                                          
    55. 5 row(s)
    56. Took 0.0293 seconds                                                                                                                       
    57. hbase:004:0> exit
    58. [root@vvml-yz-hbase-test~]#

            可以看到,现在 node1 和 node4 再次互换了角色,node1 为 active master,node4 为 backup master,三个 RegionServer 正常,数据正常读写。

    参考:

  • 相关阅读:
    前端通过Blob或File文件获取二进制数据
    c语言---18 函数(自定义函数)
    CSS 实现音频loding动画
    什么是凸函数
    Pr:导出设置之编码设置
    SpringBoot - Swagger2的集成与使用(二)
    Java反射(Reflex)机制
    Linux:rpm与yum(内含:1.rpm介绍+2.卸载rpm包+3.安装rpm(应用案例)+4.yum(应用案例))
    UDP的可靠性传输2
    【深度学习】5-从计算图直观认识“激活函数不以零为中心导致收敛变慢”
  • 原文地址:https://blog.csdn.net/wzy0623/article/details/136551767