HBase是一个开源的分布式NoSQL数据库,它是Apache Hadoop项目的一部分,使用Hadoop的HDFS作为底层存储。
命名空间,类似于关系型数据库中的database概念,每个命名空间下有多个表。HBase有两个自带的命名空间,分别是:hbase和default,hbase中存放的是HBase内置表,default表是用户默认使用的命名空间。
表格,HBase中的数据以表格的形式组织,每个表格由多行和多列组成,其中每行数据都有唯一的行键(Row Key)。
行键,是HBase表格中每行数据的唯一标识符,行键是一个字节数组,长度不限制。
列族,是一组有相关性的列的集合,它们共享相同的前缀,并被存储在相同的物理位置上。在创建表格时必须指定列族,并为每个列族指定一个唯一的名称,通常以字符串形式表示。
列限定符,是列族中每个列的唯一标识符,它们共享相同的列族前缀,以字节数组的形式存储。
单元格,是表格中的最小数据单元,它由行键、列族、列限定符和时间戳四个维度组成,时间戳制定了单元格数据的版本信息。
版本,每个单元格可以存储多个版本的数据,每个版本都有一个时间戳,HBase默认按照时间戳降序排列版本,最新版本在最前面。
块,HBase中的数据存储都是按照块进行的,每个块包含多个行,每个块的大小由HBase的配置参数决定。
HFile块的大小默认值为:64MB。可以通过HBase配置文件中的“hbase.regionserver.hstore.blockingStoreFiles”参数进行配置,该参数的值表示每个存储区域中允许的最大HFile块数量。
还可通过Hadoop配置文件中的“hdfs.blocksize”参数来进行调整HFile块大小。
关于Table、Cloumn Family、Cloumn Qualifier、Row Key在表中结构如图:
# 进入HBase客户端
hbase shell
# 查看帮助命令
help
# 查看命令如何使用
help '具体命名'
# 查看所有的命名空间
list_namespace
# 查看xsqone下的表
list_namespace_tables 'xsqone'
# 创建命名空间xsqone
create_namespace 'xsqone'
# 删除命名空间xsqone
drop_namespace 'xsqone'
# 在xsqone创建表student,列族为'studentInfo','schoolInfo'
create 'xsqone:student','studentInfo','schoolInfo'
# 查看表详情
desc/describe 'xsqone:student'
# 禁用student表
disable 'xsqone:student'
# 启用student表
enable 'xsqone:student'
# 查看student表是否禁用或启用
is_enabled 'xsqone:student' (true为启用,false为禁用)
is_disabled 'xsqone:student' (true为禁用,false为启用)
# 删除student表(前提需先禁用)
disable 'xsqone:student'
drop 'xsqone:student'
# 新增列族familyInfo
alter 'xsqone:student','familyInfo'
# 删除列族familyInfo
alter 'xsqone:student',{NAME=>'familyInfo',METHOD=>'delete'}
# 更改schoolInfo列族存储限制
alter 'xsqone:student',{NAME=>'schoolInfo',VERSIONS=>3}
# 写入数据
put 'xsqone:student','row1','studentInfo:name','zs'
put 'xsqone:student','row1','studentInfo:age','18'
put 'xsqone:student','row1','schoolInfo:name','qh'
put 'xsqone:student','row1','schoolInfo:address','bj'
# 修改数据也是使用put,是进行覆盖
# 修改schoolInfo:name
put 'xsqone:student','row1','schoolInfo:name','bd'
# 读取数据,可以使用get和scan两种方式来读取
# get一条数据
get 'xsqone:student','row1'
# get具体列
get 'xsqone:student','row1',{COLUMN=>'studentInfo:name'}
# scanscan 是扫描数据,能够读取多行数据,不建议扫描过多的数据,推荐使用 startRow 和stopRow 来控制读取的数据,默认范围左闭右开
scan 'xsqone:student',{COLUMNS=>'studentInfo:name',STARTROW=>'rowkey2',STOPROW=>'rowkey4'}
# 扫描value为q的行列(模糊查询)
scan 'bigdata:student',FILTER=>"ValueFilter(=,'substring:q')"
# 扫描value为bj的行列
scan 'bigdata:student',FILTER=>"ValueFilter(=,'binary:bj')"
# ColumnPrefixFilter(列前缀过滤器)列以birth开头的
scan 'bigdata:student',FILTER=>"ColumnPrefixFilter('add')"
# 删除数据
# delete表示删除一个版本的数据,即为 1 个 cell,不填写版本默认删除最新的一个版本
delete 'xsqone:student','row1','schoolInfo:name'
# deleteall 表示删除所有版本的数据,即为当前行当前列的多个 cell
deleteall 'xsqone:student','row1','schoolInfo:name'
上一篇:机器学习笔记:正则化
下一篇:RESTful API 概述