HBase 集群安装部署
Master 节点
- 下载安装包
1
https://archive.apache.org/dist/hbase/2.3.3/
- 解压安装包到指定的规划目录
/opt/software
1
2tar -zxvf hbase-2.3.3-bin.tar.gz -C /opt/servers
配置文件
指定 JDK
1 | vcd /opt/servers/hbase-2.3.3/conf |
修改 hbase-site.xml
vim hbase-site.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17<!--指定hbase是分布式的 PS:如果配置文件中有则修改,没有则添加-->
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<!--指定hbase在HDFS上存储的路径-->
<property>
<name>hbase.rootdir</name>
<value>hdfs://master:9000/hbase</value>
</property>
<!--指定zk的地址,多个用“,”分割-->
<property>
<name>hbase.zookeeper.quorum</name>
<value>master:2181,slave1:2181,slave2:2181</value>
</property>
修改 regionservers 文件
指定 regionserver 节点vim regionservers
删除文件中的所有内容!!!在添加以下内容1
2
3master
slave1
slave2
配置高可用
hbase 的 conf 目录下创建文件 backup-masters (Standby Master)
这样启动的时候会在 master 和 salve1 都启动一个 HMaster 节点1
slave2
分发 HBase
1 | cd /opt/servers |
配置 HBase 环境变量
所有机器都需要配置1
2
3
4
5
6
7
8vim /etc/profile
# HBase
export HBASE_HOME=/opt/servers/hbase-2.3.3
export PATH=$PATH:$HBASE_HOME/bin
# 使配置生效
source /etc/profile
启动 Hbase 集群
- 前提条件:必须先启动 hadoop 和 zookeeper 集群
1
2
3
4
5
6
7# 如果已经启动则忽略
# master 节点 启动 Hadoop
start-dfs.sh
# slave2 节点 启动 YARN
satrt-yarn.sh
# master 节点 启动zk
~/shells/zk.sh start
启动 / 停止 HBase1
2start-hbase.sh
stop-hbase.sh
启动完成后可以通过 http://master:16010 进入 Hbase Web 端
启动 hbase 集群后如果只显示 master 请检查配置和系统时间是否一致
HBase shell 基本操作
1、进入 Hbase 客户端命令操作界面1
hbase shell
2、查看帮助命令1
hbase(main):001:0> help
3、查看当前数据库中有哪些表1
hbase(main):006:0> list
4、创建一张 test 表, 包含 base_info、extra_info 两个列族 \1
2
3
4
5hbase(main):001:0> create 'test', 'base_info', 'extra_info'
或者(Hbase建表必须指定列族信息)
create 'test', {NAME => 'base_info', VERSIONS => '3'},{NAME =>
'extra_info',VERSIONS => '3'}
VERSIONS 是指此单元格内的数据可以保留最近的 3 个版本
5、添加数据操作
向 test 表中插入信息,row key 为 rk1,列族 base_info 中添加 name 列标示符,值为 wang
1
hbase(main):001:0> put 'test', 'rk1', 'base_info:name', 'wang'
向 test 表中插入信息,row key 为 rk1,列族 base_info 中添加 age 列标示符,值为 30
1
hbase(main):001:0> put 'test', 'rk1', 'base_info:age', 30
向 test 表中插入信息,row key 为 rk1,列族 extra_info 中添加 address 列标示符,值为 shanghai
1
hbase(main):001:0> put 'test', 'rk1', 'extra_info:address', 'shanghai'
6、查询数据
6.1 通过 rowkey 进行查询
获取表中 row key 为 rk1 的所有信息
1
2
3
4
5
6
7hbase(main):001:0> get 'test', 'rk1'
6.2 查看rowkey下面的某个列族的信息
- 获取test表中row key为rk1,base_info列族的所有信息
```shell
hbase(main):001:0> get 'test', 'rk1', 'base_info'
6.3 查看 rowkey 指定列族指定字段的值
获取表中 row key 为 rk1,base_info 列族的 name、age 列标示符的信息
1
hbase(main):008:0> get 'test', 'rk1', 'base_info:name', 'base_info:age'
6.4 查看 rowkey 指定多个列族的信息
获取 test 表中 row key 为 rk1,base_info、extra_info 列族的信息
1
2
3
4
5
6
7hbase(main):010:0> get 'test', 'rk1', 'base_info', 'extra_info'
或者
hbase(main):011:0> get 'test', 'rk1', {COLUMN => ['base_info', 'extra_info']}
或者
hbase(main):012:0> get 'test', 'rk1', {COLUMN => ['base_info:name',
'extra_info:address']}
6.5 指定 rowkey 与列值查询
获取表中 row key 为 rk1,cell 的值为 wang 的信息
1
2hbase(main):001:0> get 'test', 'rk1', {FILTER => "ValueFilter(=,
'binary:wang')"}
6.6 指定 rowkey 与列值模糊查询
获取表中 row key 为 rk1,列标示符中含有 a 的信息1
2hbase(main):001:0> get 'test', 'rk1', {FILTER => "
(QualifierFilter(=,'substring:a'))"}
6.7 查询所有数据
查询 test 表中的所有信息1
hbase(main):000:0> scan 'test'
6.8 列族查询
查询表中列族为 base_info 的信息1
2
3
4
5hbase(main):001:0> scan 'test', {COLUMNS => 'base_info'}
hbase(main):002:0> scan 'test', {COLUMNS => 'base_info', RAW => true, VERSIONS
=> 3}
# Scan时可以设置是否开启Raw模式,开启Raw模式会返回包括已添加删除标记但是未实际删除的数据
# VERSIONS指定查询的最大版本数
6.9 指定多个列族与按照数据值模糊查询
查询 test 表中列族为 base_info 和 extra_info 且列标示符中含有 a 字符的信息1
2hbase(main):001:0> scan 'test', {COLUMNS => ['base_info', 'extra_info'], FILTER
=> "(QualifierFilter(=,'substring:a'))"}
6.10 rowkey 的范围值查询(非常重要)
- 查询 test 表中列族为 base_info,rk 范围是 [rk1, rk3) 的数据(rowkey 底层存储是字典序)
- 按 rowkey 顺序存储。
1 | hbase(main):001:0> scan 'test', {COLUMNS => 'base_info', STARTROW => 'rk1', |
6.11 指定 rowkey 模糊查询
查询 test 表中 row key 以 rk 字符开头的1
hbase(main):001:0> scan 'test',{FILTER=>"PrefixFilter('rk')"}
7、更新数据
更新操作同插入操作一模一样,只不过有数据就更新,没数据就添加
7.1 更新数据值
把 test 表中 rowkey 为 rk1 的 base_info 列族下的列 name 修改为 liang1
hbase(main):030:0> put 'test', 'rk1', 'base_info:name', 'liang'
8、删除数据和表
8.1 指定 rowkey 以及列名进行删除
删除 test 表 row key 为 rk1,列标示符为 base_info:name 的数据1
hbase(main):002:0> delete 'test', 'rk1', 'base_info:name'
8.2 指定 rowkey,列名以及时间戳信息进行删除
删除 test 表 row key 为 rk1,列标示符为 base_info:name 的数据1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21scan 'test', {COLUMNS => 'base_info', RAW => true, VERSIONS => 3}
ROW COLUMN+CELL
rk1 column=base_info:name, timestamp=1600660633870,
value=zhao
rk1 column=base_info:name, timestamp=1600660627447,
value=li
rk1 column=base_info:name, timestamp=1600660619655,
value=wang
hbase(main):033:0> delete 'test', 'rk1', 'base_info:name',1600660619655
hbase(main):023:0> scan 'test', {COLUMNS => 'base_info', RAW => true, VERSIONS
=> 3}
ROW COLUMN+CELL
rk1 column=base_info:name, timestamp=1600660633870,
value=zhao
rk1 column=base_info:name, timestamp=1600660627447,
value=li
rk1 column=base_info:name, timestamp=1600660619655,
type=Delete
rk1 column=base_info:name, timestamp=1600660619655,
value=wang
1 row(s) in 0.0070 seconds
8.3 删除列族
删除 base_info 列族1
2hbase(main):001:0>
hbase(main):035:0> alter 'test', 'delete' => 'base_info'
8.4 清空表数据1
hbase(main):001:0> truncate 'test'
8.5 删除表1
2
3
4
5先disable 再drop
hbase(main):036:0> disable 'test'
hbase(main):037:0> drop 'test'
如果不进行disable,直接drop会报错
ERROR: Table user is enabled. Disable it first.