第一大题:namespace的shell操作
1、创建一个命名空间myns,同时设置属性author为自己,time为2020-05-11
create_namespace 'myns',{'author' => '自己','time' => '2020-05-11'}
2、为myns添加一个属性company为qianfeng
alter_namespace 'myns',{METHOD => 'set', 'company' => 'qianfeng'}
3、列出所有的命名空间
list_namespace
4、列出hbase命令空间下的所有的表
list_namespace_tables 'hbase'
5、查看myns命名空间的属性信息
describe_namespace 'myns'
6、能直接删除hbase命令空间吗?为什么?
不能,
因为如果要删除一个命名空间,需要保证这个命名空间是一个空的,而hbase命名空间下有两张表存在:meta 和 namespace
因此不是一个空的namespace,也就不能直接删除。
第二大题:table的ddl操作(shell练习)
1、写一个建表语句,表名student, 列族base_info的版本数为3个, 列族score的版本数为5个,列族address版本数为5个同时存活时间为7天
create 'myns:student', {NAME => 'base_info', VERSIONS => 3},{NAME => 'score',VERSIONS => 5},{NAME => 'address', VERSIONS => 5, TTL => 604800}
2、查看student表的列族的信息
describe 'myns:student'
3、修改base_info列族的BLOOMFILTER属性为rowcol,存活时间为7天
alter 'myns:student', {NAME => 'base_info', BLOOMFILTER => 'rowcol', TTL => 604800}
4、list和list_namespace_table的区别
1. list 会列出除了hbase命名空间下的系统表,list_namespace_table 只会列出指定命名空间下的表。
2. list 不会列出系统表,list_namespace_table可以列出系统表
5、为表student追加两个列族 f1,f2
alter 'myns:student','f1','f2'
6、删除列族f1和f2
alter 'myns:student',{NAME => 'f1', METHOD => 'delete'},{NAME => 'f2',METHOD => 'delete'}
或者
alter 'myns:student','delete' => 'f1'
alter 'myns:student','delete' => 'f2'
7、怎么删除hbase中的一张表
1. 先禁用表
disbale 'myns:stu'
2. 删除表
drop 'myns:stu'
第三大题:table的crud操作(shell练习)
1、将一下数据添加到student表(请放到相应的列族中)
sid name age gender math chinese english provinces city street
201901010001 zhaoyun 23 m 90 89 100 hlj harbin pudonglu
201901010002 zhangfei 24 f 80 78 90 hebei shijiazhuang tianyulu
201901010003 guanyu jilin
put 'myns:student','201901010001','base_info:name','zhaoyun'
put 'myns:student','201901010001','base_info:age',23
put 'myns:student','201901010001','base_info:gender','m'
put 'myns:student','201901010001','score:math',90
put 'myns:student','201901010001','score:chinese',89
put 'myns:student','201901010001','score:english',100
put 'myns:student','201901010001','address:provinces','hlj'
put 'myns:student','201901010001','address:city','harbin'
put 'myns:student','201901010001','address:street','pudonglu'
put 'myns:student','201901010002','base_info:name','zhangfei'
put 'myns:student','201901010002','base_info:age',24
put 'myns:student','201901010002','base_info:gender','f'
put 'myns:student','201901010002','score:math',80
put 'myns:student','201901010002','score:chinese',78
put 'myns:student','201901010002','score:english',90
put 'myns:student','201901010002','address:provinces','hebei'
put 'myns:student','201901010002','address:city','shijiazhuang'
put 'myns:student','201901010002','address:street','tianyulu'
put 'myns:student','201901010003','base_info:name','guanyu'
put 'myns:student','201901010003','address:provinces','jilin'
2、查询表中的所有数据
scan 'myns:student'
3、查询每个人的姓名和所有成绩
scan 'myns:student',{COLUMNS => ['base_info:name','score']}
4、查询201901010002的的地址信息
get 'myns:student','201901010002','address'
5、修改201901010002的name为zhangfei1,再次修改name为zhangfei2
put 'myns:student','201901010002','base_info:name','zhangfei1'
put 'myns:student','201901010002','base_info:name','zhangfei2'
6、查询201901010002的name的历史版本
get 'myns:student','201901010002',{COLUMN => 'base_info:name',VERSIONS => 5}
7、删除201901010002的name的最旧的两个版本
delete 'myns:student','201901010002','base_info:name',1631337844172
最后是倒数第二的 timestamp
8、删除第三行记录
deleteall 'myns:student','201901010003'
9、如何删除一张表中的所有记录
truncate 'myns:student'
第四大题:API的练习
新建maven工程,在pom.xml中添加hbase依赖
<dependency>
<groupId>org.apache.hbase</groupId>
<artifactId>hbase-client</artifactId>
<version>1.2.1</version>
</dependency>
- 创建命名空间ns1,要求添加属性author,company,comment. 属性值自定义
/** 创建namespace的API */
@Test
public void createNamespace() {
try {
//获取namespace描述器对象
NamespaceDescriptor descriptor = NamespaceDescriptor.create("ns1").build();
//提交到hbase中,进行创建
admin.createNamespace(descriptor);
} catch (IOException e) {
e.printStackTrace();
}
}
/** 修改namespace的属性信息 */
@Test
public void alterNamespace() {
try {
//获取指定namespace的描述器
NamespaceDescriptor descriptor = admin.getNamespaceDescriptor("ns1");
//设置属性
descriptor.setConfiguration("author","灰哀之雪");
descriptor.setConfiguration("company","apple");
descriptor.setConfiguration("comment","good");
//进行提交修改
admin.modifyNamespace(descriptor);
} catch (IOException e) {
e.printStackTrace();
}
}
- 输出命名空间ns1的属性信息
hbase(main):004:0> describe_namespace 'ns1'
DESCRIPTION
{NAME => 'ns1', author => '灰哀之雪', comment => 'good', company => 'apple'}
1 row(s) in 0.0140 seconds
- 在命名空间ns1下创建表emp表,提供以下列族
f1: 布隆过滤器row 版本2个 存活时间7天
f2: 布隆过滤器rowcol 版本5个 存活时间2天
f3: 属性值都是默认的。
/*** 创建一个table */
@Test
public void creatTable() {
try {
//获取TableName对象,指定要创建的表名
TableName tableName = TableName.valueOf("ns1:emp");
//新建一个表描述器
HTableDescriptor descriptor = new HTableDescriptor(tableName);
//新建一个列族描述器
HColumnDescriptor columnDescriptor1 = new HColumnDescriptor("f1");
//设置列族的布隆过滤器为行类型 ROW 列 ROWCOL
columnDescriptor1.setBloomFilterType(BloomType.ROW);
//设置列族支持缓存
columnDescriptor1.setInMemory(true);
//设置列族内的单元格支持2个版本
columnDescriptor1.setVersions(1, 2);
//设置列族的单元格过期时间为1天
columnDescriptor1.setTimeToLive(7 * 24 * 60 * 60);
//将列族描述器添加到表描述器中, 可以添加多个列族描述器
descriptor.addFamily(columnDescriptor1);
//新建一个列族描述器
HColumnDescriptor columnDescriptor2 = new HColumnDescriptor("f2");
//设置列族的布隆过滤器为行类型 ROW 列 ROWCOL
columnDescriptor2.setBloomFilterType(BloomType.ROWCOL);
//设置列族支持缓存
columnDescriptor2.setInMemory(true);
//设置列族内的单元格支持2个版本
columnDescriptor2.setVersions(1, 5);
//设置列族的单元格过期时间为1天
columnDescriptor2.setTimeToLive(2 * 24 * 60 * 60);
//将列族描述器添加到表描述器中, 可以添加多个列族描述器
descriptor.addFamily(columnDescriptor2);
//新建一个列族描述器
HColumnDescriptor columnDescriptor3 = new HColumnDescriptor("f3");
//将列族描述器添加到表描述器中, 可以添加多个列族描述器
descriptor.addFamily(columnDescriptor3);
//提交到Hbase,进行创建
admin.createTable(descriptor);
} catch (Exception e) {
e.printStackTrace();
}
}
在 hbsh shell 查看信息
hbase(main):010:0> describe 'ns1:emp'
Table ns1:emp is ENABLED
ns1:emp
COLUMN FAMILIES DESCRIPTION
{NAME => 'f1', BLOOMFILTER => 'ROW', VERSIONS => '2', IN_MEMORY => 'true', KEEP_DELETED_CELLS => 'FALSE',DATA_BLOCK_ENCODING => 'NONE', TTL => '604800 SECONDS (7 DAYS)', COMPRESSION => 'NONE', MIN_VERSIONS => '1', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}
{NAME => 'f2', BLOOMFILTER => 'ROWCOL', VERSIONS => '5', IN_MEMORY => 'true',KEEP_DELETED_CELLS => 'FALSE',DATA_BLOCK_ENCODING => 'NONE', TTL => '172800 SECONDS (2 DAYS)', COMPRESSION => 'NONE', MIN_VERSIONS => '1', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}
{NAME => 'f3', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}
3 row(s) in 0.0510 seconds
- 将emp表中的14行记录,插入5行记录即可。(思考,谁应该作为rowkey)
empno,ename,job,mgr,hiredate,sal,comm,deptno
7369,SMITH,CLERK,7902,1980-12-17,800,null,20
7499,ALLEN,SALESMAN,7698,1981-02-20,1600,300,30
7521,WARD,SALESMAN,7698,1981-02-22,1250,500,30
7566,JONES,MANAGER,7839,1981-04-02,2975,null,20
7654,MARTIN,SALESMAN,7698,1981-09-28,1250,1400,30
7698,BLAKE,MANAGER,7839,1981-05-01,2850,null,30
7782,CLARK,MANAGER,7839,1981-06-09,2450,null,10
7788,SCOTT,ANALYST,7566,1987-04-19,3000,null,20
7839,KING,PRESIDENT,null,1981-11-17,5000,null,10
7844,TURNER,SALESMAN,7698,1981-09-08,1500,0,30
7876,ADAMS,CLERK,7788,1987-05-23,1100,null,20
7900,JAMES,CLERK,7698,1981-12-03,950,null,30
7902,FORD,ANALYST,7566,1981-12-02,3000,null,20
7934,MILLER,CLERK,7369,1982-01-23,1300,null,10
- 查询一个员工的所有单元格
版权声明:本文为weixin_43847613原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。