一)、
1.namespace //相当于databases
namespace databases
-》tables 》tables
默认情况下有两个命令空间
》default
默认不指定命令空间的表都放在此命令空间下
》hbase
meta //存放元数据
namespace //存放命令空间
2.hbase 使用help
//查看命令的信息
hbase(main):007:0> help
//查看指定命令的用法 help “COMMANDS”
hbase(main):007:0> help "list_namespace"
eg:
hbase> list_namespace
hbase> list_namespace 'abc.*'
3.创建命名空间
hbase> create_namespace 'ns1'
方式一(简写方式)
create 'ns1:t1','cf1'
方式二 //相互等同
create 'ns1:t2' ,{NAME => 'F1'}
//查看某个命令空间下的表
list_namespace_tables 'hbase'
TABLE meta
4.SPLITS //指定预分区
创建表时,多创建一些region(根据表的数据RowKey,结合业务)
region划分于rowkey,
1)创建表时指定预分区
create 'ns1:jindong','info',SPLITS => ['201606010900', '201609010900', '201612010900']
结合Web界面理解
2)创建表时通过文本指定预分区 类似于 hive -f
create 'ns1:taobao','info',SPLITS_FILE => '/home/user01/splits.txt'
3) create 't1', 'f1', {NUMREGIONS => 15, SPLITALGO => 'HexStringSplit'}
5 RowKey的设计
1)rowkey是唯一的,不能重复
2)rowkey的长度不超过10-100个字节,实际生产环境中不建议超过8-16个字节
3)符合业务需求,而且尽量满足更多的业务(这个是重点,可以将一行信息中多个字段合并成一个ROWKEWY,后面查询主要通过ROWkey,可以进行一定的过滤和切割)
4).避免数据热点【散列原则】
##解决方案一:【散列原则】
生成一个在一定范围内的随机rowkey
##解决方案二:字符串反转
手机号
反转之前反转之后
134....0 0
151....1 1
171....5 2
188....7 9
切分rowkey( 3 5 7 8) 切分rowkey( 0~9)
6.创建带有多个版本号的表(可以有效的控制过期数据内存占有率)
create 'ns1:t2', {NAME => 'cf1', VERSIONS => 5}
put 'ns1:t2','rk01','cf1:name','zhaoliyin'
get 'ns1:t2','rk01',{COLUMN => 'cf1:name', VERSIONS => 5}
COLUMN CELL
cf1:name timestamp=1483604304280, value=gaoyuanyuan
cf1:name timestamp=1483604271409, value=yangmi
cf1:name timestamp=1483604304280, value=zhaoli
cf1:name timestamp=1483604235269, value=zhaoliyin
scan 'ns1:t2',{VERSIONS => 2}
scan 'ns1:t2',{TIMERANGE => [1483604304280,1483604235269]}
7.修改失效时间
默认:TTL => 'FOREVER' 修改后:TTL => '20 SECONDS '
alter 'ns1:t2',{NAME => 'cf1',TTL => '20'}
8.修改列簇版本号
alter 'ns1:t2',{NAME => 'course',VERSIONS => '1'}
9.增加或删除表的列簇
增加一个列簇
alter 'ns1:t2',NAME => 'info',VERSION => '1'
删除一个列簇
alter 'ns1:t2',NAME => 'info', METHOD => 'delete' 或者 alter 'ns1:t2','delete' => 'info'
10.通过指定列族的IN_MEMORY=true属性,来让该列族的数据缓存在内存中,以提高查询性能。一些保存元数据的小表可以使用该属性来提升性能。
a.创建table的时候可以指定列族的属性
create 'test',{NAME => 'info',IN_MEMORY => true}
b.alter修改
alter 'ns1:t2',{NAME => 'course',IN_MEMORY => 'true'}
.在shell环境中导java包
eg:查看命令空间的创建时间
scan 'hbase:namespace'
ROW COLUMN+CELL
default column=info:d, timestamp=1498708235968, value=\x
0A\x07default
hbase column=info:d, timestamp=1498708236009, value=\x
0A\x05hbase
nsa column=info:d, timestamp=1498724729409, value=\x
0A\x03nsa
import java.util.Date
Date.new(1498724729409).toString()
11.MIN_VERSIONS
TTL设定之后 MIN_VERSIONS=>'0' 这样设置之后,TTL时间戳过期后,将全部彻底删除该family 下所有的数据,如果MIN_VERSIONS 不等于0 那将保留最新
的MIN_VERSIONS个版本的数据,其它的全部删除,比如MIN_VERSIONS=>'1' 届时将保留一个最新版本的数据,其它版本的数据将不再保存。