定义
分布式,可扩展,支持海量数据存储的 NoSQL(非关系型)数据库
数据存储在 hadoop上,依赖 zookeeper和 hadoop
逻辑关系
表->Region-> store ->列族 -> 列
store -> RowKey
名词
Name Space 命名空间
类似于数据库中“库”的存在,每个命名空间下可以有多个表
Table 表
HBase 在定义表时只需要声明列族,不需要声明具体的列,灵活性相对关系型数据库更高
Row 行
HBase 中表的每行数据由一个 RowKey 和多个列组成,数据按照 RowKey 的字典顺序(序号1和2之间会存在序号11)存储,查询时只能按照 RowKey 进行检索
Column 列
列由列族(Column Family)和列限定符(Column Qualifier)(大列名:小列名)进行限定,如 班级:一班 创建表时需要指明列族(大列名)不需要明确列限定符(小列名)
Time Stamp
时间戳 每条数据写入时都会被加上,用于区分数据的新旧,相当于数据的身份证
物理关系
每一行的 rowkey 列 时间戳 数据 组成了 StoreFile
StoreFile 组成了 store
store 组成了 Region
Region 由 RegionServer 管理
RegionServer 由 Master 管理
通过 Zookeeper 实现 Master 的备胎等功能
名词
region server
是 region 的管理员 实现类为 HRegionServer
对数据可以 get(得到) put (增加或者修改) delete (删除)
对 region 可以 splitRegion 切割 compactRegion 合并
Master
是所有 region server的管理员,实现类为HMaster
对表可以 create 创建 delete 删除 alter 修改
对 region server 分配 regions 过去并监控region server的状态,实现负载均衡和故障转移
Zookeeper
HBase 通过他实现 master的高可用(备份) region server的监控 元数据入口 集群配置维护 等
HDFS
为HBase提供底层数据存储,同时提供高容错的支持
安装
启动 zookeeper集群 启动 hadoop集群
解压到 module 目录下
tar -zxvf hbase-2.0.5-bin.tar.gz -C /opt/module
配置环境变量
sudo vim /etc/profile.d/my_env.sh
添加
#HBASE_HOME
export HBASE_HOME=/opt/module/hbase
export PATH=PATH:PATH:PATH:HBASE_HOME/bin
修改配置文件 进入安装路径 conf 目录
1.修改 hbase-env.sh内容:(位于末尾位置125行,true改为false并取消注释)
export HBASE_MANAGES_ZK=false
2.修改 hbase-site.xml修改内容:(文末位置已有 configuration构造框,注意不要重复,只复制属性 property 即可)
第一个是指明 hbase的目录在hadfs的位置
第二个是明确 hbase是否是集群的分布式的
第三个是指明 zookeeper集群所在的服务器
hbase.rootdir
hdfs://hadoop102:8020/hbase
<property>
<name>hbase.cluster.distributed</name>
<value>true</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>hadoop102,hadoop103,hadoop104</value>
</property>
</configuration>
3.修改 regionservers:(填入集群的服务器名称)
hadoop102
hadoop103
hadoop104
4.在 conf 目录下创建 backup-masters 并 添加启动 master 备份的服务器名称
vim backup-masters
Hadoop103
5.使用脚本分发 Hbase 目录和环境配置文件
xsync /opt/module/hbase的目录名称
xsync /etc/profile.d/my_env.sh
6.启动 Hbase
start-hbase.sh
7.在网页界面查看 HBase
http://hadoop102:16010
8.进入客户端
hbase shell
9.退出客户端
exit 或者 ctrl+c
10.关闭 HBase
stop-hbase.sh
客户端的基本操作(HBase严格度很高,必须准确使用大小写,单双引号以及特殊字符)
help 帮助 可以查看有哪些可以使用的命令
help “命令符” 可以查看该命令符的书写规范
list_namespace 查看所有命名空间
创建命名空间
create_namespace ‘需要创建的空间名称’
create_namespace ‘需要创建的空间名称’,{‘空间的某种属性’=>‘该属性的值’}
第二种没有实际用途,不常用
''单引号注释的东西是需要根据实际用途修改的,自己决定的
没有引号的大写单词是固定格式,不可改动
查看命名空间详情
describe_namespace ‘想要查看的空间名’
通过这种方式可以查看到空间的某些属性
添加或修改空间的属性
alter_namespace ‘想要修改的空间名称’,{METHOD => ‘set’,‘添加的属性名称’ => ‘添加的属性值’}
alter_namespace ‘想要修改的空间名称’,{METHOD => ‘set’,‘想修改属性名称’ => ‘修改的属性值’}
删除空间的属性
alter_namespace ‘想要修改的空间名称’,{METHOD => ‘unset’,NAME => ‘要删除的属性名称’}
删除空间
drop_namespace ‘要删除的空间名称’
创建表
标准点 create '空间名:表名',{NAME => '列族名1' ,VERSIONS => 想要保留的版本数1},{NAME => '列族名2' ,VERSIONS => 想要保留的版本数2}
简略版 create '表名','列族名'
简略版的空间为默认空间 版本数量默认为1
标准版创建的
查看表
list 查看所有表
describe '要查看的表名' 可以查看该表的所有信息
修改或增加表的列族及版本数
alter'表名',NAME => '列族名', VERSIONS => 维护的版本数
删除表的列族
alter'表名',NAME => '列族名',METHOD => 'delete'
删除表
先将表标记为不可用的
disable '表名'
再执行删除命令
drop '表名'
向表中添加数据 写入
put '表名','rowkey的值','列族名:列名','添加的值'
读取数据
get '表名','rowkey的值' 读取整行的数据
get '表名','rowkey的值',{COLUMN => '列名'} 读取某行某列(一格)的值
每次读取只取时间戳最新的版本的值
get '表名','rowkey的值',{COLUMN => '列名',VERSIONS => 4} 读取某行某列(一格)的最新四个版本的值
注意超出此列族维护的版本数是读不出来的
清空表
truncate '表名'
删除数据
delete '表名','rowkey值','列族名:列名',时间戳
如果不写时间戳默认删除最新的时间戳版本,一次删除一个版本
deleteall '表名','rowkey值','列族名:列名' 删除所有版本
扫描表
scan '表名' 扫描整张表 ,实际开发由于数据量大 不能使用
scan '表名' ,{STARTROW => 'rowkey值',STOPROW => 'rowkey值'}
通过rowkey值进行筛选扫描,但会收到rowkey字典排序的影响
左 【 右 )含开始的左不含结束右 的值
Region Server 详细架构
Store File
保存实际的物理文件,StoreFile以 Hfile 的形式 有序 保存在HDFS上,每个Store有一个或多个StoreFile(Hfile)
Memstore
写缓存,数据在 Memstore 中排好序,达到刷写条件时再刷写到 Hfile ,每次刷写都是一个新的 Hfile
WAL Write-Ahead logfile
数据在写入Memstore前先写入WAL,防止缓存中的数据丢失问题
BlockCache
读缓存 查询出的数据存在这里方便下次读取
WAL=>Memstore=>SroreFile=>HDFS