1.创建表
create 'test','cf1','cf2'
备注:1.test表示表名;2.cf1和cf2表示列簇名,根据实际情况增加
2.查看有哪些表
list
备注:类似mysql的show tables;
3.查看表结构
describe 'test'
备注:类似mysql的desc
4.添加数据
给test表的cf1:name列插入数据
put 'test','rowkey_001','cf1:name','zhangsan'
给test表的cf1:address列插入数据
put 'test','rowkey_001','cf1:address','beijing'
给test表的cf2:name列插入数据
put 'test','rowkey_002','cf2:name','lisi'
给test表的cf2:address列插入数据
put 'test','rowkey_002','cf2:address','xian'
备注:
1.rowkey_001和rowkey_002表示rowkey,必须保证唯一,插入数据时指定,建议不同列簇的数据使用不同rowkey;
5.查询数据
a.全表扫描
scan 'test'
b.根据条件进行查询
scan 'test',{COLUMNS => [cf1,cf2],LIMIT => 10,STARTROW => 'rowkey_002'}
备注:1.COLUMNS表示要扫描的列簇;2.LIMIT表示显示前10个rowkey对应的数据;3.STARTROW表示起始rowkey位置
c.根据rowkey查看对应的数据
get 'test','rowkey_001'
6.创建表指定预分区
说明:1.默认创建表为快速建表,创建完成后只有一个region,随着数量增大会自动分裂成多个region,但是前期数据写入和读取性能较低;2.强烈建议建表时预分区,这样在初期数据的写入速度会高很多。
方法一:直接指定(适合分区较少时使用)
create 'test','cf',SPLITS => ['10','20','30','40','50']
方法二:读取文件方式
create 'test',{NAME => 'cf',COMPRESSION => 'SNAPPY',DATA_BLOCK_ENCODING => 'FAST_DIFF',BLOCKSIZE => '32768',MOB_THRESHOLD => '102400',IS_MOB => 'true'},{SPLITS_FILE => '/opt/region.txt'}
或
create 'test',{NAME => 'cf',TTL => 'forever'},SPLITS => '/opt/region.txt'
备注:
1.NAME表示列簇名;
2.COMPRESSION表示压缩格式;
3.IS_MOB是MOB表的开关,如果要创建MOB,就设置为true,否则为false;
4.SPLITS_FLIE表示预先分区(建议进行预分区,避免热点问题,查询性能较高),region.txt表示提前准备好的rowkey分区文本。
类似(region.txt中每个rowkey名只能占一行):
rowkey001
rowkey002
方法三:代码实现
创建一个预分region的表
byte[][] splits = new byte[4][];
splits[0] = Bytes.toBytes("A");
splits[1] = Bytes.toBytes("H");
splits[2] = Bytes.toBytes("O");
splits[3] = Bytes.toBytes("U");
admin.createTable(htd,splits);
7.清空表数据
truncate_preserve 'test'
8.刷新表数据(将表中数据刷入磁盘)
flush 'test'
9.删除表
disable 'test'
drop 'test'
10.导入导出表数据
- 导入
hbase org.appche.hadoop.hbase.mapreduce.import <tablename> <outdir>
或
hbase org.appche.hadoop.hbase.mapreduce.Driver import <tablename> <outdir>
- 导出
hbase org.appche.hadoop.hbase.mapreduce.export <tablename> <outdir>
或
hbase org.appche.hadoop.hbase.mapreduce.Driver export <tablename> <outdir>