当前位置: 首页 > news >正文

基于 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 配置项

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

2. 创建机柜感知脚本

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

        内容如下:

#!/bin/bash
# 此处是你的机架配置文件 topology.sh 所在目录
HADOOP_CONF=/root/hadoop-3.3.6/etc/hadoop
while [ $# -gt 0 ] ;
do# 脚本第一个参数节点 ip 或者主机名称赋值给 nodeArgnodeArg=$1# 以只读的方式打开机架配置文件exec<${HADOOP_CONF}/topology.data# 声明返回值临时变量result=""# 开始逐行读取while read linedo# 赋值行内容给 ar,通过这种 变量=( 值 )的方式赋值,下面可以通过数组的方式取出每个词ar=( $line )# 判断输入的主机名或者 ip 是否和该行匹配if [ "${ar[0]}" = "$nodeArg" ]||[ "${ar[1]}" = "$nodeArg" ]then# 将机架信息赋值给 resultresult="${ar[2]}"fidoneshift# -z 判断字符串长度是否为0,不为0输出实际机架,为0返回默认机架信息if [ -z "$result" ]thenecho -n "/default-rack"elseecho -n "$result"fi
done

        修改文件属性为可执行:

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

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

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

        内容如下:

172.18.4.126 node1 /dc1/rack1
172.18.4.188 node2 /dc1/rack1
172.18.4.71 node3 /dc1/rack1
172.18.4.86 node4 /dc1/rack1

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

scp /root/hadoop-3.3.6/etc/hadoop/core-site.xml node2:/root/hadoop-3.3.6/etc/hadoop/
scp /root/hadoop-3.3.6/etc/hadoop/topology.sh node2:/root/hadoop-3.3.6/etc/hadoop/
scp /root/hadoop-3.3.6/etc/hadoop/topology.data node2:/root/hadoop-3.3.6/etc/hadoop/scp /root/hadoop-3.3.6/etc/hadoop/core-site.xml node3:/root/hadoop-3.3.6/etc/hadoop/
scp /root/hadoop-3.3.6/etc/hadoop/topology.sh node3:/root/hadoop-3.3.6/etc/hadoop/
scp /root/hadoop-3.3.6/etc/hadoop/topology.data node3:/root/hadoop-3.3.6/etc/hadoop/scp /root/hadoop-3.3.6/etc/hadoop/core-site.xml node4:/root/hadoop-3.3.6/etc/hadoop/
scp /root/hadoop-3.3.6/etc/hadoop/topology.sh node4:/root/hadoop-3.3.6/etc/hadoop/
scp /root/hadoop-3.3.6/etc/hadoop/topology.data node4:/root/hadoop-3.3.6/etc/hadoop/

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

# node1 执行
stop-dfs.sh
# node1、node2、node3 执行
hdfs --daemon stop journalnode
hdfs --daemon start journalnode
# node1 执行
start-dfs.sh

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

[root@vvml-yz-hbase-test~]#hdfs dfsadmin -printTopology
Rack: /dc1/rack1172.18.4.71:9866 (node3) In Service172.18.4.188:9866 (node2) In Service172.18.4.86:9866 (node4) In Service[root@vvml-yz-hbase-test~]#

二、主机规划

        所需安装包:HBase-2.5.7

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

                            节点

进程

node1

node2

node3

node4

HMaster

*

*

HRegionServer

*

*

*

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

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

# 编辑 /etc/profile 文件
vim /etc/profile# 添加下面两行
export HBASE_HOME=/root/hbase-2.5.7-hadoop3/
export PATH=$HBASE_HOME/bin:$PATH# 加载生效
source /etc/profile

        在 node1 上执行以下步骤。

2. 解压、配置环境

# 解压
tar -zxvf hbase-2.5.7-hadoop3-bin.tar.gz# 编辑 $HBASE_HOME/conf/hbase-env.sh 文件设置 HBase 运行环境
vim $HBASE_HOME/conf/hbase-env.sh# 在文件末尾添加
export JAVA_HOME=/usr/java/jdk1.8.0_202-amd64
export HBASE_LOG_DIR=${HBASE_HOME}/logs
export HBASE_MANAGES_ZK=false
export HBASE_CLASSPATH=/root/hadoop-3.3.6/etc/hadoop
export HBASE_DISABLE_HADOOP_CLASSPATH_LOOKUP="true"
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。

# 编辑 $HBASE_HOME/conf/regionservers 文件
vim $HBASE_HOME/conf/regionservers

        内容如下:

node2
node3
node4

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

mkdir $HBASE_HOME/tmp

5. 修改 HBase 配置文件

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

        配置如下:

<configuration><property><name>hbase.cluster.distributed</name><value>true</value>
</property><property><name>hbase.rootdir</name><value>hdfs://mycluster/hbase</value>
</property><property><name>hbase.tmp.dir</name><value>/root/hbase-2.5.7-hadoop3/tmp</value>
</property><property><name>hbase.zookeeper.quorum</name><value>node1:2181,node2:2181,node3:2181</value>
</property><!-- Zookeeper元数据快照的存储目录(需要和Zookeeper的zoo.cfg 配置文件中的属性一致)-->
<property><name>hbase.zookeeper.property.dataDir</name><value>/var/lib/zookeeper/data</value>
</property><property><name>hbase.unsafe.stream.capability.enforce</name><value>false</value>
</property><property><name>hbase.unsafe.stream.capability.enforce</name><value>true</value>
</property><property><name>hbase.wal.provider</name><value>filesystem</value>
</property><!-- 为使用 Phoenix,hbase.client.keyvalue.maxsize 不能设置为 0 -->
<property><name>hbase.client.keyvalue.maxsize</name><value>10485760</value>
</property><property><name>hbase.master.distributed.log.splitting</name><value>true</value>
</property><!-- 一次 RPC 请求读取的数据行数,该参数设置有助于优化读取效率 -->
<property><name>hbase.client.scanner.caching</name><value>5000</value>
</property><!-- 当分区中 StoreFile 大小超过该值时,该分区可能会被拆分(受是否开启了自动 split 影响),一般线上集群会关闭 split 以免影响性能,因此会将该值设置的比较大,如 100G -->
<property><name>hbase.hregion.max.filesize</name><value>107374182400</value>
</property><property><name>hbase.hregion.memstore.flush.size</name><value>268435456</value>
</property><property><name>hbase.regionserver.handler.count</name><value>200</value>
</property><property><name>hbase.regionserver.global.memstore.lowerLimit</name><value>0.38</value>
</property><property><name>hbase.hregion.memstore.block.multiplier</name><value>8</value>
</property><property><name>hbase.server.thread.wakefrequency</name><value>1000</value>
</property><property><name>hbase.rpc.timeout</name><value>400000</value>
</property><!-- 当 HStore 的 StoreFile 数量超过该配置时,MemStore 刷新到磁盘之前需要进行拆分(split)或压缩(compact),除非超过 hbase.hstore.blockingWaitTime 配置的时间。因此,当禁止 自动主压缩(major compact)的时候该配置项一定要注意配置一个较大的值 -->
<property><name>hbase.hstore.blockingStoreFiles</name><value>5000</value>
</property><property><name>hbase.client.scanner.timeout.period</name><value>1000000</value>
</property><property><name>zookeeper.session.timeout</name><value>180000</value>
</property><property><name>hbase.regionserver.optionallogflushinterval</name><value>5000</value>
</property><property><name>hbase.client.write.buffer</name><value>5242880</value>
</property><!-- 当 HStore 的 StoreFile 数量超过该配置的值时,可能会触发压缩,该值不能设置得过大,否则会影响性能,一般建议设置为 3~5 -->
<property><name>hbase.hstore.compactionThreshold</name><value>5</value>
</property><property><name>hbase.hstore.compaction.max</name><value>12</value>
</property><!-- 将该值设置为 1 以禁止线上表的自动拆分(split),可以在建表的时候预分区或者之后手动分区 -->
<property><name>hbase.regionserver.regionSplitLimit</name><value>1</value>
</property><property><name>hbase.regionserver.thread.compaction.large</name><value>5</value>
</property><property><name>hbase.regionserver.thread.compaction.small</name><value>8</value>
</property><property><name>hbase.master.logcleaner.ttl</name><value>3600000</value>
</property><!-- 配置主压缩的时间间隔,0 表示禁止自动主压缩,如果是线上响应时间敏感的应用,则建议禁止而等到非高峰期手动压缩,否则很可能导致 HBase 响应超时而引起性能抖动 -->
<property><name>hbase.hregion.majorcompaction</name><value>0</value>
</property><property><name>dfs.client.hedged.read.threadpool.size</name><value>20</value>  <!-- 20 threads -->
</property><property><name>dfs.client.hedged.read.threshold.millis</name><value>5000</value>  <!-- 10 milliseconds -->
</property></configuration>

6. 创建备用主节点文件

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

        内容如下:

node4

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

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

scp -r $HBASE_HOME node2:/root/
scp -r $HBASE_HOME node3:/root/
scp -r $HBASE_HOME node4:/root/

四、启动 HBase 集群

1. 启动 HBase

# 在 node1 节点上执行
start-hbase.sh# 输出
[root@vvml-yz-hbase-test~]#start-hbase.sh
running master, logging to /root/hbase-2.5.7-hadoop3//logs/hbase-root-master-vvml-yz-hbase-test.172.18.4.126.out
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
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
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
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
[root@vvml-yz-hbase-test~]#

2. 查看 HBase 相关进程

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

# node1
[root@vvml-yz-hbase-test~]#jps
578 NameNode
32724 JournalNode
9621 QuorumPeerMain
3654 HMaster
15563 ResourceManager
13645 JobHistoryServer
32079 DFSZKFailoverController
4367 Jps
[root@vvml-yz-hbase-test~]## node2
[root@vvml-yz-hbase-test~]#jps
1249 DataNode
17219 NodeManager
4291 HRegionServer
1925 JournalNode
4969 Jps
15007 QuorumPeerMain
[root@vvml-yz-hbase-test~]## node3
[root@vvml-yz-hbase-test~]#jps
5316 QuorumPeerMain
12452 DataNode
13144 JournalNode
7483 NodeManager
15356 HRegionServer
16030 Jps
[root@vvml-yz-hbase-test~]## node4
[root@vvml-yz-hbase-test~]#jps
8352 NodeManager
22480 HRegionServer
19857 NameNode
10531 ResourceManager
23555 Jps
19206 DFSZKFailoverController
22599 HMaster
19116 DataNode
[root@vvml-yz-hbase-test~]#

3. 查看 web 页面

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

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

4. 查看 HBase 在 Zookeeper 中的 znode

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

五、安装验证

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

# 进入 hbase shell
hbase shell
# 查看状态
status
# 创建测试表
create 'test', 'cf'
# 列出表
list 'test'
# 查看表结构
describe 'test'
# 插入数据
put 'test', 'row1', 'cf:a', 'value1'
put 'test', 'row2', 'cf:b', 'value2'
put 'test', 'row3', 'cf:c', 'value3'
# 全表扫描
scan 'test'
# 用 rowkey 查询
get 'test', 'row1'
# 退出 hbase shell
exit

        输出:

[root@vvml-yz-hbase-test~]#hbase shell
HBase Shell
Use "help" to get list of supported commands.
Use "exit" to quit this interactive shell.
For Reference, please visit: http://hbase.apache.org/2.0/book.html#shell
Version 2.5.7-hadoop3, r6788f98356dd70b4a7ff766ea7a8298e022e7b95, Thu Dec 14 16:16:10 PST 2023
Took 0.0011 seconds                                                                                                                       
hbase:001:0> status
1 active master, 1 backup masters, 3 servers, 0 dead, 0.6667 average load
Took 0.4587 seconds                                                                                                                       
hbase:002:0> create 'test', 'cf'
Created table test
Took 0.6557 seconds                                                                                                                       
=> Hbase::Table - test
hbase:003:0> list 'test'
TABLE                                                                                                                                     
test                                                                                                                                      
1 row(s)
Took 0.0209 seconds                                                                                                                       
=> ["test"]
hbase:004:0> describe 'test'
Table test is ENABLED                                                                                                                     
test, {TABLE_ATTRIBUTES => {METADATA => {'hbase.store.file-tracker.impl' => 'DEFAULT'}}}                                                  
COLUMN FAMILIES DESCRIPTION                                                                                                               
{NAME => 'cf', INDEX_BLOCK_ENCODING => 'NONE', VERSIONS => '1', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FORE
VER', MIN_VERSIONS => '0', REPLICATION_SCOPE => '0', BLOOMFILTER => 'ROW', IN_MEMORY => 'false', COMPRESSION => 'NONE', BLOCKCACHE => 'tru
e', BLOCKSIZE => '65536 B (64KB)'}                                                                                                        1 row(s)
Quota is disabled
Took 0.1227 seconds                                                                                                                       
hbase:005:0> put 'test', 'row1', 'cf:a', 'value1'
Took 0.0683 seconds                                                                                                                       
hbase:006:0> put 'test', 'row2', 'cf:b', 'value2'
Took 0.0053 seconds                                                                                                                       
hbase:007:0> put 'test', 'row3', 'cf:c', 'value3'
Took 0.0093 seconds                                                                                                                       
hbase:008:0> scan 'test'
ROW                                 COLUMN+CELL                                                                                           row1                               column=cf:a, timestamp=2024-03-07T11:20:22.299, value=value1                                          row2                               column=cf:b, timestamp=2024-03-07T11:20:29.270, value=value2                                          row3                               column=cf:c, timestamp=2024-03-07T11:20:33.538, value=value3                                          
3 row(s)
Took 0.0241 seconds                                                                                                                       
hbase:009:0> get 'test', 'row1'
COLUMN                              CELL                                                                                                  cf:a                               timestamp=2024-03-07T11:20:22.299, value=value1                                                       
1 row(s)
Took 0.0071 seconds                                                                                                                       
hbase:010:0> exit
[root@vvml-yz-hbase-test~]#

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

2. 自动切换测试

(1)故障模拟

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

(2)查看状态

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

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

(3)故障恢复

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

        输出:

[root@vvml-yz-hbase-test~]#hbase-daemon.sh start master
running master, logging to /root/hbase-2.5.7-hadoop3//logs/hbase-root-master-vvml-yz-hbase-test.172.18.4.126.out
[root@vvml-yz-hbase-test~]#jps
578 NameNode
7138 Jps
32724 JournalNode
9621 QuorumPeerMain
15563 ResourceManager
13645 JobHistoryServer
6781 HMaster
32079 DFSZKFailoverController
[root@vvml-yz-hbase-test~]#

(5)查看状态

[root@vvml-yz-hbase-test~]#hbase shell
HBase Shell
Use "help" to get list of supported commands.
Use "exit" to quit this interactive shell.
For Reference, please visit: http://hbase.apache.org/2.0/book.html#shell
Version 2.5.7-hadoop3, r6788f98356dd70b4a7ff766ea7a8298e022e7b95, Thu Dec 14 16:16:10 PST 2023
Took 0.0011 seconds                                                                                                                       
hbase:001:0> status
1 active master, 1 backup masters, 3 servers, 0 dead, 1.0000 average load
Took 5.4624 seconds                                                                                                                       
hbase:002:0> status 'detailed'
version 2.5.7-hadoop3
0 regionsInTransition
active master:  node4:16000 1709780353589RpcServer.priority.RWQ.Fifo.write.handler=0,queue=0,port=16000: status=Waiting for a call, state=WAITING, startTime=1709781875067, completionTime=-1RpcServer.priority.RWQ.Fifo.write.handler=1,queue=0,port=16000: status=Waiting for a call, state=WAITING, startTime=1709781875221, completionTime=-1RpcServer.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
1 backup mastersnode1:16000 1709782204055
master coprocessors: []
3 live serversnode2:16020 1709780352218
...node3:16020 1709780355334
...node4:16020 1709780353541
...
0 dead servers
Took 0.0275 seconds                                                                                                                       
=> #<Java::JavaUtil::Collections::UnmodifiableRandomAccessList:0x7db162f2>
hbase:003:0> exit
[root@vvml-yz-hbase-test~]#

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

(6)再次自动切换

# node4 上执行
jps|grep HMaster|awk '{print $1}'|xargs kill -9# 查看状态
[root@vvml-yz-hbase-test~]#hbase shell
HBase Shell
Use "help" to get list of supported commands.
Use "exit" to quit this interactive shell.
For Reference, please visit: http://hbase.apache.org/2.0/book.html#shell
Version 2.5.7-hadoop3, r6788f98356dd70b4a7ff766ea7a8298e022e7b95, Thu Dec 14 16:16:10 PST 2023
Took 0.0011 seconds                                                                                                                       
hbase:001:0> status
1 active master, 0 backup masters, 3 servers, 0 dead, 1.0000 average load
Took 5.4625 seconds                                                                                                                       
hbase:002:0> exit
[root@vvml-yz-hbase-test~]## node4 上执行
hbase-daemon.sh start master# 查看状态
[root@vvml-yz-hbase-test~]#hbase shell
HBase Shell
Use "help" to get list of supported commands.
Use "exit" to quit this interactive shell.
For Reference, please visit: http://hbase.apache.org/2.0/book.html#shell
Version 2.5.7-hadoop3, r6788f98356dd70b4a7ff766ea7a8298e022e7b95, Thu Dec 14 16:16:10 PST 2023
Took 0.0010 seconds                                                                                                                       
hbase:001:0> status 'detailed'
version 2.5.7-hadoop3
0 regionsInTransition
active master:  node1:16000 1709782204055RpcServer.priority.RWQ.Fifo.write.handler=0,queue=0,port=16000: status=Waiting for a call, state=WAITING, startTime=1709782709881, completionTime=-1RpcServer.priority.RWQ.Fifo.write.handler=1,queue=0,port=16000: status=Waiting for a call, state=WAITING, startTime=1709782709895, completionTime=-1RpcServer.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
1 backup mastersnode4:16000 1709782808170
master coprocessors: []
3 live serversnode2:16020 1709780352218
...node3:16020 1709780355334
...node4:16020 1709780353541
...
0 dead servers
Took 0.4674 seconds                                                                                                                       
=> #<Java::JavaUtil::Collections::UnmodifiableRandomAccessList:0x28bd5015>
hbase:002:0> put 'test', 'row5', 'cf:e', 'value5'
Took 0.1138 seconds                                                                                                                       
hbase:003:0> scan 'test'
ROW                                 COLUMN+CELL                                                                                           row1                               column=cf:a, timestamp=2024-03-07T11:20:22.299, value=value1                                          row2                               column=cf:b, timestamp=2024-03-07T11:20:29.270, value=value2                                          row3                               column=cf:c, timestamp=2024-03-07T11:20:33.538, value=value3                                          row4                               column=cf:d, timestamp=2024-03-07T11:26:55.140, value=value4                                          row5                               column=cf:e, timestamp=2024-03-07T11:41:18.171, value=value5                                          
5 row(s)
Took 0.0293 seconds                                                                                                                       
hbase:004:0> exit
[root@vvml-yz-hbase-test~]#

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

参考:

  • Hadoop3.x 机架感知机制与配置
  • 大数据开源框架环境搭建(五)——Hbase完全分布式集群的安装部署
  • Apache HBase ™ Reference Guide
     

相关文章:

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

目录 一、开启 HDFS 机柜感知 1. 增加 core-site.xml 配置项 2. 创建机柜感知脚本 3. 创建机柜配置信息文件 4. 分发相关文件到其它节点 5. 重启 HDFS 使机柜感知生效 二、主机规划 三、安装配置 HBase 完全分布式集群 1. 在所有节点上配置环境变量 2. 解压、配置环境…...

equals()与==的区别

在Java中 可以对基本类型进行比较,比较的是值是否相等 也可以对引用类型(对象)进行比较,比较的是引用变量所指向的空间地址 public static void main(String[] args) {int a 10;int b 10;System.out.println(ab);//true// 基本类型比较,比较值是否相等String s1 new Stri…...

什么是数据采集与监视控制系统(SCADA)?

SCADA数据采集是一种用于监控和控制工业过程的系统。它可以实时从现场设备获得数据并将其传输到中央计算机&#xff0c;以便进行监控和控制。SCADA数据采集系统通常使用传感器、仪表和控制器收集各种类型的数据&#xff0c;例如温度、压力、流量等&#xff0c;然后将这些数据汇…...

基于SpringBoot+Vue+ElementUI+Mybatis前后端分离管理系统超详细教程(五)——多条件搜索并分页展示

前后端数据交互 书接上文&#xff0c;我们上节课通过前后端数据交互实现了分页查询和单条件搜索分页查询的功能&#xff0c;最后留了个小尾巴&#xff0c;就是把其他两个搜索条件&#xff08;email,address&#xff09;也加进来&#xff0c;实现多条件搜索并分页展示。这节课我…...

鸿蒙实战开发Camera组件:【相机】

相机组件支持相机业务的开发&#xff0c;开发者可以通过已开放的接口实现相机硬件的访问、操作和新功能开发&#xff0c;最常见的操作如&#xff1a;预览、拍照和录像等。 基本概念 拍照 此功能用于拍摄采集照片。 预览 此功能用于在开启相机后&#xff0c;在缓冲区内重复采集…...

政安晨:【深度学习处理实践】(三)—— 处理时间序列的数据准备

在深度学习中&#xff0c;对时间序列的处理主要涉及到以下几个方面&#xff1a; 序列建模&#xff1a;深度学习可以用于对时间序列进行建模。常用的模型包括循环神经网络&#xff08;Recurrent Neural Networks, RNN&#xff09;和长短期记忆网络&#xff08;Long Short-Term M…...

PCL不同格式点云读取速度(Binary和ASCII )

首先说明一点&#xff1a;Binary(二进制)格式点云文件进行读取时要比Ascll码格式点云读取时要快的多&#xff0c;尤其是对于大型的点云文件&#xff0c;如几百万、甚至几千万个点云的情况下。 今天遇到了一种情况&#xff0c;在写项目的时候进行点云读取&#xff0c;读取的时候…...

Neo4J图数据库入门示例

前言 - Neo4j和MySQL的区别 Neo4j 和 MySQL 是两种不同类型的数据库&#xff0c;它们在数据模型、用途、性能和查询语言等方面有着显著的区别。以下是它们的主要区别&#xff1a; 数据模型&#xff1a; Neo4j 是一种图数据库&#xff0c;它使用图数据模型来存储和查询数据。在…...

牛客每日一题之 二维前缀和

题目介绍&#xff1a; 题目链接&#xff1a;【模板】二维前缀和_牛客题霸_牛客网 先举两个简单的例子&#xff0c;来帮大家理解题目&#xff0c;注意理解二维前缀和要先要一维前缀和的基础&#xff0c;不了解的可以看我上一篇博客。 若x11&#xff0c;y11, x23, y2 3,这是要…...

动态规划 Leetcode 70 爬楼梯

爬楼梯 Leetcode 70 学习记录自代码随想录 假设你正在爬楼梯。需要 n 阶你才能到达楼顶。 每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢&#xff1f; 示例 1&#xff1a; 输入&#xff1a;n 2 输出&#xff1a;2 解释&#xff1a;有两种方法可以爬到…...

(未解决)macOS matplotlib 中文是方框

reference&#xff1a; Mac OS系统下实现python matplotlib包绘图显示中文(亲测有效)_mac plt 中文值-CSDN博客 module ‘matplotlib.font_manager‘ has no attribute ‘_rebuild‘解决方法_font_manager未解析-CSDN博客 # 问题描述&#xff08;笑死 显而易见 # solve 找到…...

深入探讨C#中的递归算法

一、什么是递归算法&#xff1f; 递归是指一个函数或方法在执行过程中调用自身的情况。递归算法是编程中常见的一种解决问题的方法。它将一个问题分解成一个或多个与原问题相似但规模更小的子问题&#xff0c;然后通过解决这些子问题来解决原问题。递归算法通常用于解决重复性的…...

三款顶级开源RAG (检索增强生成)工具:Verba、Unstructured 和 Neum

三款顶级开源RAG (检索增强生成)工具&#xff1a;Verba、Unstructured 和 Neum 概述 随着企业对话式数据处理需求的提升&#xff0c;面临的挑战是数据隐私性和缺乏企业级解决方案。虽然类似LangChain能在短时间内构建RAG应用&#xff0c;但忽视了文档解析、多来源数据ETL、批量…...

VC++、MFC中操作excel时,CRange中get_EntireRow()和get_EntireColumn()函数的用法及区别是什么?

在VC和MFC中操作Excel时&#xff0c;通过COM接口与Excel交互时&#xff0c;CRange 对象&#xff08;或更准确地说是 Excel::Range 对象&#xff09;代表一个单元格范围。CRange 类提供了一系列方法来获取或操作这个范围内的单元格。其中&#xff0c;get_EntireRow() 和 get_Ent…...

npm 操作报错记录1- uninstall 卸载失效

npm 操作报错记录1- uninstall 卸载失效 1、问题描述 安装了包 vue/cli-plugin-eslint4.5.0 vue/eslint-config-prettier9.0.0 但是没有使用 -d &#xff0c;所以想重新安装&#xff0c;就使用 uninstall 命令卸载&#xff0c;结果卸载了没反应&#xff0c;也没有报错&#xf…...

openCV保存图像

保存图像 //保存为png透明通道vector<int>opts;opts.push_back(IMWRITE_PAM_FORMAT_RGB_ALPHA);imwrite("D:/img_bgra.png", img, opts);//保存为单通道灰度图像img cv::imread(imagePath.toStdString(), IMREAD_GRAYSCALE);vector<int> opts_gray;opts…...

mac 配置.bash_profile不生效问题

1、问题描述 mac系统中配置了环境变量只能在当前终端生效&#xff0c;切换了终端就无效了&#xff0c;查了下问题所在。mac系统会预装一个终极shell - zsh&#xff0c;环境变量读取在 .zshrc 文件下。 2、解决方案 1、切换终端到bash 切换终端到bash chsh -s /bin/bash 切换终端…...

【Cesium for Supermap】S3MTiles图层box裁剪

效果图&#xff1a; 代码&#xff1a; let viewer new Cesium.Viewer(cesiumContainer);// 添加SuperMap iServer发布的S3M缓存服务let promise viewer.scene.addS3MTilesLayerByScp("http://www.supermapol.com/realspace/services/3D-BIMbuilding/rest/realspace/data…...

PAT部分题目相关知识点——python

python中的整除 在Python中&#xff0c;整除&#xff08;也称为地板除&#xff09;可以使用**//**运算符来实现。当使用//运算符时&#xff0c;结果将是一个整数&#xff0c;它表示除法运算的整数部分&#xff0c;舍去任何小数部分。 示例&#xff1a; # 使用整除运算符 // …...

Redis核心数据结构之字典(二)

字典 解决键冲突 当有两个或以上数量的键被分配到了一个哈希表数组的同一个索引上面&#xff0c;我们称这些键发生了冲突(collision)。 Redis的哈希表使用链地址法(separate chaining)来解决键冲突&#xff0c;每个哈希表节点都有一个next指针&#xff0c;多个哈希表节点可以…...

拯救行动(BFS)

公主被恶人抓走&#xff0c;被关押在牢房的某个地方。牢房用 N \times M (N, M \le 200)NM(N,M≤200) 的矩阵来表示。矩阵中的每项可以代表道路&#xff08;&#xff09;、墙壁&#xff08;#&#xff09;、和守卫&#xff08;x&#xff09;。 英勇的骑士&#xff08;r&#xf…...

985硕的4家大厂实习与校招经历专题分享(part2)

我的个人经历&#xff1a; 985硕士24届毕业生&#xff0c;实验室方向:CV深度学习 就业&#xff1a;工程-java后端 关注大模型相关技术发展 校招offer: 阿里巴巴 字节跳动 等10 研究生期间独立发了一篇二区SCI 实习经历:字节 阿里 京东 B站 &#xff08;只看大厂&#xff0c;面试…...

【NR技术】 3GPP支持无人机的关键技术以及场景

1 背景 人们对使用蜂窝连接来支持无人机系统(UAS)的兴趣浓厚&#xff0c;3GPP生态系统为UAS的运行提供了极好的好处。无处不在的覆盖范围、高可靠性和QoS、强大的安全性和无缝移动性是支持UAS指挥和控制功能的关键因素。与此同时&#xff0c;监管机构正在调查安全和性能标准以及…...

【译】WordPress Bricks主题安全漏洞曝光,25,000个安装受影响

WordPress的Bricks主题存在一个严重的安全漏洞&#xff0c;恶意威胁行为者正在积极利用该漏洞在易受攻击的安装上运行任意PHP代码。 该漏洞被跟踪为CVE-2024-25600&#xff08;CVSS评分&#xff1a;9.8&#xff09;&#xff0c;使未经身份验证的攻击者能够实现远程代码执行。它…...

【C++ 23种设计模式】

C 23种设计模式 ■ 创建型模式(5种)■ 工厂模式■ 抽象工厂模式■ 原型模式■ 单例模式■ 第一种&#xff1a;单线程&#xff08;懒汉&#xff09;■ 第二种&#xff1a;多线程&#xff08;互斥量实现锁懒汉&#xff09;■ 第三种&#xff1a;多线程&#xff08;const static饿…...

亚信安慧AntDB:企业数据管理的明日之星

在信息科技飞速发展的时代&#xff0c;亚信科技AntDB团队提出了一项颠覆性的“超融合”理念&#xff0c;旨在满足企业日益增长的复杂混合负载和多样化数据类型的业务需求。这一创新性框架的核心思想在于融合多引擎和多能力&#xff0c;充分发挥分布式数据库引擎的架构优势&…...

Android Gradle开发与应用 (三) : Groovy语法概念与闭包

1. Groovy介绍 Groovy是一种基于Java平台的动态编程语言&#xff0c;与Java是完全兼容&#xff0c;除此之外有很多的语法糖来方便我们开发。Groovy代码能够直接运行在Java虚拟机&#xff08;JVM&#xff09;上&#xff0c;也可以被编译成Java字节码文件。 以下是Groovy的一些…...

Android 14 设置锁屏为NONE后开启双卡PIN锁,重启设备后,输完卡1的PIN码就进入了安卓界面,未提示输入卡2的PIN码

一.问题背景 目前在多个Android14平台发现开启双卡PIN码并且关闭屏幕锁的情况下,第二个PIN码锁输入弹框不能弹出问题,导致第二个卡不能注网。 如下是未修改前重启后解锁卡1PIN码的状态 可以看出卡2不能正常使用 二.何处关闭了卡2的PIN锁? 1.添加日志 首先在KeyguardSecu…...

2024 GoLand激活,分享几个GoLand激活的方案

文章目录 GoLand公司简介我这边使用GoLand的理由GoLand 最新变化GoLand 2023.3 最新变化AI Assistant 正式版GoLand 中的 AI Assistant&#xff1a;_Rename_&#xff08;重命名&#xff09;GoLand 中的 AI Assistant&#xff1a;_Write documentation_&#xff08;编写文档&…...

linux中对信号的认识

信号的概念与相关知识认识 信号是向目标进程发送消息通知的的一种机制。 信号可以以异步的方式发送给进程&#xff0c;也就是说&#xff0c;进程无需主动等待&#xff0c;而是在任何时间都可以接收到信号。 信号的种类 用kill-l命令查看系统定义的信号列表&#xff1a; 前台…...