HBase集群安装部署
Master节点
- 下载安装包
https://archive.apache.org/dist/hbase/2.3.3/
- 解压安装包到指定的规划目录
/opt/software
tar -zxvf hbase-2.3.3-bin.tar.gz -C /opt/servers
配置文件
指定 JDK
vcd /opt/servers/hbase-2.3.3/conf
vim hbase-env.sh
# 修改以下配置
export JAVA_HOME=/usr/java/jdk1.8.0_202
# 不使用自带的zk
export HBASE_MANAGES_ZK=false
修改hbase-site.xml
vim hbase-site.xml
<!--指定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
删除文件中的所有内容!!!在添加以下内容
master
slave1
slave2
配置高可用
hbase 的 conf 目录下创建文件backup-masters(Standby Master)
这样启动的时候会在 master和salve1都启动一个HMaster 节点
slave2
分发 HBase
cd /opt/servers
rsync-script hbase-2.3.3
配置 HBase 环境变量
所有机器都需要配置
vim /etc/profile
# HBase
export HBASE_HOME=/opt/servers/hbase-2.3.3
export PATH=$PATH:$HBASE_HOME/bin
# 使配置生效
source /etc/profile
启动 Hbase 集群
- 前提条件:必须先启动hadoop和zookeeper集群
# 如果已经启动则忽略
# master 节点 启动 Hadoop
start-dfs.sh
# slave2 节点 启动 YARN
satrt-yarn.sh
# master 节点 启动zk
~/shells/zk.sh start
启动 / 停止 HBase
start-hbase.sh
stop-hbase.sh
启动完成后可以通过 http://master:16010 进入Hbase Web端
启动hbase集群后如果只显示master 请检查配置和系统时间是否一致
HBase shell 基本操作
1、进入Hbase客户端命令操作界面
hbase shell
2、查看帮助命令
hbase(main):001:0> help
3、查看当前数据库中有哪些表
hbase(main):006:0> list
4、创建一张test表, 包含base_info、extra_info两个列族\
hbase(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
hbase(main):001:0> put 'test', 'rk1', 'base_info:name', 'wang'
-
向test表中插入信息,row key为rk1,列族base_info中添加age列标示符,值为30
hbase(main):001:0> put 'test', 'rk1', 'base_info:age', 30
-
向test表中插入信息,row key为rk1,列族extra_info中添加address列标示符,值为shanghai
hbase(main):001:0> put 'test', 'rk1', 'extra_info:address', 'shanghai'
6、查询数据
6.1 通过rowkey进行查询
-
获取表中row key为rk1的所有信息
hbase(main):001:0> get 'test', 'rk1'
6.2 查看rowkey下面的某个列族的信息
- 获取test表中row key为rk1,base_info列族的所有信息
hbase(main):001:0> get 'test', 'rk1', 'base_info'
6.3 查看rowkey指定列族指定字段的值
-
获取表中row key为rk1,base_info列族的name、age列标示符的信息
hbase(main):008:0> get 'test', 'rk1', 'base_info:name', 'base_info:age'
6.4 查看rowkey指定多个列族的信息
-
获取test表中row key为rk1,base_info、extra_info列族的信息
hbase(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的信息
hbase(main):001:0> get 'test', 'rk1', {FILTER => "ValueFilter(=, 'binary:wang')"}
6.6 指定rowkey与列值模糊查询
获取表中row key为rk1,列标示符中含有a的信息
hbase(main):001:0> get 'test', 'rk1', {FILTER => "
(QualifierFilter(=,'substring:a'))"}
6.7 查询所有数据
查询test表中的所有信息
hbase(main):000:0> scan 'test'
6.8 列族查询
查询表中列族为 base_info 的信息
hbase(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字符的信息
hbase(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顺序存储。
hbase(main):001:0> scan 'test', {COLUMNS => 'base_info', STARTROW => 'rk1',
ENDROW => 'rk3'}
6.11 指定rowkey模糊查询
查询test表中row key以rk字符开头的
hbase(main):001:0> scan 'test',{FILTER=>"PrefixFilter('rk')"}
7、更新数据
更新操作同插入操作一模一样,只不过有数据就更新,没数据就添加
7.1 更新数据值
把test表中rowkey为rk1的base_info列族下的列name修改为liang
hbase(main):030:0> put 'test', 'rk1', 'base_info:name', 'liang'
8、删除数据和表
8.1 指定rowkey以及列名进行删除
删除test表row key为rk1,列标示符为 base_info:name 的数据
hbase(main):002:0> delete 'test', 'rk1', 'base_info:name'
8.2 指定rowkey,列名以及时间戳信息进行删除
删除test表row key为rk1,列标示符为base_info:name的数据
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,
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 列族
hbase(main):001:0>
hbase(main):035:0> alter 'test', 'delete' => 'base_info'
8.4 清空表数据
hbase(main):001:0> truncate 'test'
8.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.