一、熟悉概念
1、行键:rowkey,行健没有数据类型,总是视为字节数组 byte[].
2、 列族:column family:行里的数据按照列族分组,列族也影响到 hbase 数据的物理存放。因此,它们必须事前定义并且不轻易修改。表中每行拥有相同列族,尽管行不需要在每个列族里存储数据。列族名字是字符串,由可以在文件系统路径里使用的字符组成。
3、列限定符(column qualifier):列族里的数据通过列限定符或列来定位。列限定符不必事前定义。列限定符不必在不同行之间保持一致,就像行健一样,列限定符没有数据类型,总是视为字节数组 byte[].
4、单元(cell)-------行健,列族和列限定符一起确定一个单元。存储在单元里的数据称为单元值(value),值也没有数据类型,总是视为字节数组 byte[].
5、时间版本(version)--------单元值有时间版本,时间版本用时间戳标识,是一个 long。没有指定时间版本时,当前时间戳作为操作的基本。hbase 保留单元值时间版本的数量基于列族进行配置。
6、hbase 在表里存储数据使用的是四维坐标系统:依次是:行健,列族,列限定符和时间版本。 hbase 按照时间戳降序排列各时间版本,其他映射建按照升序排序。
7、hbase 把数据存放在一个提供单一命名空间的分布式文件系统上。一张表由多个小一点的 region 组成,托管region 的服务器叫做 regionserver.单个 region 大小由配置参数 hbase.hregion.max.filesize 决定,当一个 region大小变得大于该值时,会切分成 2 个 region.
注意:定义表的时候只需要指定 column family 的名字,列名在 put 的时候动态指定。
二、 构建HBASE本地运行环境
1、启动HBASE

2、打开shell命令行模式(用户可以通过输入shell命令操作HBASE数据库
hbase shell

3、退出HBase数据库表操作
exit
3、停止HBASE运行
三、HBASE数据的物理存储(以下均在shell命令行中执行)
1、查看服务器状态
status

2、获取帮助
help ‘status’

3、查看版本信息
version

4、建立一个有 3 个 column family 的表(HBASE 中的表是按 column family 来存储的)
create 't1', {NAME => 'f1', VERSIONS => 1}, {NAME => 'f2', VERSIONS => 1}, {NAME => 'f3', VERSIONS => 1}
创建了一个名为“t1”的表,定义表的时候只需要指定 column family 的名字,列名在 put 的时候动态指定。
5、向表“t1”中插入没有指定column的名字
put ‘t1’, ‘r1’, ‘f1’, ‘v1’
put ‘t1’, ‘r2’, ‘f2’, ‘v2’

6、插入指定 column 的名字
put ‘t1’, ‘r4’, ‘f1:c1’, ‘v1’
put ‘t1’, ‘r5’, ‘f2:c2’, ‘v2’
7、扫描表“t1”
scan ‘t1’

四、时间戳
hbase shell 中 timestamp 转为可读格式
import java.util.Date
Date.new(1601956364800).toString()
五、基本表操作
1、查看所有表
list
2、创建表:create ‘表名称’, ‘列族名称 1’,‘列族名称 2’,‘列名称 N’
create ‘s’,‘pc’,‘ph’3、查看表格式:describe(desc)
(可以看到这个表的所有默认参数)
describe ‘s’
或
desc ‘sr’
4、添加数据:
语法:

给 s 表的添加一行记录:rowkey 是 li_2020101021723_51001_1,family name:pc,column name:v,value:o,timestamp:系统默认
put ‘s’,‘li_2020101021723_51001_1’,‘pc:v’,‘1001’注意:一次只能 put 一个 column
5、查询数据
(1)查询某行记录

get ‘s’,‘li_2020101021723_51001_1’,‘pc:v’
或
get ‘s’,‘li_20201010217235_51001_1’,{COLUMN=>‘pc:v’,VERSIONS=>2}
(2)扫描表

scan ‘t1’,{LIMIT=>3} //扫描表 t1 的前 3 条数据
(3)、查询表中的数据行数

INTERVAL 设置多少行显示一次及对应的 rowkey,默认 1000;CACHE 每次去取的缓存区大小,默认是 10,调整该参数可提高查询速度
count ‘s’, {INTERVAL => 1, CACHE => 500} //查询表’s’中的行数,每 100 条显示一次,缓存区为 500
6、修改表结构:修改表结构以前必须先 disable,再修改

//修改表 s 的 pc 的 VERSIONS 为 3
disable ‘s’
alter ‘s’,{NAME=>‘pc’,VERSIONS=>3}
7、删除表数据和表
(1)删除行中的某个列值

delete 's,‘li_2020101021723_51001_1’,‘pc:v’ //删除表 s中的 pc:v 的数据注:将删除该行 pc:v 列当前版本的数据,
(2)删除所有单元格数据

// 删除表 s,li_2020101021723_51001_1 的数据
deleteall ‘s’,‘li_2020101021723_51001_1’
或
deleteall ‘s’,‘li_2020101021723_51001_1’,‘pc:v’(3)删除表中的所有数据
语法: truncate table名
其具体过程是:disable table -> drop table
truncate ‘s’ //删除表 s的所有数据
(4)删除表
分两步:首先 disable,然后 drop
//删除表 t1
disable ‘t1’
drop 't1
















