Hbase练习1

第一大题: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>
  1. 创建命名空间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();
        }
    }
  1. 输出命名空间ns1的属性信息
hbase(main):004:0> describe_namespace 'ns1'
DESCRIPTION                                                                  
{NAME => 'ns1', author => '灰哀之雪', comment => 'good', company => 'apple'}    
1 row(s) in 0.0140 seconds
  1. 在命名空间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
  1. 将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


  1. 查询一个员工的所有单元格


版权声明:本文为weixin_43847613原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。