Loading

HBase集群安装部署

Master节点

  1. 下载安装包
https://archive.apache.org/dist/hbase/2.3.3/
  1. 解压安装包到指定的规划目录 /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

image

启动完成后可以通过 http://master:16010 进入Hbase Web端

启动hbase集群后如果只显示master 请检查配置和系统时间是否一致

image-20220726144404329

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.
posted @ 2021-11-22 21:39  白日醒梦  阅读(195)  评论(0编辑  收藏  举报