精华内容
下载资源
问答
  • 2020-11-04 11:49:28

    Hbase表结构与常用操作命令

    一.使用Hbase前需要先启动Hadoopstart-dfs.sh,然后启动Hbasestart-hbase.sh与Hbase Shellhbase Shell,进入shell命令提示符状态。

    概念:HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。

    二.Hbase表结构

    行键列簇:cf1列簇:cf2
    列:名字列:年龄列:电话列:地址
    001张三18兰州
    002李四1913898986767北京
    Hbase表由行键,列,和列簇组成。

    ​ 行键(RowKey):可以理解成MySql中的主键列。系统会默认一个属性作为行键,通常把添加数据操作时表明后的第一个数据作为行键。

    ​ 列(Column):可理解为MySql列,可以属于某个列簇,也可以不属于。

    ​ 列簇(Column Family):两个特性:多个列聚合成一个列簇,可以将一个宽表切分成几个表,查询时将一整行数据以列簇形式部分返回;对应到文件存储结构,不同列簇会写入不同的文件。

    三.Hbase中操作

    1.创建表与删除表

    create 'student','name','sex','age','dept','course'#创建一个student表,属性可能是列可能是列簇,输入数据时确定。

    describe 'student'#用describe命令查看表student的基本信息。

    list#查看所有表

    disable 'student'#屏蔽表,删除一个表前要先屏蔽再drop删除

    drop 'student'

    2.快捷键(上下键找历史操作命令,tab补自动全命令)
    3.Hbase数据库的基本操作(增,删,改,查)
    增加数据:【终端下一般只能增加一个单元格数据,平常使用编程来完成】

    put 'student','01','name','liming'#添加数据:put ‘表名称’ ,‘行名称(Row Keys)’,‘列名称’ ‘值’,此代码表示给表student添加学号为01,名字为liming的一行数据,行键为01。

    put 'student','01','性别','女'

    put 'student','01','course:math','80'#列簇 “:”之后计数该列簇下的列,可以在输入数据时定义。

    查看数据:【get->单元格,scan->表的全部数据】

    get 'student','01'#查看01行的数据

    scan 'student'#查看整个表的数据

    注:汉字不能直接表示,Hbase是二进制保存数据的,程序解决汉字显示问题

    删除数据【delete->删除一列,put的反操作;deleteall->删除一行数据】

    delete 'student','01','性别'#删除列数据

    get 'student','性别'#查看是否还有“性别”列

    deleteall 'student','01'#删除01行数据

    scan 'student'#查看整个表的数据

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w7xdONqw-1604461698614)(D:\大学\大三\大数据平台搭建\hbase.jpg)]

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fCtzLSR9-1604461698618)(D:\大学\大三\大数据平台搭建\删除表重键.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1HLxf0Yy-1604461698622)(D:\大学\大三\大数据平台搭建\增加数据查看.png)]

    (img-fCtzLSR9-1604461698618)][外链图片转存中…(img-1HLxf0Yy-1604461698622)]

    更多相关内容
  • hbase查看表结构_HBase语法

    千次阅读 2020-11-23 03:27:20
    help①help :查看所有的hbase的shell命令②help 'cmd':寻求指定命令的使用方法 e.g. help 'create_namespace'hbase(main):012:0> help 'create_namespace'Create namespace; pass namespace name,and opt...

    一、HBase的DDL语法


    1.    help


    ①help :查看所有的hbase的shell命令

    ②help 'cmd' :寻求指定命令的使用方法

       e.g.

       help 'create_namespace'

    hbase(main):012:0> help 'create_namespace'Create namespace; pass namespace name,and optionally a dictionary of namespace configuration.Examples:  hbase> create_namespace 'ns1'  hbase> create_namespace 'ns1', {'PROPERTY_NAME'=>'PROPERTY_VALUE'}

    ③namespace :命名空间,理解为Java中的包

       hbase中的表看成是Java中的类

       换句话说,namespace就是保存表的一个逻辑上的路径

    2.    namespace

    2.1    namespace的常用操作命令

    alter_namespace

    修改命名空间的属性
    create_namespace创建命名空间
    describe_namespace查看命名空间的结构
    drop_namespace删除命名空间
    list_namespace查看HBase中所有的命名空间
    list_namespace_tables查看指定的命名空间中的所有表

    2.2    list_namespace

    hbase(main):001:0> list_namespaceNAMESPACE                                                                                default                                                                                  hbase                                                                                    2 row(s) in 0.1800 seconds

    若不指定命名空间,所有的表都创建在default下面

    hbase(main):002:0> help 'list_namespace'List all namespaces in hbase. Optional regular expression parameter couldbe used to filter the output. Examples:  hbase> list_namespace  hbase> list_namespace 'abc.*' hbase(main):003:0> list_namespace 'hbase'NAMESPACE                                                                                hbase                                                                                    1 row(s) in 0.0170 secondshbase(main):004:0> list_namespace 'h.*'NAMESPACE                                                                                hbase                                                                                    1 row(s) in 0.0090 secondshbase(main):005:0> list_namespace '^d'NAMESPACE                                                                                default                                                                                  1 row(s) in 0.0140 seconds

    2.3    create_namespace

    hbase(main):006:0> create_namespace 'ns1'0 row(s) in 0.8890 secondshbase(main):007:0> list_namespaceNAMESPACE                                                                                default                                                                                  hbase                                                                                    ns1                                                                                      3 row(s) in 0.0140 seconds

    2.4    describe_namespace

    hbase(main):008:0> describe_namespace 'ns1'DESCRIPTION                                                                              {NAME => 'ns1'}                                                                          1 row(s) in 0.0130 secondshbase(main):009:0> create_namespace 'ns2',{'name'=>'rock'}0 row(s) in 0.8690 secondshbase(main):010:0> describe_namespace 'ns2'DESCRIPTION                                                                              {NAME => 'ns2', name => 'rock'}                                                          1 row(s) in 0.0030 seconds

    2.5    alter_namespace

    修改namespace的属性

    hbase(main):011:0> help 'alter_namespace'Alter namespace properties.To add/modify a property:  hbase> alter_namespace 'ns1', {METHOD => 'set', 'PROPERTY_NAME' => 'PROPERTY_VALUE'}To delete a property:  hbase> alter_namespace 'ns1', {METHOD => 'unset', NAME=>'PROPERTY_NAME'}  e.g.# 为'ns2'设置属性hbase(main):012:0> alter_namespace 'ns2',{METHOD => 'set','name'=>'xiaoliu'}0 row(s) in 0.6270 secondshbase(main):013:0> describe_namespace 'ns2'DESCRIPTION                                                                              {NAME => 'ns2', name => 'xiaoliu'}                                                       1 row(s) in 0.0030 secondshbase(main):003:0> alter_namespace 'ns2',{METHOD=>'set','sex'=>'younggirlgirl'}0 row(s) in 0.6170 secondshbase(main):004:0> describe_namespace 'ns2'DESCRIPTION                                                                              {NAME => 'ns2', name => 'xiaoliu', sex => 'younggirlgirl'}                               1 row(s) in 0.0100 seconds# 将ns2中sex的属性撤销hbase(main):005:0> alter_namespace 'ns2',{METHOD=>'unset',NAME=>'sex'}0 row(s) in 0.6130 secondshbase(main):006:0> describe_namespace 'ns2'DESCRIPTION                                                                              {NAME => 'ns2', name => 'xiaoliu'}                                                       1 row(s) in 0.0060 seconds

    2.6    list_namespace_tables

    hbase(main):010:0> create 'ns1:t1',{NAME=>'f1',VERSIONS=>5}0 row(s) in 2.3830 seconds=> Hbase::Table - ns1:t1hbase(main):011:0> listTABLE                                                                                    ns1:t1                                                                                   1 row(s) in 0.0100 seconds=> ["ns1:t1"]hbase(main):012:0> list_namespace_tables 'ns1'TABLE                                                                                    t1                                                                                       1 row(s) in 0.0200 secondshbase(main):013:0> list_namespace_tables 'hbase'TABLE                                                                                    meta                                                                                     namespace                                                                                2 row(s) in 0.0130 secondshbase(main):014:0> list_namespace_tables 'default'TABLE                                                                                    0 row(s) in 0.0050 seconds

    2.7    drop_namespace

    hbase(main):015:0> help 'drop_namespace'Drop the named namespace. The namespace must be empty.hbase(main):016:0> drop_namespace 'ns2'0 row(s) in 0.8850 secondshbase(main):017:0> list_namespaceNAMESPACE                                                                                default                                                                                  hbase                                                                                    ns1                                                                                      3 row(s) in 0.0150 seconds# 这个命令只能删除为空的namespacehbase(main):019:0> drop_namespace 'ns1'ERROR: org.apache.hadoop.hbase.constraint.ConstraintException: Only empty namespaces can be removed. Namespace ns1 has 1 tablesCaused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hbase.constraint.ConstraintException): Only empty namespaces can be removed. Namespace ns1 has 1 tablesHere is some help for this command:Drop the named namespace. The namespace must be empty.

    3.    table

    3.1    关于表的常见命令

    create建表
    alter修改表
    describe/desc查看表结构
    disable/disable_all令表失效,在HBase中,只有失效的表才能删除/所有表失效
    enable/enable_all使表生效
    drop/drop_all删除表
    exists判断表是否存在
    is_disabled/is_enabled是否失效/生效
    list查询HBase所有的表

    3.2    create

    hbase(main):010:0> create 'ns1:t1',{NAME=>'f1',VERSIONS=>5}# 创建一个namespace是ns1,表是t1,表有一个列簇叫f1,有5个版本hbase(main):026:0> create 't1',{NAME=>'f1'},{NAME=>'f2'},{NAME=>'f3'}hbase(main):026:0> create 't1','f1','f2','f3'# 上面的两句话表达的意思完全相同。这个t1表被创建在default的namespace中hbase(main):026:0> create 't1',{NAME => 'f1', VERSION => 1, TTL => 259200, BLOCKCACHE => true}# 在default的namespace下创建了表t1。指定列簇f1的属性的配置:VERSIONS,TTL,BLOCKCACHE

    ①未进行分片存储:

    06b26fe29c53b8fdc81c5e41210bd756.png

    ②伪分布式下的分片存储:

    hbase(main):032:0> create 'ns1:t2','f1',SPLITS => ['10','20','30']

    b54b5318b3f45636a5b4f8efe79676ce.png

    82f09b3b42ed775f88febdbbb583b8e0.png

    每10行数据进行一次分片(0-9),(10-19),(20-29),第30行之后的分片一次(30-  )

    ③高可用下的分片存储

    hbase(main):004:0> create 'ns1:t2','f1',SPLITS => ['10','20','30']

    5f26b7e10b1f04c0c988328b410fcfe6.png

    3.3    list

    #查询ns1下所有的表hbase(main):002:0> list 'ns1:.*'TABLE                                                                                    ns1:t1                                                                                   ns1:t2                                                                                   2 row(s) in 0.0070 seconds=> ["ns1:t1", "ns1:t2"]#查询所有命名空间的所有表hbase(main):003:0> listTABLE                                                                                    ns1:t1                                                                                   ns1:t2                                                                                   t1                                                                                       3 row(s) in 0.0130 seconds=> ["ns1:t1", "ns1:t2", "t1"]

    3.4    describe、desc

    # 查看表结构hbase(main):004:0> desc 'ns1:t1'Table ns1:t1 is ENABLED                                                                  ns1:t1                                                                                   COLUMN FAMILIES DESCRIPTION                                                              {NAME => 'f1', BLOOMFILTER => 'ROW', VERSIONS => '5', 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'}                                                                                       1 row(s) in 0.0880 seconds

    3.5    alter

    # 修改添加删除列簇的信息,也可以修改添加删除表的属性# 1.修改指定表的指定列簇的属性hbase(main):005:0> alter 'ns1:t1',NAME =>'f1',VERSIONS =>10Updating all regions with the new schema...1/1 regions updated.Done.hbase(main):006:0> desc 'ns1:t1'Table ns1:t1 is ENABLED                                                                  ns1:t1                                                                                   COLUMN FAMILIES DESCRIPTION                                                              {NAME => 'f1', BLOOMFILTER => 'ROW', VERSIONS => '10', 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'}# 2.修改一张表中的多个列簇的属性hbase(main):010:0> alter 't1','f1',{NAME=>'f2',IN_MEMORY=>true},{NAME=>'f3',VERSIONS=>5}Updating all regions with the new schema...1/1 regions updated.Done.hbase(main):011:0> desc 'default:t1'Table default:t1 is ENABLED                                                              default:t1                                                                               COLUMN FAMILIES DESCRIPTION                                                              {NAME => 'f1', 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'}                                                                                       {NAME => 'f2', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'true', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}                                                                                        {NAME => 'f3', BLOOMFILTER => 'ROW', VERSIONS => '5', 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.删除一张表的列簇hbase(main):012:0> alter 't1','delete'=>'f1'Updating all regions with the new schema...1/1 regions updated.Done.hbase(main):013:0> desc 't1'Table t1 is ENABLED                                                                      t1                                                                                       COLUMN FAMILIES DESCRIPTION                                                              {NAME => 'f2', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'true', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}                                                                                        {NAME => 'f3', BLOOMFILTER => 'ROW', VERSIONS => '5', 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.6    exists

    hbase(main):014:0> exists 't1'Table t1 does exist

    3.7    drop/enable/disable

    hbase(main):015:0> drop 't1'ERROR: Table t1 is enabled. Disable it first.Here is some help for this command:Drop the named table. Table must first be disabled:  hbase> drop 't1'  hbase> drop 'ns1:t1'hbase(main):016:0> disable 't1'hbase(main):017:0> drop 't1'hbase(main):018:0> listTABLE                                                                                    ns1:t1                                                                                   ns1:t2 

    二、HBase的DML语法


    1.    put命令:只能插入单行

    hbase(main):019:0> put 'ns1:t1','001','f1:id','1'- 'ns1:t1' :表示namespace:tablename- '001' :表示rowkey- 'f1:id' :f1表示 列簇:列名- '1' :表示列值hbase(main):020:0> put 'ns1:t1','002','f1:id','2',111111- 111111 :表示的是时间戳hbase(main):024:0> put 'ns1:t1','001','f1:name','xiaoliu'

    2.    scan命令:多行查询数据

    # 查询指定命名空间中的指定表的所有数据hbase(main):025:0> scan 'ns1:t1'ROW                     COLUMN+CELL                                                       001                    column=f1:id, timestamp=1601194522018, value=1                    001                    column=f1:name, timestamp=1601195398366, value=xiaoliu            002                    column=f1:id, timestamp=111111, value=2  # 查询指定命名空间中的 指定表中的 指定列簇中的 指定列 hbase(main):026:0> scan 'ns1:t1',{COLUMNS => 'f1:id'}ROW                     COLUMN+CELL                                                       001                    column=f1:id, timestamp=1601194522018, value=1                    002                    column=f1:id, timestamp=111111, value=2  # 分页查询 :# 和传统的关系型数据库不一样,# 关系型数据库的列可以是很多不同的类型,但是HBase中只能存储byte[]hbase(main):024:0> put 'ns1:t1','003','f1:school','hbau'hbase(main):030:0> scan 'ns1:t1',{COLUMNS => ['f1'], LIMIT => 2, STARTROW => '001'}ROW                     COLUMN+CELL                                                       001                    column=f1:id, timestamp=1601194522018, value=1                    001                    column=f1:name, timestamp=1601195398366, value=xiaoliu            002                    column=f1:id, timestamp=111111, value=2# 按时间范围查询数据:时间左闭右开hbase(main):032:0> scan 'ns1:t1',{COLUMNS => 'f1',TIMERANGE => [111111,1601194522018]}ROW                     COLUMN+CELL                                                       002                    column=f1:id, timestamp=111111, value=2                          hbase(main):033:0> scan 'ns1:t1',{COLUMNS => 'f1',TIMERANGE => [111111,1601194522019]}ROW                     COLUMN+CELL                                                       001                    column=f1:id, timestamp=1601194522018, value=1                    002                    column=f1:id, timestamp=111111, value=2   

    按版本查询数据

    先进后出,栈来存储

    hbase(main):024:0> put 'ns1:t1','001','f1:name','liujinhong'hbase(main):001:0> scan 'ns1:t1'ROW                     COLUMN+CELL                                                      001                    column=f1:id, timestamp=1601194522018, value=1                   001                    column=f1:name, timestamp=1601198548241, value=liujinhong        002                    column=f1:id, timestamp=111111, value=2                          003                    column=f1:school, timestamp=1601198178186, value=hbau  hbase(main):002:0> scan 'ns1:t1',{RAW => true,VERSIONS => 1}hbase(main):003:0> scan 'ns1:t1',{RAW => true,VERSIONS => 2} 

    caeca79594b75336198ca75d0c661960.png

    3.    get命令:单行查询

    # 查询指定表中的行# 会将行中所有的列簇都查出来hbase(main):004:0> get 'ns1:t1','001'COLUMN                 CELL                                                             f1:id                 timestamp=1601194522018, value=1                                 f1:name               timestamp=1601198548241, value=liujinhong # 按照时间范围查询hbase(main):005:0> get 'ns1:t1','001',{COLUMNS => 'f1',TIMERANGE => [111111,1601194522019]}COLUMN                 CELL                                                             f1:id                 timestamp=1601194522018, value=1# 查询指定列簇的信息hbase(main):006:0> get 'ns1:t1','001',{COLUMNS => 'f1'}COLUMN                 CELL                                                             f1:id                 timestamp=1601194522018, value=1                                 f1:name               timestamp=1601198548241, value=liujinhong # 按版本查询hbase(main):007:0> get 'ns1:t1','001',{COLUMNS => 'f1',VERSIONS => 1}COLUMN                 CELL                                                             f1:id                 timestamp=1601194522018, value=1                                 f1:name               timestamp=1601198548241, value=liujinhong hbase(main):008:0> get 'ns1:t1','001',{COLUMNS => 'f1',VERSIONS => 2}COLUMN                 CELL                                                             f1:id                 timestamp=1601194522018, value=1                                 f1:name               timestamp=1601198548241, value=liujinhong                        f1:name               timestamp=1601195398366, value=xiaoliu 

    4.    修改数据

           没有专门的修改数据的命令,我们使用put命令来修改数据。只要表名、列簇、列名 相同,那么后put的数据会覆盖先put的数据

    5.    删除数据

    hbase(main):010:0> delete 'ns1:t1','002','f1:id'0 row(s) in 0.0350 secondshbase(main):011:0> scan 'ns1:t1'ROW                    COLUMN+CELL                                                      001                   column=f1:id, timestamp=1601194522018, value=1                   001                   column=f1:name, timestamp=1601198548241, value=liujinhong        003                   column=f1:school, timestamp=1601198178186, value=hbau

    6.    count :统计表中的行键数

    hbase(main):012:0> count 'ns1:t1'2 row(s) in 0.0160 seconds=> 2
    展开全文
  • hbase查看表结构_HBase简介和基本命令

    千次阅读 2020-11-21 14:16:10
    [162]一、HBase简介1.1什么是HBaseHBase 是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用 HBASE 技 术可在廉价 PC Server 上搭建起大规模结构化存储集群。 HBase 的目标是存储并处理大型的数据,更...

    23f602ad6c901b5ac797dc65e0d3e72c.png

    [162]

    一、HBase简介

    1.1什么是HBase

    HBase 是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用 HBASE 技

    术可在廉价 PC Server 上搭建起大规模结构化存储集群。

    HBase 的目标是存储并处理大型的数据,更具体来说是仅需使用普通的硬件配置,就能

    够处理由成千上万的行和列所组成的大型数据。

    1.2HBase特点

    1)海量存储

    Hbase 适合存储 PB 级别的海量数据,在 PB 级别的数据以及采用廉价 PC 存储的情况下,

    能在几十到百毫秒内返回数据。这与 Hbase 的极易扩展性息息相关。正式因为 Hbase 良好的

    扩展性,才为海量数据的存储提供了便利。

    2)列式存储

    这里的列式存储其实说的是列族存储,Hbase 是根据列族来存储数据的。列族下面可以

    有非常多的列,列族在创建表的时候就必须指定。

    3)极易扩展

    Hbase 的扩展性主要体现在两个方面,一个是基于上层处理能力(RegionServer)的扩

    展,一个是基于存储的扩展(HDFS)。

    通过横向添加 RegionSever 的机器,进行水平扩展,提升 Hbase 上层的处理能力,提升 Hbsae

    服务更多 Region 的能力。

    备注:RegionServer 的作用是管理 region、承接业务的访问,这个后面会详细的介绍通

    过横向添加 Datanode 的机器,进行存储层扩容,提升 Hbase 的数据存储能力和提升后端存

    储的读写能力。

    4)高并发

    由于目前大部分使用 Hbase 的架构,都是采用的廉价 PC,因此单个 IO 的延迟其实并不

    小,一般在几十到上百 ms 之间。这里说的高并发,主要是在并发的情况下,Hbase 的单个

    IO 延迟下降并不多。能获得高并发、低延迟的服务。

    5)稀疏

    稀疏主要是针对 Hbase 列的灵活性,在列族中,你可以指定任意多的列,在列数据为空

    的情况下,是不会占用存储空间的。

    1.3HBase架构

    3dd47c3f5c5f1814cd1b12ec7e3db135.png

    从图中可以看出 Hbase 是由 Client、Zookeeper、Master、HRegionServer、HDFS 等

    几个组件组成,下面来介绍一下几个组件的相关功能:

    1)Client

    Client 包含了访问 Hbase 的接口,另外 Client 还维护了对应的 cache 来加速 Hbase 的访

    问,比如 cache 的.META.元数据的信息。

    2)Zookeeper

    HBase 通过 Zookeeper 来做 master 的高可用、RegionServer 的监控、元数据的入口以及

    集群配置的维护等工作。具体工作如下:

    通过 Zoopkeeper 来保证集群中只有 1 个 master 在运行,如果 master 异常,会通过竞争

    机制产生新的 master 提供服务

    通过 Zoopkeeper 来监控 RegionServer 的状态,当 RegionSevrer 有异常的时候,通过回

    调的形式通知 Master RegionServer 上下线的信息

    通过 Zoopkeeper 存储元数据的统一入口地址

    3)Hmaster

    master 节点的主要职责如下:

    为 RegionServer 分配 Region

    维护整个集群的负载均衡

    维护集群的元数据信息

    发现失效的 Region,并将失效的 Region 分配到正常的 RegionServer 上

    当 RegionSever 失效的时候,协调对应 Hlog 的拆分

    4)HregionServer

    HregionServer 直接对接用户的读写请求,是真正的“干活”的节点。它的功能概括如下:

    管理 master 为其分配的 Region

    处理来自客户端的读写请求

    负责和底层 HDFS 的交互,存储数据到 HDFS

    负责 Region 变大以后的拆分

    负责 Storefile 的合并工作

    5)HDFS

    HDFS 为 Hbase 提供最终的底层数据存储服务,同时为 HBase 提供高可用(Hlog 存储在

    HDFS)的支持,具体功能概括如下:

    提供元数据和表数据的底层分布式存储服务

    数据多副本,保证的高可靠和高可用性

    1.3 HBase 中的角色

    1.3.1 HMaster

    功能

    1.监控 RegionServer

    2.处理 RegionServer 故障转移

    3.处理元数据的变更

    4.处理 region 的分配或转移

    5.在空闲时间进行数据的负载均衡

    6.通过 Zookeeper 发布自己的位置给客户端

    1.3.2 RegionServer

    功能

    1.负责存储 HBase 的实际数据

    2.处理分配给它的 Region

    3.刷新缓存到 HDFS

    4.维护 Hlog

    5.执行压缩

    6.负责处理 Region 分片

    1.2.3 其他组件

    1.Write-Ahead logs

    HBase 的修改记录,当对 HBase 读写数据的时候,数据不是直接写进磁盘,它会在内

    存中保留一段时间(时间以及数据量阈值可以设定)。但把数据保存在内存中可能有更高的

    概率引起数据丢失,为了解决这个问题,数据会先写在一个叫做 Write-Ahead logfile 的文件

    中,然后再写入内存中。所以在系统出现故障的时候,数据可以通过这个日志文件重建。

    2.Region

    Hbase 表的分片,HBase 表会根据 RowKey值被切分成不同的 region 存储在 RegionServer

    中,在一个 RegionServer 中可以有多个不同的 region。

    3.Store

    HFile 存储在 Store 中,一个 Store 对应 HBase 表中的一个列族。

    4.MemStore

    顾名思义,就是内存存储,位于内存中,用来保存当前的数据操作,所以当数据保存在

    WAL 中之后,RegsionServer 会在内存中存储键值对。

    5.HFile

    这是在磁盘上保存原始数据的实际的物理文件,是实际的存储文件。StoreFile 是以 Hfile

    的形式存储在 HDFS 的。

    二、HBase Shell 操作

    2.1 基本操作

    1.进入 HBase 客户端命令行

    [atguigu@hadoop102 hbase]$ bin/hbase shell 

    2.查看帮助命令

    hbase(main):001:0> help 

    3.查看当前数据库中有哪些表

    hbase(main):002:0> list 

    3.2 表的操作

    1.创建表

    hbase(main):002:0> create 'student','info' 

    2.插入数据到表

    hbase(main):003:0> put 'student','1001','info:sex','male' 
    hbase(main):004:0> put 'student','1001','info:age','18' 
    hbase(main):005:0> put 'student','1002','info:name','Janna' 
    hbase(main):006:0> put 'student','1002','info:sex','female' 
    hbase(main):007:0> put 'student','1002','info:age','20' 

    3.扫描查看表数据

    hbase(main):008:0> scan 'student' 
    hbase(main):009:0> scan 'student',{STARTROW => '1001', STOPROW =>  
    '1001'} 
    hbase(main):010:0> scan 'student',{STARTROW => '1001'} 

    4.查看表结构

    hbase(main):011:0> describe ‘student’ 

    5.更新指定字段的数据

    hbase(main):012:0> put 'student','1001','info:name','Nick' 
    hbase(main):013:0> put 'student','1001','info:age','100' 

    6.查看“指定行”或“指定列族:列”的数据

    hbase(main):014:0> get 'student','1001' 
    hbase(main):015:0> get 'student','1001','info:name' 

    7.统计表数据行数

    hbase(main):021:0> count 'student' 

    8.删除数据

    删除某 rowkey 的全部数据:

    hbase(main):016:0> deleteall 'student','1001' 

    删除某 rowkey 的某一列数据:

    hbase(main):017:0> delete 'student','1002','info:sex' 

    9.清空表数据

    hbase(main):018:0> truncate 'student' 

    提示:清空表的操作顺序为先 disable,然后再 truncate。

    10.删除表

    首先需要先让该表为 disable 状态:

    hbase(main):019:0> disable 'student' 

    然后才能 drop 这个表:

    hbase(main):020:0> drop 'student' 
    提示:如果直接 drop 表,会报错:ERROR: Table student is enabled. Disable it first. 

    11.变更表信息

    将 info 列族中的数据存放 3 个版本:

    hbase(main):022:0> alter 'student',{NAME=>'info',VERSIONS=>3} 
    hbase(main):022:0> get  
    'student','1001',{COLUMN=>'info:name',VERSIONS=>3}
    展开全文
  • 表结构查询命令

    2016-03-18 15:12:18
    表结构、视图结构查询命令,通过这个命令可以进行扩展,如生成对象属性批量赋值的命令
  • Hbase shell命令大全与表结构详解案例展示

    千次阅读 多人点赞 2021-09-17 10:59:48
    Apache HBase Shell 是(J)Ruby的 IRB,其中添加了一些 HBase 特定命令。您可以在 IRB 中执行的任何操作,您都应该可以在 HBase Shell 中执行。 0. 首先创建hbase集群的操作用户 hbase_test 1.首先root用户在本地...

    1.hbase Shell概述

          Apache HBase Shell 是(J)Ruby的 IRB,其中添加了一些 HBase 特定命令。您可以在 IRB 中执行的任何操作,您都应该可以在 HBase Shell 中执行。

    0. 首先创建hbase集群的操作用户 hbase_test

    1.首先root用户在本地客户端添加hbase_test用户
    [root@10-90-50-77-jhdxyjd ~]# useradd hbase_test
    
    2.切换hbase集群的超级用户,创建/user/hbase_test目录,修改授权
    [hdfs@10-90-50-77-jhdxyjd ~]# hdfs dfs -mkdir /user/hbase_test
    [hdfs@10-90-50-77-jhdxyjd ~]# hdfs dfs -chown hbase_test:hbase_test /user/hbase_test
    
    3.注意这里hbase没有开启授权管理,后面详细讲解。

    1.开启hbase shell很简单,在装了Hbase的节点直接执行./hbase shell即可进入

         Hbase官网Shell命令查看:Apache HBase ™ Reference Guide

    2.Hbase shell中所有命令分类汇总

    如上,hbase shell中help可以查看所有hbase命令。分类汇总展示。标红的要重点关注,如果不会用help 一下命令。

    类别命令名介绍描述语法

    1.通用类型命令

    (主要用来查看基本的hbase操作和集群基本信息)

     status返回hbase集群的状态信息hbase(main):053:0> status
    1 active master, 1 backup masters, 7 servers, 0 dead, 2.1429 average load
    Took 0.0082 seconds             
    processlist查看regionser上的task列表,可以查看多种明细

    hbase(main):054:0> processlist
    0 tasks as of: 2021-09-17 17:33:33
    No general tasks currently running.
    Took 0.5326 seconds  

     hbase> processlist
      hbase> processlist 'all'
      hbase> processlist 'general'
      hbase> processlist 'handler'
      hbase> processlist 'rpc'
      hbase> processlist 'operation'
      hbase> processlist 'all','host187.example.com'
      hbase> processlist 'all','host187.example.com,16020'
      hbase> processlist 'all','host187.example.com,16020,1289493121758'

    table_help查看如何操作表table_help 会告诉你操作表的crud命令语法和演示

    比如:
       hbase> t = create 't', 'cf'

    Or, if you have already created the table, you can get a reference to it:

       hbase> t = get_table 't'

    You can do things like call 'put' on the table:
     

    version返回hbase版本信息hbase(main):068:0> version
    2.1.0-cdh6.1.0, rUnknown, Thu Dec  6 16:59:59 PST 2018
    Took 0.0003 seconds 
    whoami查看当前hbase操作用户hbase(main):069:0> whoami
    hbase_test (auth:SIMPLE)
        groups: hbase_test
    Took 0.0137 seconds
    2.namespace的所有操作命令

     create_namespace

    创建namespace,类似数据库create_namespace 'myns_test'    

    describe_namespace

    查看namespace的信息hbase(main):070:0> describe_namespace 'myns_test'
    DESCRIPTION                                                        
    {NAME => 'myns_test', PROPERTY_NAME => 'PROPERTY_VALUE'}                                              
    => 1

    drop_namespace

    删除namespace,前提必须先删除其中的表,否则异常drop_namespace 'myns_test'

    alter_namespace

    修改namespace其中属性 alter_namespace 'myns_test',{METHOD => 'set', 'PROPERTY_NAME' => 'PROPERTY_VALUE'}
    list_namespace查看hbase中有个多少个namespacehbase(main):071:0> list_namespace
    NAMESPACE                                                          
    default                                                                     
    hbase                                                                      
    myns_test                                                                

    list_namespace

    _tables

    查看某个namespace中的所有表hbase(main):073:0> list_namespace_tables 'myns_test'
    TABLE                                                                     
    t1                                                                             
    tb2                                                                           
    2 row(s)
    Took 0.0043 seconds                                              
    => ["t1", "tb2"]

    3.表的ddl语句

    重点掌握表的操作

    alter,
     

    alter修改表模式,表列族和表所有的属性。类似alter tablealter 't1', METHOD => 'table_conf_unset', NAME => 'hbase.hregion.majorcompaction'

    create

    drop 

    drop_all,

    创建表

    删除表

    删除所有符合规则的表,正则匹配

    具体参考下面详细介绍

    create 't1', 'f1', 'f2', 'f3'

    drop  't1'

    hbase> drop_all 't.*'
    hbase> drop_all 'ns:t.*'
    hbase> drop_all 'ns:.*

    list

    list列举出hbase中所有的表;也支持模糊匹配检索列举  hbase> list
      hbase> list 'abc.*'
      hbase> list 'ns:abc.*'
      hbase> list 'ns:.*'
    exists查看表是否存在,返回布尔值hbase(main):076:0>  exists 't1'
    Table t1 does exist 
    Took 0.0279 seconds                                              
    => true
    hbase(main):077:0>  exists 'ns1:t3'
    Table ns1:t3 does not exist                                     
    => false
    describe/desc都是查看表结构详细信息desc 'myns:t1'

    disable,

    disable_all,

    enable,

    enable_all,

    设置表可用和不可用状态。同样disable_all是按正则匹配批量设置表的disable状态

    hbase> disable 't1'
    hbase> disable 'ns1:t1'

    hbase> disable_all 't.*'
    hbase> disable_all 'ns:t.*'
    hbase> disable_all 'ns:.*'

    is_disabled,

    is_enabled,

    查看表是否可用,或者不可用,返回布尔值  hbase> is_disabled 't1'
      hbase> is_disabled 'ns1:t1'
    get_table,获取表,将其作为object对象返回,然后基于对象操作


      hbase> t1 = get_table 't1'
      hbase> t1 = get_table 'ns1:t1'

      hbase>t1.help

    list_regions

    一般查一个表的所有region,可以通过web

    界面查看

    以数组的形式列出特定表的所有region。

    该命令显示服务器名称、rs名称、起始键、结束键、区域大小(以MB为单位)、请求数

    和位置。

     hbase> list_regions 'table_name'
     hbase> list_regions 'table_name', 'server_name'
        hbase> list_regions 'table_name', {SERVER_NAME => 'server_name', LOCALITY_THRESHOLD => 0.8}
         hbase> list_regions 'table_name', {SERVER_NAME => 'server_name', LOCALITY_THRESHOLD => 0.8}, ['SERVER_NAME']
       

    locate_region,

    定位一个表的key所在regionhbase> locate_region 'tableName', 'key0'
    show_filters查看hbase集群中所有的过滤器。过滤器用于get和scan命令中作为筛选数据的条件,类型关系型数据库中的where的作用,后面详解

    hbase(main):096:0> show_filtersDependentColumnFilter                       
    KeyOnlyFilte

    ............

    alter_status获取alter命令的状态hbase> alter_status 't1'
    hbase> alter_status 'ns1:t1'
    hbase(main):098:0>  alter_status 't1'
    1/1 regions updated.
    Done.
    Took 1.0209 seconds  

    alter_async, 

    clone_table_schema

    克隆表模式类似likehbase> clone_table_schema 'table_name', 'new_table_name'
    hbase> clone_table_schema 'table_name', 'new_table_name', false  注意,带false参数表示不保存表的拆分split模式。
    4.表的dml语句count,统计表中行数,类似hive、数据库里count语法,支持各种复杂聚合统计。     hbase> count 'ns1:t1'
     hbase> count 't1'
     hbase> count 't1', INTERVAL => 100000
     hbase> count 't1', CACHE => 1000
     hbase> count 't1', INTERVAL => 10, CACHE => 1000
     hbase> count 't1', FILTER => "
        (QualifierFilter (>=, 'binary:xyz')) AND (TimestampsFilter ( 123, 456))"
     hbase> count 't1', COLUMNS => ['c1', 'c2'], STARTROW => 'abc', STOPROW => 'xyz'

    put,

    get,

    append,

    put往指定的表,行,列族插入一个cells值。

    get是获取指定指定行的值

    append是给指定表,行,列族上cells的value追加值.

    hbase(main):119:0> put 'tt1', 'rowkey1','f1:name','tom'
    hbase(main):120:0> get 'tt1','rowkey1'
    COLUMN                         CELL                               
     f1:name                       timestamp=1631876854951, value=tom                 
    1 row(s)                                                                   
    hbase(main):121:0> append  'tt1', 'rowkey1','f1:name','tom2'
    CURRENT VALUE = tomtom2
    hbase(main):122:0> get 'tt1','rowkey1'
    COLUMN                         CELL                              
     f1:name                       timestamp=1631876898153, value=tomtom2       
      

    delete,

    deleteall,

    delete删除一个指定表,指定列族,指定列的一个cell值。

    而deleteall指定删除表,列族或者时间戳的所有celles值。


      hbase> delete 'ns1:t1', 'r1', 'c1', ts1
      hbase> delete 't1', 'r1', 'c1', ts1
      hbase> delete 't1', 'r1', 'c1', ts1, {VISIBILITY=>'PRIVATE|SECRET'}


      hbase> deleteall 'ns1:t1', 'r1'
      hbase> deleteall 't1', 'r1'
      hbase> deleteall 't1', 'r1', 'c1'
      hbase> deleteall 't1', 'r1', 'c1', ts1
      hbase> deleteall 't1', 'r1', 'c1', ts1, {VISIBILITY=>'PRIVATE|SECRET'}


     

    scan,重点,后详
     

    扫描一张表,通过各种属性方式设置扫描规则。后面详解  hbase> scan 'hbase:meta'
      hbase> scan 'hbase:meta', {COLUMNS => 'info:regioninfo'}
      hbase> scan 'ns1:t1', {COLUMNS => ['c1', 'c2'], LIMIT => 10, STARTROW => 'xyz'}
      hbase> scan 't1', {COLUMNS => ['c1', 'c2'], LIMIT => 10, STARTROW => 'xyz'}
      hbase> scan 't1', {COLUMNS => 'c1', TIMERANGE => [1303668804000, 1303668904000]}
      hbase> scan 't1', {REVERSED => true}
      hbase> scan 't1', {ALL_METRICS => true}

    truncate,

    truncate_preserve

    清空表,保留表结构,实际本质是先disabled表,删除表,再重建表。

    get_counter,

    get_counter获取计数器# 点击量:日、周、月
    create 'counters', 'daily', 'weekly', 'monthly'
    incr 'counters', '20110101', 'daily:hits', 1
    incr 'counters', '20110101', 'daily:hits', 1
    get_counter 'counters', '20110101', 'daily:hits'
     
    incr,注意:incr 可以对不存的行键操作,如果行键已经存在会报错,如果使用put修改了incr的值再使用incr也会报错

    incr# 语法 incr '表名', '行键', '列族:列名', 步长值

    hbase(main):171:0> incr 'ns1:t1','r3','cf1:name2',10
    COUNTER VALUE = 20


    hbase(main):172:0> incr 'ns1:t1','r3','cf1:name2',10
    COUNTER VALUE = 30


    hbase(main):173:0> get 'ns1:t1','r3'
    COLUMN                         CELL                              
     cf1:name2                     timestamp=1631878212258, value=\x00\x00\x00\x00\x00\x00\x00\x1E             

    get_splits,获取表的分隔符hbase(main):176:0> create 'ns1:t3', 'f1', SPLITS => ['10', '20', '30', '40']
    Created table ns1:t3                                                                                 
    => Hbase::Table - ns1:t3
    hbase(main):177:0> get_splits 'ns1:t3'
    Total number of splits = 5
    10
    20
    30
    40

    Hbase shell其他的命令,后续讲解,多是运维命令,一般开发使用的少。

    hbase集群工具类命令tools重要,运维常用,后面详细展开讲述

    assign,balance_switch,balancer, balancer_enabled, catalogjanitor_enabled, catalogjanitor_run, catalogjanitor_switch, cleaner_chore_enabled, cleaner_chore_run, cleaner_chore_switch, clear_block_cache, clear_compaction_queues, clear_deadservers,

    close_region, compact,compact_rs,compaction_state, flush, is_in_maintenance_mode, list_deadservers,major_compact,merge_region,

    move, normalize, normalizer_enabled, normalizer_switch, split, splitormerge_enabled, splitormerge_switch,stop_master,stop_regionserver,trace, unassign,wal_roll, zk_dump

    安全权限管理类命令

    grant,list_security_capabilities,revoke,user_permission

    security权限管理,运维会用。

    程序类procedures

    list_locks,

    list_procedures

    visibility labels

    add_labels,clear_auths,get_auths,list_labels, set_auths,set_visibility

    rsgroup相关操作命令

    add_rsgroup,balance_rsgroup,get_rsgroup,get_server_rsgroup, get_table_rsgroup,

    list_rsgroups, move_namespaces_rsgroup, move_servers_namespaces_rsgroup, move_servers_rsgroup, move_servers_tables_rsgroup, move_tables_rsgroup, remove_rsgroup, remove_servers_rsgroup

    空间配额类命令quotas

    一般生产对租户对做配额管理,防止单个用户占用大量的资源,运维命令list_quota_snapshots, list_quota_table_sizes,

    list_quotas, list_snapshot_sizes, set_quota

    配置文件更新命令

     update_all_config,update_config

    运维命令
     snapshots

    clone_snapshot, delete_all_snapshot, delete_snapshot, delete_table_snapshots, list_snapshots,

    list_table_snapshots, restore_snapshot, snapshot

    replication

    add_peer, append_peer_namespaces, append_peer_tableCFs, disable_peer, disable_table_replication, enable_peer, enable_table_replication, get_peer_config,

    list_peer_configs, list_peers, list_replicated_tables,

    remove_peer, remove_peer_namespaces, remove_peer_tableCFs, set_peer_bandwidth, set_peer_exclude_namespaces, set_peer_exclude_tableCFs, set_peer_namespaces, set_peer_replicate_all, set_peer_serial, set_peer_tableCFs, show_peer_tableCFs,update_peer_config

    3.Hbase Shell命令操作与实例演示

    3.0 hbase 神器 help

    3.01.直接列举出出所有hbase shell的命令,分类归总

    hbase(main):019:0> help
    HBase Shell, version 2.1.0-cdh6.1.0, rUnknown, Thu Dec  6 16:59:59 PST 2018
    Type 'help "COMMAND"', (e.g. 'help "get"' -- the quotes are necessary) for help on a specific command.
    Commands are grouped. Type 'help "COMMAND_GROUP"', (e.g. 'help "general"') for help on a command group.
    这里是hbase所有命令,并且按类分组了。
    COMMAND GROUPS:  
      Group name: general  //通用命令
      Commands: processlist, status, table_help, version, whoami
    
      .............................

    3.0.2查看某个命令的详细使用 

    hbase(main):020:0> help 'create'
    Creates a table. Pass a table name, and a set of column family
    specifications (at least one), and, optionally, table configuration.
    Column specification can be a simple string (name), or a dictionary
    (dictionaries are described below in main help output), necessarily
    including NAME attribute.
    Examples:
    
    Create a table with namespace=ns1 and table qualifier=t1
      hbase> create 'ns1:t1', {NAME => 'f1', VERSIONS => 5}
    
    Create a table with namespace=default and table qualifier=t1
      hbase> create 't1', {NAME => 'f1'}, {NAME => 'f2'}, {NAME => 'f3'}
      hbase> # The above in shorthand would be the following:
      hbase> create 't1', 'f1', 'f2', 'f3'
      hbase> create 't1', {NAME => 'f1', VERSIONS => 1, TTL => 2592000, BLOCKCACHE => true}
      hbase> create 't1', {NAME => 'f1', CONFIGURATION => {'hbase.hstore.blockingStoreFiles' => '10'}}
      hbase> create 't1', {NAME => 'f1', IS_MOB => true, MOB_THRESHOLD => 1000000, MOB_COMPACT_PARTITION_POLICY => 'weekly'}
    
    Table configuration options can be put at the end.
    Examples:
    
      hbase> create 'ns1:t1', 'f1', SPLITS => ['10', '20', '30', '40']
      hbase> create 't1', 'f1', SPLITS => ['10', '20', '30', '40']
      hbase> create 't1', 'f1', SPLITS_FILE => 'splits.txt', OWNER => 'johndoe'
      hbase> create 't1', {NAME => 'f1', VERSIONS => 5}, METADATA => { 'mykey' => 'myvalue' }
      hbase> # Optionally pre-split the table into NUMREGIONS, using
      hbase> # SPLITALGO ("HexStringSplit", "UniformSplit" or classname)
      hbase> create 't1', 'f1', {NUMREGIONS => 15, SPLITALGO => 'HexStringSplit'}
      hbase> create 't1', 'f1', {NUMREGIONS => 15, SPLITALGO => 'HexStringSplit', REGION_REPLICATION => 2, CONFIGURATION => {'hbase.hregion.scan.loadColumnFamiliesOnDemand' => 'true'}}
      hbase> create 't1', {NAME => 'f1', DFS_REPLICATION => 1}
    
    You can also keep around a reference to the created table:
    
      hbase> t1 = create 't1', 'f1'
    
    Which gives you a reference to the table named 't1', on which you can then
    call methods.

    3.1 namespace概述与创建更新删除

    namespace命名空间是表的逻辑分组,类似于关系数据库系统中的数据库。这种抽象为即将到来的多租户相关功能奠定了基础。简单理解就是hbase中的数据库,隔离用户,做如下配额,安全管理等。

    • 配额管理 ( HBASE-8410 ) - 限制命名空间可以消耗的资源量(即区域、表)。

    • 命名空间安全管理 ( HBASE-9206 ) - 为租户提供另一个级别的安全管理。

    • 区域服务器组 ( HBASE-6721 ) - 命名空间/表可以固定到 RegionServers 的子集上,从而保证粗略的隔离级别。

    注意:hbase集群在创建时,默认预定义了两个特殊的命名空间

    • hbase - 系统命名空间,用于包含 HBase 内部表

    • default - 没有明确指定命名空间的表将自动落入这个命名空间

    尖叫总结:实际生产中很少通过hbase shell去操作hbase,更多的是学习测试,问题排查等等才会使用到hbase shell ,hbase总的来说就是写数据,然后查询。 前者是通过API bulkload等形式写数据,后者通过api调用查询。

     3.1.1 namespace的操作

    1.创建namespace
    hbase(main):008:0> create_namespace 'myns_test'    
    2.在指定的namespace中创建一个表                                                                                               
    hbase(main):009:0> create 'myns_test:t1','cl1'
    Created table myns_test:t1                                                                                               
    => Hbase::Table - myns_test:t1
    3.删除一个namespace,前提必须要先把其中的表删完,不然报错。跟数据库一样
    hbase(main):010:0> drop_namespace 'myns_test'
    
    ERROR: org.apache.hadoop.hbase.constraint.ConstraintException: Only empty namespaces can be removed. Namespace myns_test has 1 tables
            at org.apache.hadoop.hbase.master.procedure.DeleteNamespaceProcedure.prepareDelete(DeleteNamespaceProcedure.java:217)
            ...............
            at org.apache.hadoop.hbase.procedure2.ProcedureExecutor$WorkerThread.run(ProcedureExecutor.java:2140)
    
    For usage try 'help "drop_namespace"'
    
    Took 0.7591 seconds   
    5.修改namespace的属性                                                                                               
    hbase(main):011:0> alter_namespace 'myns_test',{METHOD => 'set', 'PROPERTY_NAME' => 'PROPERTY_VALUE'}
    Took 0.5489 seconds                                                                                                  
    
    7.查看所有的namespace,看系统预定义与默认的defalut/hbase namespace。如果创建表不指定namespace,则在默认default里。
    hbase(main):014:0> create_namespace 'myns_test1'
    Took 0.2504 seconds                                                                                                  
    hbase(main):015:0> list_namespace
    NAMESPACE                                                                                                            
    default                                                                                                              
    hbase                                                                                                                
    myns_test                                                                                                            
    myns_test1                                                                                                           
    4 row(s)
    hbase(main):016:0> drop_namespace 'myns_test1'  #删除一个空的namespace
    Took 0.2248 seconds                                                                                                  
    hbase(main):017:0> list_namespace
    NAMESPACE                                                                                                            
    default                                                                                                              
    hbase                                                                                                                
    myns_test                                                                                                            
    3 row(s)
    Took 0.0113 seconds 
    
    8.查看namespace的详细信息
    hbase(main):018:0> describe_namespace 'myns_test'
    DESCRIPTION                                                                                                          
    {NAME => 'myns_test', PROPERTY_NAME => 'PROPERTY_VALUE'}                                                             
    Took 0.0058 seconds                                                                                                  
    => 1
    
    9.列出某个namespace下所有的表
    hbase(main):023:0> list_namespace_tables 'myns_test'
    TABLE                                                                                                                
    t1                                                                                                                   
    1 row(s)
    Took 0.0237 seconds                                                                                                  
    => ["t1"]

    尖叫总结:namespace了解即可,实际生产中用的很少,一般也都是运维同学给创建好。开发更多的是表级别的操作。

    3.2hbase 表的CRUD

       创建表,必须传递两个值,一个是表名,一个是列族名。其他可选的表的配置可加可不加,其他都是对表(实际列族)的约束,根据实际生产要求添加,比如压缩,时间戳,版本等等。且属性可以单独指定,不指定的属性就是默认值。

    3.2.1列举表,查看表结构等

    1.列出某个namespace下所有的表                                                                                                 
    hbase(main):023:0> list_namespace_tables 'myns_test'
    TABLE                                                                                                                
    t1                                                                                                                   
    1 row(s)
    Took 0.0237 seconds                                                                                                  
    => ["t1"]
    2.列出所有表,所有namespace下所有表。
    hbase(main):024:0> list
    TABLE                                                                                                                
    myns_test:t1                                                                                                         
    test                                                                                                                 
    2 row(s)
    Took 0.0041 seconds                                                                                                  
    => ["myns_test:t1", "test"]
    
    3.查看表结构,describe会显示表的结构,默认值,参数等。类似show create table 
    hbase(main):027:0> describe 't1'
    Table t1 is ENABLED                                                                                                  
    t1                                                                                                                   
    COLUMN FAMILIES DESCRIPTION                                                                                          
    {NAME => 'f1', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIOR => 'false', KEEP_DELETED_CELLS
     => 'FALSE', CACHE_DATA_ON_WRITE => 'false', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', MIN_VERSIONS => '0', RE
    PLICATION_SCOPE => '0', BLOOMFILTER => 'ROW', CACHE_INDEX_ON_WRITE => 'false', IN_MEMORY => 'false', CACHE_BLOOMS_ON_
    WRITE => 'false', PREFETCH_BLOCKS_ON_OPEN => 'false', COMPRESSION => 'NONE', BLOCKCACHE => 'true', BLOCKSIZE => '6553
    6'}                                                                                                                  
    {NAME => 'f2', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIOR => 'false', KEEP_DELETED_CELLS
     => 'FALSE', CACHE_DATA_ON_WRITE => 'false', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', MIN_VERSIONS => '0', RE
    PLICATION_SCOPE => '0', BLOOMFILTER => 'ROW', CACHE_INDEX_ON_WRITE => 'false', IN_MEMORY => 'false', CACHE_BLOOMS_ON_
    WRITE => 'false', PREFETCH_BLOCKS_ON_OPEN => 'false', COMPRESSION => 'NONE', BLOCKCACHE => 'true', BLOCKSIZE => '6553
    6'}                                                                                                                  
    {NAME => 'f3', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIOR => 'false', KEEP_DELETED_CELLS
     => 'FALSE', CACHE_DATA_ON_WRITE => 'false', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', MIN_VERSIONS => '0', RE
    PLICATION_SCOPE => '0', BLOOMFILTER => 'ROW', CACHE_INDEX_ON_WRITE => 'false', IN_MEMORY => 'false', CACHE_BLOOMS_ON_
    WRITE => 'false', PREFETCH_BLOCKS_ON_OPEN => 'false', COMPRESSION => 'NONE', BLOCKCACHE => 'true', BLOCKSIZE => '6553
    6'}                                                                                                                  
    3 row(s)
    Took 0.1012 seconds                

    3.2.2各种形式的创建表,常用

    1.基础建表语句,要有表名+列族名,如下在默认namespace中创建表tb1,列族名cf。同时创建一个表tb2,3个列族。注意观察两个表的表结构有啥不一样。

    1.创建一个列族的表tb1
    hbase(main):028:0>  create 'tb1','cf'
    Created table tb1
    Took 0.7221 seconds                                                                                                  
    => Hbase::Table - tb1
    hbase(main):029:0> describe 'tb1'
    Table tb1 is ENABLED                                                                                                 
    tb1                                                                                                                  
    COLUMN FAMILIES DESCRIPTION                                                                                          
    {NAME => 'cf', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIOR => 'false', KEEP_DELETED_CELLS
     => 'FALSE', CACHE_DATA_ON_WRITE => 'false', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', MIN_VERSIONS => '0', RE
    PLICATION_SCOPE => '0', BLOOMFILTER => 'ROW', CACHE_INDEX_ON_WRITE => 'false', IN_MEMORY => 'false', CACHE_BLOOMS_ON_
    WRITE => 'false', PREFETCH_BLOCKS_ON_OPEN => 'false', COMPRESSION => 'NONE', BLOCKCACHE => 'true', BLOCKSIZE => '6553
    6'}                                                                                                                  
    
    2.创建3个列族的表,tb2
    hbase(main):036:0> create 'tb2','cf1','cf2','cf3'
    Created table tb2
    hbase(main):038:0> describe 'tb2'
    Table tb2 is ENABLED                                                                                                 
    tb2                                                                                                                  
    COLUMN FAMILIES DESCRIPTION                                                                                          
    {NAME => 'cf1', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIOR => 'false', KEEP_DELETED_CELL
    S => 'FALSE', CACHE_DATA_ON_WRITE => 'false', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', MIN_VERSIONS => '0', R
    EPLICATION_SCOPE => '0', BLOOMFILTER => 'ROW', CACHE_INDEX_ON_WRITE => 'false', IN_MEMORY => 'false', CACHE_BLOOMS_ON
    _WRITE => 'false', PREFETCH_BLOCKS_ON_OPEN => 'false', COMPRESSION => 'NONE', BLOCKCACHE => 'true', BLOCKSIZE => '655
    36'}                                                                                                                 
    {NAME => 'cf2', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIOR => 'false', KEEP_DELETED_CELL
    S => 'FALSE', CACHE_DATA_ON_WRITE => 'false', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', MIN_VERSIONS => '0', R
    EPLICATION_SCOPE => '0', BLOOMFILTER => 'ROW', CACHE_INDEX_ON_WRITE => 'false', IN_MEMORY => 'false', CACHE_BLOOMS_ON
    _WRITE => 'false', PREFETCH_BLOCKS_ON_OPEN => 'false', COMPRESSION => 'NONE', BLOCKCACHE => 'true', BLOCKSIZE => '655
    36'}                                                                                                                 
    {NAME => 'cf3', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIOR => 'false', KEEP_DELETED_CELL
    S => 'FALSE', CACHE_DATA_ON_WRITE => 'false', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', MIN_VERSIONS => '0', R
    EPLICATION_SCOPE => '0', BLOOMFILTER => 'ROW', CACHE_INDEX_ON_WRITE => 'false', IN_MEMORY => 'false', CACHE_BLOOMS_ON
    _WRITE => 'false', PREFETCH_BLOCKS_ON_OPEN => 'false', COMPRESSION => 'NONE', BLOCKCACHE => 'true', BLOCKSIZE => '655
    36'}                                                                                                                 
    

    如上,我们简单建表后,describe以后我们发现,表tb1有如下默认配置属性。

    注意,Hbase表/列族属性介绍:

    1. NAME => 'cf', 列族名
    2. VERSIONS => '1',  版本数,默认数据存放一个版本,多余删除,实际生产常用参数,可以设置更多。
    3. EVICT_BLOCKS_ON_CLOSE => 'false',是否在关闭时从blockcache中取出缓存块。
    4. NEW_VERSION_BEHAVIOR => 'false',可选新版本行为,hbase2特性,与删除有关。后续讲解
    5. KEEP_DELETED_CELLS => 'FALSE',列族是否可以选择保留已删除的单元格。如果true情况下,仍然可以检索已删除的单元格。默认一般删除了就不保留了,false。具体可以参考:Apache HBase ™ Reference Guide
    6. CACHE_DATA_ON_WRITE => 'false',写入缓存数据
    7. DATA_BLOCK_ENCODING => 'NONE', 数据块block的编码方式设置,HBase目前提供了四种常用的编码方式: Prefix_Tree、 Diff 、 Fast_Diff 、Prefix。
    8. TTL => 'FOREVER', 全称time to live,列族可以以设置一个以秒为单位的 TTL 长度,一旦到了过期时间,HBase 会自动删除行。这适用于一行的所有版本——甚至是当前版本。在 HBase 中为行编码的 TTL 时间以 UTC 指定。非常常用,生产一般设置TTL,相当于数仓里的生命周期,比如一个月等,不然数据一直膨胀。具体可以参考:Apache HBase ™ Reference Guide
    9. MIN_VERSIONS => '0',如果 HBase 中的表设置了 TTL 的时候,MIN_VERSIONS 才会起作用。
    10. REPLICATION_SCOPE => '0',REPLICATION_SCOPE 是列族级别属性,其值可以是 0 或 1。值 0 表示禁用复制,而 1 表示启用复制。这个一般默认值0。关于hbase的复制可以参考这两篇文章后续详细介绍:https://clouderatemp.wpengine.com/blog/2012/07/hbase-replication-overview-2/     Apache HBase Replication: Operational Overview - Cloudera Blog
    11. BLOOMFILTER => 'ROW',布隆过滤器级别,默认行级别
    12. CACHE_INDEX_ON_WRITE => 'false',写入缓存索引
    13. IN_MEMORY => 'false',是否将列族存储在内存中,HBase 可以选择一个列族赋予更高的优先级缓存,激进缓存(表示优先级更高),IN_MEMORY 默认是false。如果设置为true,HBase 会尝试将整个列族保存在内存中,只有在需要保存是才会持久化写入磁盘。但是在运行时 HBase 会尝试将整张表加载到内存里。
    14. CACHE_BLOOMS_ON_WRITE => 'false',写入时缓存爆发
    15. PREFETCH_BLOCKS_ON_OPEN => 'false',在打开状态下预取块,默认false
    16. COMPRESSION => 'NONE', 配置数据是否压缩,以及压缩算法,如snappy等,针对列族进行配置,一张表多个列族可以不同列族不同压缩算法。
    17. BLOCKCACHE => 'true',  块缓存是否开启,默认开启,后续介绍
    18. BLOCKSIZE => '65536'}   设置HFile数据块大小(默认64kb)一般不改,即使修改也是集群层面的统一设置,很少设置单个表,单个列族的属性。

     尖叫总结:注意通过上面我们创建的3个列族的tb2表我们可以看出,如上表的属性都是针对列族的,所有的操作属性都是列族级别的。我们可以针对列族设置,也可以使用默认值。

    2.指定列族属性创建表。

    1.创建表使用NAME属性值指定列族名
    hbase(main):040:0>  create 't4', {NAME => 'f1'}, {NAME => 'f2'}, {NAME => 'f3'}
    hbase(main):040:0>  create 't4', 'f1','f2','f3'
    注意这两种创建的表结构都是一样的
    
    2.其他指定列族属性创建表
    hbase> create 't1', 'f1', 'f2', 'f3'
    hbase> create 't1', {NAME => 'f1', VERSIONS => 1, TTL => 2592000, BLOCKCACHE => true}
    hbase> create 't1', {NAME => 'f1', CONFIGURATION => {'hbase.hstore.blockingStoreFiles' => '10'}}
    hbase> create 't1', {NAME => 'f1', IS_MOB => true, MOB_THRESHOLD => 1000000, MOB_COMPACT_PARTITION_POLICY => 'weekly'}
    

    其实列族的属性有很多,上面是默认的,可以通过创建表时指定很多属性,比如预分区。具体参考hbase官网Apache HBase ™ Reference Guide

    hbase> create 'ns1:t1', 'f1', SPLITS => ['10', '20', '30', '40']
    hbase(main):047:0> describe  'tb12'
    Table tb12 is ENABLED                                                                                                
    tb12                                                                                                                 
    COLUMN FAMILIES DESCRIPTION                                                                                          
    {NAME => 'f1', VERSIONS => '1', EVICT_BLOCKS_ON_CLOSE => 'false', NEW_VERSION_BEHAVIOR => 'false', KEEP_DELETED_CELLS
     => 'FALSE', CACHE_DATA_ON_WRITE => 'false', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', MIN_VERSIONS => '0', RE
    PLICATION_SCOPE => '0', BLOOMFILTER => 'ROW', CACHE_INDEX_ON_WRITE => 'false', IN_MEMORY => 'false', CACHE_BLOOMS_ON_
    WRITE => 'false', PREFETCH_BLOCKS_ON_OPEN => 'false', COMPRESSION => 'NONE', BLOCKCACHE => 'true', BLOCKSIZE => '6553
    6'}                                                                                                                  
    1 row(s)
    Took 0.0152 seconds           
    hbase> create 't1', 'f1', SPLITS_FILE => 'splits.txt', OWNER => 'johndoe'
    hbase> create 't1', {NAME => 'f1', VERSIONS => 5}, METADATA => { 'mykey' => 'myvalue' }
    hbase> # Optionally pre-split the table into NUMREGIONS, using
    hbase> # SPLITALGO ("HexStringSplit", "UniformSplit" or classname)
    hbase> create 't1', 'f1', {NUMREGIONS => 15, SPLITALGO => 'HexStringSplit'}
    hbase> create 't1', 'f1', {NUMREGIONS => 15, SPLITALGO => 'HexStringSplit', REGION_REPLICATION => 2, CONFIGURATION => {'hbase.hregion.scan.loadColumnFamiliesOnDemand' => 'true'}}
    hbase> create 't1', {NAME => 'f1', DFS_REPLICATION => 1}

    展开全文
  • HBase的介绍 表结构 常用命令

    万次阅读 2018-08-05 20:50:52
    HBase表结构: 这些名词的具体含义如下: 1、Row Key 与nosql数据库们一样,row key是用来检索记录的主键。访问hbase table中的行,只有三种方式: 通过单个row key访问 通过row key的range 全表扫描 Row ...
  • Phoenix是构建在HBase之上的关系型数据库层,作为内嵌的客户端JDBC驱动用以对HBase中的数据进行低延迟访问Phoenix会将用户编写的sql查询编译为一系列的scan操作,最终产生通用的JDBC结果集返回给客户端Phoenix可以...
  • 先将服务启动hbase自带了shell命令行,我们使用下在hbase目录下执行bin/hbase有很多说明进入客户端bin/hbase shell有个提示:如果shell要删除命令,需要按住ctrl+backspace键查看帮助信息helpstatus: 提供HBase的...
  • 最近某应用反馈HBase数据插入数据后、查询出现错误数据现象如下:有一行数据:前面时间T1:插入3列后面时间T2:插入1列(通过put新值来更新某列数据)scan操作只能看到 时间点T1的3列数据,get操作只能看到时间点T2的1...
  • HBase Shell提供了大量的操作HBase命令,通过Shell命令可以很方便地操作HBase数据库,例如创建、删除及修改、向中添加数据、列出中的相关信息等操作。不过当使用Shell命令行操作HBase时,首先需要进入HBase ...
  • HBase与Hive的对比Hive数据仓库Hive的本质其实就相当于将HDFS中已经存储的文件在Mysql中做了一个双射关系,以方便使用HQL去管理查询。用于数据分析、清洗Hive适用于离线的数据分析和清洗,延迟较高。基于HDFS、...
  • HBase是Google Bigtable的开源实现,它利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为协同服务。 1.... HBase表结构 HBase以表的形式存储
  • HBase表结构设计

    2021-02-05 20:07:23
    文章目录命名空间概念语法列簇设计版本设计数据压缩压缩算法查看表数据压缩方式设置数据压缩ROWKEY设计原则HBase官方的设计原则避免数据热点 命名空间 概念 在HBase有很多张表,这些需要按照业务划分开,为方便...
  • Hbase常用操作命令

    千次阅读 2021-05-19 18:22:21
    Hbase常用操作命令(1)进入hbase shell(2)创建、查看、删除命名空间(3)创建、查看、删除以及使有效和无效(4)添加、获取、删除单元格添中的数据(5)修改结构(6)退出Hbase shell(7)查看Hbase集群...
  • HBase常用命令

    2019-05-20 13:47:03
    HBase常用命令 1,查询数据状态(status) hbase(main):017:0>...2,查看名字空间以及名字空间下的(list_namespace 、 list_namespace_tables) hbase(main):018:0> list_namespace ...
  • 本帖最后由 pig2 于 2014-3-13 01:57 编辑为了查看HBASE表在HDFS中的文件结构.在HBASE中建立一张表结构如下:{NAME => 'USER_TEST_TABLE',MEMSTORE_FLUSHSIZE => '67108864',MAX_FILESIZE => '1073741824',...
  • HBase概念与常用命令

    2022-01-12 14:42:10
    数据存储在一张中,有行有列,但底层无力存储结构(K-V)看,HBase更像一个multi-dimensional map 1)Name Space 命名空间,每个命名空间下有多个Hbase有两个自带的命名空间:hbase、default ...
  • HBase表结构设计

    2020-09-11 15:20:43
    文章目录HBase表结构设计1 名称空间1.1 说明1.2 语法2 列蔟设计3 版本设计4 数据压缩4.1 压缩算法4.2 查看表数据压缩方式4.3 设置数据压缩5 ROWKEY设计原则5.1 HBase官方的设计原则1. 避免使用递增行键/时序数据2....
  • HBase表的数据结构

    2020-09-24 18:31:35
    转换成HBase数据库的表结构就如下所示 info score Row_key info:name ,info:age ,info:sex score:name, score:score //创建表和列族// create 'school','info','score' //==创建列族中的列和...
  • hbase shell命令

    千次阅读 2022-04-20 00:08:42
    文章目录1、查询类1.1 查看表结构1.2 命名空间1.3 查看所有表1.4 扫描表(scan)1.5 获取行或单元数据(get)2、统计表数据行数3、删除表其他查看状态查看帮助查看版本 1、查询类 1.1 查看表结构 describe ‘表名’...
  • 一、HBase表的基本结构 1.概述:  平时常见的MySQL、Oracle数据库都是传统型关系数据库,它们都是按行查询、按行存储;而HBase为非关系型数据库,它是按列存储的的。  在HBase插入数据时,先输入数据的格式为...
  • Hbase的基本操作命令

    2021-11-24 00:39:20
    4、查看命名空间下的 list_namespace_tables 命名空间 5、创建namespace(命名空间) create_namespace 'test' 6、删除namespace(命名空间),删除空间前,要先把空间内的全部删除 drop_namespace 'test' 7...
  • 两篇讲的不错文章 http://www.cnblogs.com/nexiyi/p/hbase_shell.html ...hbase操做hbase web操作 hbase shell 基本操作 1建表 具体命令
  • 查看HBase表在HDFS中的文件结构

    千次阅读 2020-12-20 00:52:05
    HBASE中建立一张表结构如下:{NAME=>'USER_TEST_TABLE',MEMSTORE_FLUSHSIZE=>'67108864',MAX_FILESIZE=>'1073741824',FAMILIES=>[{NAME=>'info',BLOOMFILTER=>'NONE',REPLICATION_SCOPE=>'0',...
  • HBase的操作命令

    2022-06-12 19:00:08
    HBase基本命令
  • Hbase操作命令

    万次阅读 2018-01-22 10:59:19
    Hbase操作命令 查看表 :list 查询表行数:count 'staff' 查看表是否存在:exists 'member' 判断表是否enable:is_enabled 'member' ...查看表结构:desc 'staff' 查看表中某个列族里某个属性: sca
  • Hbase shell终端操作之库操作 【注】本课程文章为笔者2016年期间为北京某高校硕士班编写的Hbase实验课程,现分享至此,供大家学习。 【实验目的】 学会启动hbase shell 学会查看帮助 学会创建、删除、...
  • Hbase命令

    千次阅读 2021-12-22 19:58:30
    本文主要是Hbase相关知识
  • HBase shell命令

    千次阅读 2022-04-23 11:01:17
    目录 打错命令,按ctrl+Backspace ...12.查看表结构 13.更新指定字段的数据 14.查看指定行的数据 15.查看指定列族的列的数据 16.查看行数 17.删除某 rowkey 行键的全部数据: 18.删除某 rowkey 的某一列数据:

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 23,266
精华内容 9,306
关键字:

hbase查看表结构命令

友情链接: Staff-management-system.zip