大数据之HBase入门

Posted Mr.zhou_Zxy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了大数据之HBase入门相关的知识,希望对你有一定的参考价值。

HBase从入门到精通

1.HBase介绍

分布式的数据库,它的本质是将数据存放在HDFS。它和Hive的最大区别就是,Hive的本质相当于封装了Mapreduce,HBase的本质相当于封装了HDFS。帮助我们存储一些非结构化的数据。他是一个Nosql的数据库。

使用场景:

1.海量非结构化或者结构化的数据的存储

2.需要实现近实时的读写管理的数据

2.HBase结构

在这里插入图片描述

1.client:hbase的客户端,使用shell命令或者API向HBase发出请求,并且客户端其实会缓存region的位置。
2.zookeeper:监控hmaster的状态,如果active的挂了,通知backup的master上位,存储所有region的寻址入口,监控regionserver的状态,并且通知hmaster,存储部分hbase的元数据
3.hmaster:为所有的hregionserver分配region,为regionserver做负载均衡,负责region的裂变,负责hdfs中的垃圾回收
4.regionserver:维护hmaster分配给他们的region,处理client发过来的读写请求,具体来执行负责切过大的region。
5.hlog:对hbase的读写操作,WAL的写数据保证数据安全
6.region:hbase中分布式存储的最小单位和负载均衡的最小单位,它表示表或者表的一部分
7.store:列簇
8.memstore:缓冲区,数据的写入先写入到缓冲区,然后再溢出到hdfs,默认128M
9.storefile:和hfile是同一种含义,不过storefile是逻辑上的名称,hfile是物理上的名称

3.HBase命令

3.1 基础命令

  • help
  • help ‘create_namespace’
  • status
  • version
  • whoami

3.2 namespace(库操作)

  • create_namespace(创建一个命名空间)

    类型1:create_namespace 'zxy'
    类型2:create_namespace 'zxy',{'hbasename'=>'hadoop'}
    
  • list_namespace(列举当前有多少namespace)

    类型1:list_namespace              (显示全部namespace)
    类型2:list_namespace 'zx*'        (显示以zx开头的namespace)
    
  • describe_namespace(查看指定namespace的详情)

    describe_namespace 'zxy'
    
  • list_namespace_tables(查看指定namespace中的所有table)

    list_namespace_tables 'zxy'
    
  • drop_namespace(删除指定的namespace)

    drop_namespace 'zxy'
    
  • alter_namespace(修改namespace的属性)

    类型1:alter_namespace 'zxy',{METHOD=>'set','PROPERTY_NAME'=>'PROPERTY_VALUE'}
    (添加,修改)
    类型2:alter_namespace 'zxy',{METHOD=>'unset',NAME='PROPERTY_NAME'}
    (删除)
    

