美文网首页
Hbase官方文档学习

Hbase官方文档学习

作者: 一只当归 | 来源:发表于2021-02-23 15:12 被阅读0次

    HBase是一种构建在HDFS之上的分布式、面向列的存储系统。在需要实时读写、随机访问超大规模数据集时,可以使用HBase。

    HBase的特点

    1. 大:一个表可以有上亿行,上百万列。
    2. 面向列:面向列表(簇)的存储和权限控制,列(簇)独立检索。
    3. 稀疏:对于为空(NULL)的列,并不占用存储空间,因此,表可以设计的非常稀疏。
    4. 无模式:每一行都有一个可以排序的主键和任意多的列,列可以根据需要动态增加,同一张表中不同的行可以有截然不同的列。
    5. 数据多版本:每个单元中的数据可以有多个版本,默认情况下,版本号自动分配,版本号就是单元格插入时的时间戳。
    6. 数据类型单一:HBase中的数据都是字符串,没有类型。
      2.1. 掌握HBase shell命令使用(创建一个学生信息表:rowkey要求是学号,一个列簇,包含姓名、性别、年龄、住址)

    1.常用命令

    1.1.hbase shell

    进入hbase shell界面。


    image.png

    1.2.list

    查看已经存在的表。


    image.png

    1.3.status

    查询服务器状态。


    image.png

    1.4.version

    查询hbase版本。


    image.png

    表操作

    2.1.创建表

    在shell环境中使用disable命令可以把表设为离线,使用alter命令可以进行必要的修改,而enable命令则可以把表设置为在线。
    建表过程由于不熟悉hbase shell建表格式,出现了很多错误,后面在一篇博客上看到了解释后才恍然大悟。


    image.png

    例1:创建一个简单表,只包含一个‘data’列’。表和列族属性默认:
    #create ‘test’ ,‘data’


    image.png
    例2:创建一个学生信息表:rowkey要求是学号,一个列簇,包含姓名、性别、年龄、住址:
    image.png
    例3:创建多个列簇:,包含姓名、性别、年龄、住址。表和列族属性默认:

    #create 'student',{NAME=>'name'},{NAME=>'sex'},{NAME=>'age'},{NAME=>'adress'}


    image.png

    2.2.删除表

    删除表需要先将表置为离线,然后再删除。
    例:删除test表
    #disable ‘test’
    #drop ‘test’


    image.png
    image.png

    2.3.查看表结构

    # 语法:describe <table>
    例:查看student表的结构
    #describe ‘student’


    image.png

    2.4.修改表结构

    注意:修改表结构必须先将标置为离线
    # 语法:alter 't1', {NAME => 'f1'}, {NAME => 'f2', METHOD => 'delete'}
    例:将name的版本设为2
    #disable ‘student’
    #alter ‘student’,{NAME=>’name’,VERSIONS=’2’}
    #enable ‘student’


    image.png

    由于以下需要,所以又把name的版本改了回去。

    3.权限管理

    3.1.分配权限

    # 语法 : grant <user> <permissions> <table> <column family> <column qualifier> 参数后面用逗号分隔
    # 权限用五个字母表示: "RWXCA". READ('R'), WRITE('W'), EXEC('X'), CREATE('C'), ADMIN('A')
    例:给用户‘root’分配对表‘student’有读写的权限:
    #grant ‘root’,’RW’,’student’

    3.2.查看权限

    image.png

    3.3.收回权限

    image.png

    4.增删改查

    4.1.插入记录
    # 语法:put <table>,<rowkey>,<family:column>,<value>,<timestamp>
    #例:插入数据到student1表中,rowkey要求是学号,包含姓名、性别、年龄、住址


    image.png

    这里我插入了四个数据。

    4.2.查询记录

    ① 查询某行记录
    # 语法:get <table>,<rowkey>,[<family:column>,....]
    例1:查询表student1中学号为201601的记录
    # get 'student1','201601'


    image.png

    例2:查询表student1中学号为201601中的f1下的name
    # get 'student1','201601',‘f1:name’


    image.png
    ②扫描表
    # 语法:scan <table>, {COLUMNS => [ <family:column>,.... ], LIMIT => num}
    #LIMIT控制数据个数
    例:扫描表student1前3条数据
    #scan ‘student’,{LIMIT=>3}
    image.png

    ③查询表中的数据行数
    # 语法:count <table>, {INTERVAL => intervalNum, CACHE => cacheNum}
    # INTERVAL设置多少行显示一次及对应的rowkey,默认1000;CACHE每次去取的缓存区大小,默认是10,调整该参数可提高查询速度
    例:查询表student1中的行数,每100条显示一次,缓存区为500
    #count ‘student1’,{INTERVAL=>100,CACHE=>500}


    image.png
    4.3.修改记录
    修改记录其实就是插入覆盖。
    # 语法:put <table>,<rowkey>,<family:column>,<value>,<timestamp>
    例:修改表student中学号为201601的名字
    #put 'student1','201601','f1:name','jok'
    image.png

    5.掌握HBase的预分区功能,能够采用预分区设计表

    5.1.什么是预分区

    HBase表在刚刚被创建时,只有1个分区(region),当一个region过大(达到hbase.hregion.max.filesize属性中定义的阈值,默认10GB)时,表将会进行split,分裂为2个分区。表在进行split的时候,会耗费大量的资源,频繁的分区对HBase的性能有巨大的影响,所以HBase提供了预分区功能,即用户可以在创建表的时候对表按照一定的规则分区。

    5.2.预分区设计

    ①通过手动分区方法
    # 语法:create <table>, {NAME => <family>},SPLITS => [,,,,]
    示例:
    #create 't1', 'f1', SPLITS => ['10', '20', '30', '40']
    #create 't1', {NAME =>'f1', TTL => 180}, SPLITS => ['10', '20', '30', '40']
    #create 't1', {NAME =>'f1', TTL => 180}, {NAME => 'f2', TTL => 240}, SPLITS => ['10', '20', '30', '40']
    注意:SPLITS里面的值代表分区位置,上面的10,20,30,40表示分区位置在这里,所以总共有五个分区。
    例:手动分区创建一个有五个分区的表t1
    #create 't1', 'f1', SPLITS => ['10', '20', '30', '40']


    image.png

    Web界面查看表结构,http://master:60010(hbase端口号60010)


    image.png
    ②通过文件分区方法
    # 语法:create <table>, {NAME => <family>},SPLITS => filepath
    示例:
    #create 't1', 'f1', SPLITS_FILE => '/tmp/splits.txt'
    #create 't1', {NAME =>'f1', TTL => 180}, SPLITS_FILE => '/tmp/splits.txt'
    #create 't1', {NAME =>'f1', TTL => 180}, {NAME => 'f2', TTL => 240}, SPLITS_FILE => '/tmp/splits.txt'
    例:通过文件splits.txt内容建立分区t2
    # create 't2', 'f1', SPLITS_FILE => '/tmp/splits.txt'
    文件内容:
    image.png

    建立分区表:


    image.png
    Web界面查看分区:
    image.png

    相关文章

      网友评论

          本文标题:Hbase官方文档学习

          本文链接:https://www.haomeiwen.com/subject/eudnxltx.html