第一章.HBase简介
1.HBase定义
- HBase是一种分布式,可扩展,支持海量数据存储的NoSQL数据库
- 逻辑上,HBase的数据模型同关系型数据模型很类似,数据存储在一张表中,有行有列,但从HBase的底层物理存储结构(K-V)来看,HBase更像是一个 multi-dimensional map
2.HBase逻辑结构
![$01[HBase入门] - 图1](/uploads/projects/liuye-6lcqc@gx6gw9/049918e17dc3aec70338dd15f279a674.png)
3.HBase物理存储结构
![$01[HBase入门] - 图2](/uploads/projects/liuye-6lcqc@gx6gw9/899457e9a4cfcdd8e61c4d877c41ae04.png)
4.数据模型
# Name Space- 命名空间,类似于关系型数据库的database概念,每个命名空间下有多个表,HBase有两个自带的命名空间,分别是HBase和default,HBase中存放的是HBase内置的表,default是用户默认使用的命名空间# Table- 类似于关系型数据库的表概念,不同的是,HBase定义表时只需要声明列族即可,不需要声明具体的列,这意味着,往HBase写入数据时,字段可以动态,按需指定,因此,和关系型数据库相比,HBase能够轻松应对字段变更的场景# Row- HBase表中的每行数据都由一个RowKey和多个Column(列)组成,数据是按照Rowkey的字典顺序存储的, 并且查询数据时只能根据RowKey进行检索,所以RowKey的设计十分重要# Column- HBase中的每个列都由Column Family(列族)和Column Qualifier(列限定符)进行限定,例如 info:name,info:age,建表时,只需指明列族,而列限定符无需预先定义# Time Stamp- 用于标识数据的不同版本(version),每条数据写入时,系统会自动为其加上该字段,其值为写入HBase的时间# Cell- 由{rowkey,column Family: column Qualifier,time Stamp}唯一指定的单元,cell中的数据全部由字节码形式存储
5.HBase基本架构
![$01[HBase入门] - 图3](/uploads/projects/liuye-6lcqc@gx6gw9/45200c5abcd4aaf4a8757f207e7c3cfd.png)
# Region Server- Region Server为Region的管理者,其实现类是HRegionServer,主要作用如下:1. 对于数据的操作: get,put,delete2. 对于Region的操作: splitRegion,compactRegion# Master- Master是所有Region Server的管理者,其实现类是HMaster,主要作用如下:1. 对于表的操作: create,delete,alter2. 对于RegionServer的操作: 分配regions到每个RegionServer,监控每个RegionServer的状态,负载均衡和故障转移# Zookeeper- HBase通过Zookeeper来做master的高可用,RegionServer的监控,元数据的入口以及集群配置的维护等操作# HDFS- HDFS为HBase提供最终的底层数据存储服务,同时,为HBase提供高可用的支持
第二章.HBase快速入门
1.HBase安装部署
首先保证Hadoop集群和Zookeeper集群的正常部署及启动
- 解压HBase到指定目录
tar -zxvf hbase-2.0.5-bin-tar-gz -C /opt/module
- 配置环境变量
sudo vim /etc/profile.d/my_env.sh# 添加export HBASE_HOME=/opt/module/hbase-2.0.5export PATH=$PATH:$HBASE_HOME/bin
- 进入/opt/module/hbase-2.0.5/config目录,修改如下三个文件内容
hbase-env.sh 修改内容
export HBASE_MANAGES_ZK=false
hbase-site.xml修改内容
<configuration><property><name>hbase.rootdir</name><value>hdfs://hadoop102:9820/hbase</value></property><property><name>hbase.cluster.distributed</name><value>true</value></property><property><name>hbase.zookeeper.quorum</name><value>hadoop102,hadoop103,hadoop104</value></property></configuration>
regionservers修改内容
hadoop102hadoop103hadoop104
- HBase远程发送到其他集群
xsync /opt/module/hbase-2.0.5
- HBase服务的启动
# 单点启动hbase-daemon.sh start masterhbase-daemon.sh start regionserver# 群起start-hbase.sh# 群停stop-hbase.sh
- 配置高可用
在HBase中HMaster负责监控HRegionServer的生命周期,均衡RegionServer的负载,如果HMaster挂掉了,那么整个HBase集群将陷入不健康的状态,并且此时的工作状态并不会维持太久,所以HBase支持对HMaster的高可用配置
# 关闭HBase集群stop-hbase.sh# 在conf目录下创建backup-masters文件touch backup-mastersecho hadoop103 > backup-masters
- 查看HBase页面
启动成功后,可以通过”host:port”的方式来访问HBase管理页面
![$01[HBase入门] - 图4](/uploads/projects/liuye-6lcqc@gx6gw9/1af6397808bb4a8fff3861799771f89b.png)
2.HBase Shell操作
1.基本操作
# 进入HBase客户端命令hbase shell# 查看帮助命令help
2.namespace的操作
- 查看当前HBase中有哪些namespace
list_namespace
![$01[HBase入门] - 图5](/uploads/projects/liuye-6lcqc@gx6gw9/24eaefd16edf25da8d6e12af2d24396f.png)
- 创建namespace
create_namespace 'haha',{'auth' => 'jcsune','leader'=>'jcsune'}
- 查看namespace
describe_namespace 'haha'
![$01[HBase入门] - 图6](/uploads/projects/liuye-6lcqc@gx6gw9/a654cafb88914a461581cf3e35393088.png)
- 修改namespace信息(添加或修改属性)
alter_namespace 'haha',{METHOD=>'unset',NAME=>'auth'},{METHOD=>'set','leader'='ccsune'}
![$01[HBase入门] - 图7](/uploads/projects/liuye-6lcqc@gx6gw9/f4fd0bc4b102a98cfecbe2c07745da02.png)
- 删除namespace(注意:要删除的namespace必须是空的,其下没有表)
drop_namespace 'haha'
3.表的操作
- 创建表
create 'xixi','info'
- 查看表的结构
desc 'xixi'
![$01[HBase入门] - 图8](/uploads/projects/liuye-6lcqc@gx6gw9/c370132db49d30fd3e0e111228f4aac5.png)
- 变更表信息
alter 'xixi',NAME=>'info',VERSIONS=>5
![$01[HBase入门] - 图9](/uploads/projects/liuye-6lcqc@gx6gw9/314292e506a582db8e2dda2c19522405.png)
- 查看表是否上线(下线)
# 查看是否上线is_enabled 'xixi'# 查看是否下线is_disenabled 'xixi'# 让表下线disable 'xixi'# 让表上线enable 'xixi'
- 插入数据到表
put 'xixi', '1001', 'info:name', 'zhangsan'put 'xixi', '1001', 'info:age', '23'put 'xixi', '1002', 'info:name', 'lisi'put 'xixi', '1003', 'info:name', 'wangwu'
- 查看指定行或指定列族:列的数据
get 'xixi', '1001'get 'xixi', '1001', 'info:name'
![$01[HBase入门] - 图10](/uploads/projects/liuye-6lcqc@gx6gw9/5ea73a077f4fe7a3e2945fb84825589e.png)
- 扫描
scan 'xixi' #扫描全表scan 'xixi',{RAW=>true,VERSION=>2}
![$01[HBase入门] - 图11](/uploads/projects/liuye-6lcqc@gx6gw9/ba2bcc765c90be8f0c83dc4c930dd67d.png)
- 统计表数据行数
count 'xixi'
- 删除数据
delete 'xixi','1001','info:name',1627669834825 #指定删除某一版本单元格deleteall 'xixi','1001','info:name' #删除所有版本单元格
- 清空表数据
truncate 'xixi' #注意:清空表的数据为先disable,然后再truncate
- 删除表
# 首先先让该表为disable状态disable 'xixi'# 然后才能删除这个表drop 'xixi'