3.3DDL(表操作)

  • 建表(create)

    类型1:create 'zxy:q1',{NAME=>'f1',VERSIONS=>5}
    (表名为q1,列簇为f1,可以保存5个版本数据)
    类型2:create 'q2', {NAME => 'f1'}, {NAME => 'f2'}, {NAME => 'f3'}
    (同时创建多个列簇)
    类型3:create 't1', 'f1', 'f2', 'f3'
    (同上)
    类型4: create 't1', {NAME => 'f1', VERSIONS => 1, TTL => 2592000, BLOCKCACHE => true}
    (表示在默认namespace下创建t1表且列簇为f1,只能保存1个版本数据,表存活时间(TTL:Time to Live)259200毫秒,并且开启块缓存)
    类型5:create 't1', {NAME => 'f1', CONFIGURATION => {'hbase.hstore.blockingStoreFiles' => '10'}} 
    (在建表的同时指定hbase的相关的配置信息)
    
  • 删表

    • distable

      disable 'zxy:q1'
      is_disabled 'zxy:q1'
      
    • enable

      enable 'zxy:q1'
      is_enabled 'zxy:q1'
      
    • drop

      只有当表的is_disabled 'zxy:q1'true时才可以删除
      hbase(main):079:0> drop 'q1'
      ERROR: Table t1 is enabled. Disable it first.
      
      hbase(main):081:0> disable 'q1'
      0 row(s) in 2.2460 seconds
      
      hbase(main):090:0> drop 'q1'
      0 row(s) in 1.2540 seconds
      
  • 查看表(list)

    list 'zxy:.*'
    
  • 查看表详情(desc/describe)

    desc/describe命令:
    
    hbase(main):097:0> describe 'zxy:q1'
    Table ns1:t1 is ENABLED
    ns1:t1
    COLUMN FAMILIES DESCRIPTION
    {NAME => 'f1', BLOOMFILTER => 'ROW', VERSIONS => '5', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FAL
    SE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOC
    KCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'}
    1 row(s) in 0.0200 seconds
    
  • 修改表(alter)

    类型1:alter 'zxy:q1',NAME=>'f1',VERSSIONS=>1
    (修改列簇的版本信息)
    类型2:alter 'zxy:q1',NAME=>'f1',{NAME=>'f2',IN_MEMORY=>true},{NAME=>'f3',VERSIONS=>5}
    (同时修改多个列簇,如果指定列簇不存在就添加,存在就修改)
    类型3:alter 'zxy:q1','f1','f2','f3'
    (使用默认属性,直接声明)
    类型4:alter 'zxy:q1',NAME='f1',METHOD=>'delete'
    类型4:alter 'zxy:q1','delete'=>'f1'
    (删除列簇)
    
  • 表是否存在(exists)

    exists 'zxy:q1'
    

3.4 DML(表数据操作)

  • 插入(put)

    put 'zxy:q1','r1','f1:name','zxy'
    (在表q1中插入一条数据)
    
  • 获取(get)

    类型1:get 'zxy:q1','r1'
    (显示r1行的数据)
            hbase(main):015:0> get 'zxy:q1', 'r1'
            COLUMN                     CELL
             f1:name                   timestamp=1621240902844, value=zxy
            1 row(s) in 0.0200 seconds
    
            ## 默认查看最新的时间的值
            hbase(main):018:0> get 'zxy:q1', 'r1'
            COLUMN                     CELL
             f1:name                   timestamp=1621241107495, value=zxy2
            1 row(s) in 0.0080 seconds
    类型2:get 'zxy:q1', 'r1', {TIMERANGE => [1621240902844, 1621241107494]}
    (查看指定范围时间的数据值)
    类型3:get 'zxy:q1','r1',{COLUMN=>['f1','f2','f3']}
    (查看一个表中多个指定的列簇信息)
    类型4:get 'zxy:q1','r1',{COLUMN=>'f1',TIMESTAMP=>1621241107495}
    (查看1621241107495瞬间的值)
    
  • 查看(scan)

    类型1:scan 'zxy:q1'
    (查询指定表的数据)
    类型2:scan 'zxy:q1',{COLUMNS=>'f1:name'}
    (查询q1表中所有的有name属性的数据)
    类型3:scan 'zxy:q1',{COLUMNS=>['f1'],LIMIT=>2,STARTROW=>'r1'}
    (查询q1表中的列簇f1,一共查询两行,从r1行开始,同一行的意思是行键相同)
    类型4:scan 'zxy:q1',{COLUMNS=>'f1',TIMESTAMP=>[1621240902844, 1621241107494]}
    (查看指定时间范围内的表中所有的最新值)
    
  • 追加数据(append)

    append 'zxy:q1','r1','f1:name','zxy3'
    (zxy3即为追加值)
    
  • 删除(delete)

    类型1:delete 'zxy:q1','r1','f1:name'
    (删除一个kv数据)
    类型2:delete 'zxy:q1','r1'
    (删除一行)
    类型3:delete 'zxy:q1','r1','f1:name','zxy'
    (删除指定版本-时间戳)
    
  • 自增(incr)

    incr 'zxy:q1','001','f1:age'
    (在age设置自增键)
    
  • 行数(count)

    count 'zxy:q1'
    (q1表的行数)
    
  • 截断(truncate)

    truncate 'zxy:q1'
    

    在这里插入图片描述

以上是关于大数据之HBase入门的主要内容,如果未能解决你的问题,请参考以下文章

大数据技术之HBaseHBase简介HBase快速入门HBase进阶

大数据技术之HBaseHBase简介HBase快速入门HBase进阶

大数据之HBase入门

大数据-05-Spark之读写HBase数据

智谷大数据伴您学系列之十二——HBase

大数据学习系列之二 ----- HBase环境搭建(单机)