Apache HBase 2.4.15 集群部署

后知后觉 暂无评论

HBase 是一个开源的、分布式 NoSQL 数据库,基于 Hadoop 的 HDFS,因此适合用于实时计算,拥有很好的计算处理能力。

HBase

区别和联系

Apache Hive 和 HBase 都是数据库,那么有什么区别呢?

下载

部署完毕 ZooKeeper 之后即可部署 HBase,在官网下载稳定版。

wget https://dlcdn.apache.org/hbase/2.4.15/hbase-2.4.15-bin.tar.gz

解压到安装目录

sudo tar xf hbase-2.4.15-bin.tar.gz -C /opt

执行用户授权

sudo chown -R $USER:$USER /opt/hbase-2.4.15/

配置

修改配置文件

cd $HBASE_HOME
vim conf/hbase-env.sh
## 添加一行
export HBASE_MANAGES_ZK=false

修改配置文件 conf/hbase-site.xml<configuration> 标签中删除已有的配置,然后加入以下内容

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
  <property>
    <name>hbase.rootdir</name>
    <value>hdfs://hadoop1:9000/hbase</value>
  </property>
  <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
  </property>
  <property>
    <name>hbase.zookeeper.quorum</name>
    <value>hadoop1,hadoop2,hadoop3</value>
  </property>
  <property>
    <name>hbase.zookeeper.property.dataDir</name>
    <value>/opt/apache-zookeeper-3.7.1-bin/data</value>
  </property>
  <property>
    <name>hbase.wal.provider</name>
    <value>filesystem</value>
  </property>
</configuration>
小贴士:需要注意的是 hbase.zookeeper.property.dataDir 的值需要与 Zookeeper 的 zoo.cfg 中的 dataDir 的值保持一致。

修改配置文件 conf/regionservers

hadoop2
hadoop3

创建配置文件 conf/backup-masters 添加内容

hadoop2

架构

Node NameMasterZookeeperRegionServer
hadoop1yesyesno
hadoop2backupyesyes
hadoop3noyesyes

分发到所有节点

sudo rsync -av /opt/hbase-2.4.15/ root@hadoop2:/opt/hbase-2.4.15
sudo rsync -av /opt/hbase-2.4.15/ root@hadoop3:/opt/hbase-2.4.15

启动集群

在启动集群前需要确认 HDFS 处于非安全模式(OFF)

$ hdfs dfsadmin -safemode get
Safe mode is OFF

将环境变量发送至所有节点

sudo rsync -av /etc/profile.d/hadoop.sh root@hadoop2:/etc/profile.d/
sudo rsync -av /etc/profile.d/hadoop.sh root@hadoop3:/etc/profile.d/

启动集群

cd $HBASE_HOME
bin/start-hbase.sh

然后使用浏览器访问 http://hadoop1:16010 即可看到管理页面

测试集群

使用命令行客户端访问 HBase 数据库(双井号后是实际执行的 hbase 命令,注意甄别)

$ hbase shell
## 创建指定表单
hbase:001:0> create 'test', 'cf'
Created table test
Took 3.2013 seconds
=> Hbase::Table - test
## 列出指定表单
hbase:002:0> list 'test'
TABLE
test
1 row(s)
Took 0.0409 seconds
=> ["test"]
## 查询表单描述
hbase:003:0> describe 'test'
Table test is ENABLED
test
COLUMN FAMILIES DESCRIPTION
{NAME => 'cf', BLOOMFILTER => 'ROW', IN_MEMORY => 'false', VERSIONS => '1', KEEP
_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', COMPRESSION => 'NONE',
 TTL => 'FOREVER', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '6553
6', REPLICATION_SCOPE => '0'}

1 row(s)
Quota is disabled
Took 0.2960 seconds
## 表单插入数据1
hbase:004:0> put 'test', 'row1', 'cf:a', 'value1'
Took 0.2816 seconds
## 表单插入数据2
hbase:005:0> put 'test', 'row2', 'cf:b', 'value2'
Took 0.0205 seconds
## 表单插入数据3
hbase:006:0> put 'test', 'row3', 'cf:c', 'value3'
Took 0.0122 seconds
## 扫描指定表单
hbase:007:0> scan 'test'
ROW                   COLUMN+CELL
 row1                 column=cf:a, timestamp=2022-11-17T15:55:20.979, value=valu
                      e1
 row2                 column=cf:b, timestamp=2022-11-17T15:55:25.597, value=valu
                      e2
 row3                 column=cf:c, timestamp=2022-11-17T15:55:30.198, value=valu
                      e3
3 row(s)
Took 0.1707 seconds
## 单行返回形式查询表单
hbase:008:0> get 'test', 'row1'
COLUMN                CELL
 cf:a                 timestamp=2022-11-17T15:55:20.979, value=value1
1 row(s)
Took 0.0362 seconds
## 停用表单
hbase:009:0> disable 'test'
Took 1.2226 seconds
## 启用表单
hbase:010:0> enable 'test'
Took 0.6940 seconds
## 再次停用表单
hbase:011:0> disable 'test'
Took 0.3489 seconds
## 删除表单
hbase:012:0> drop 'test'
Took 0.7245 seconds

常见问题

a) 在 hbase shell 中执行命令时报错

ERROR: org.apache.hadoop.hbase.ipc.ServerNotRunningYetException: Server is not running yet
    at org.apache.hadoop.hbase.master.HMaster.checkServiceStarted(HMaster.java:2804)
    at org.apache.hadoop.hbase.master.MasterRpcServices.isMasterRunning(MasterRpcServices.java:1163)
    at org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos$MasterService$2.callBlockingMethod(MasterProtos.java)
    at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:387)
    at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:132)
    at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:369)
    at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:349)

这是因为在 hbase-site.xml 里缺少以下配置

  <property>
    <name>hbase.wal.provider</name>
    <value>filesystem</value>
  </property>

b) 执行集群停止命令时长时间无响应

执行 stop-hbase.sh 时一直出现等待符(...),且长时间无响应时,在所有节点分别执行

ll /tmp/hbase-*.pid

可以查看节点运行的 hbase 实例类型,比如 master, regionserver

然后根据实例的类型进行分别关闭

hbase-daemon.sh stop master
hbase-daemon.sh stop regionserver

附录

参考链接

如果遇到问题或者对文章内容存疑,请在下方留言,博主看到后将及时回复,谢谢!
回复 / 查看「历史评论
回答28+31=