HBase介绍及基本操作

HBase介绍及基本操作


Hadoop使用分布式文件系统,用于存储大数据,并使用MapReduce来处理。Hadoop擅长于存储各种格式的庞大的数据,任意的格式甚至非结构化的处理。

Hadoop的限制

Hadoop只能执行批量处理,并且只以顺序方式访问数据。这意味着必须搜索整个数据集,即使是最简单的搜索工作。

当处理结果在另一个庞大的数据集,也是按顺序处理一个巨大的数据集。在这一点上,一个新的解决方案,需要访问数据中的任何点(随机访问)单元。

Hadoop随机存取数据库

应用程序,如HBase, Cassandra, couchDB, Dynamo 和 MongoDB 都是一些存储大量数据和以随机方式访问数据的数据库。

总结:

(1)海量数据量存储成为瓶颈,单台机器无法负载大量数据

(2)单台机器 IO 读写请求成为海量数据存储时候高并发大规模请求的瓶颈

(3)随着数据规模越来越大,大量业务场景开始考虑数据存储横向水平扩展,使得存储服 务可以增加/删除,而目前的关系型数据库更专注于一台机器

HBase是什么?

HBase是建立在Hadoop文件系统之上的分布式面向列的数据库。它是一个开源项目,是横向扩展的。

HBase是一个数据模型,类似于谷歌的大表设计,可以提供快速随机访问海量结构化数据。它利用了Hadoop的文件系统(HDFS)提供的容错能力。

它是Hadoop的生态系统,提供对数据的随机实时读/写访问,是Hadoop文件系统的一部分。

人们可以直接或通过HBase的存储HDFS数据。使用HBase在HDFS读取消费/随机访问数据。 HBase在Hadoop的文件系统之上,并提供了读写访问。

HBase 是 BigTable 的开源(源码使用 Java 编写)版本。是 Apache Hadoop 的数据库,是建 立在 HDFS 之上,被设计用来提供高可靠性、高性能、列存储、可伸缩、多版本的 NoSQL 的分布式数据存储系统,实现对大型数据的实时、随机的读写访问。

HBase 依赖于 HDFS 做底层的数据存储,BigTable 依赖 Google GFS 做数据存储

HBase 依赖于 MapReduce 做数据计算,BigTable 依赖 Google MapReduce 做数据计算

HBase 依赖于 ZooKeeper 做服务协调,BigTable 依赖 Google Chubby 做服务协调

HBase NoSQL 数据库的特点

① 它介于 NoSQL 和 RDBMS 之间,仅能通过主键(rowkey)和主键的 range 来检索数据

② HBase 查询数据功能很简单,不支持 join 等复杂操作

③ 不支持复杂的事务,只支持行级事务(可通过 hive 支持来实现多表 join 等复杂操作)。

④ HBase 中支持的数据类型:byte[](底层所有数据的存储都是字节数组)

⑤ 主要用来存储结构化和半结构化的松散数据。

HBase 中的表特点

1、大:一个表可以有上十亿行,上百万列

2、面向列:面向列(族)的存储和权限控制,列(簇)独立检索。

3、稀疏:对于为空(null)的列,并不占用存储空间,因此,表可以设计的非常稀疏。

4、无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态的增加,同一 张表中不同的行可以有截然不同的列

HBase基本操作

  • 登录hbase shell 客户端
$ hbase shell
Java HotSpot(TM) 64-Bit Server VM warning: Using incremental CMS is deprecated and will likely be removed in a future release
HBase Shell
Use "help" to get list of supported commands.
Use "exit" to quit this interactive shell.
Version 2.0.0-cdh6.0.0, rUnknown, Fri Aug 17 16:31:39 PDT 2018
Took 0.0033 seconds                                           
  • 使用help命令
hbase(main):015:0* help 'list'
List all user tables in hbase. Optional regular expression parameter could
be used to filter the output. Examples:

  hbase> list
  hbase> list 'abc.*'
  hbase> list 'ns:abc.*'
  hbase> list 'ns:.*'

  • 查看所有表
list
list "p.*"     # 支持正则
  • 创建表
 create 't1', {NAME => 'f1'}, {NAME => 'f2'}, {NAME => 'f3'}
 其中t1是表名,f1,f2,f3是列簇的名
 
 create 't1','f1'  # 简写    create 'zxl_hb','infos'
  • 查看表的详细信息desc
desc 'zxl_hb'

hbase(main):010:0> desc 'zxl_hb'
\Table zxl_hb is ENABLED                                                                                                                                                                    
zxl_hb                                                                                                                                                                                     
COLUMN FAMILIES DESCRIPTION                                                                                                                                                                
{NAME => 'infos', 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', REPLICATION_SCOPE => '0', BLOOMFILTER => 'ROW', CACHE_INDEX_ON_WRITE => 'false', IN_MEMORY => 'false', CACHE_BLOOMS_ON_WRITE => 'false', PR
EFETCH_BLOCKS_ON_OPEN => 'false', COMPRESSION => 'NONE', BLOCKCACHE => 'true', BLOCKSIZE => '65536'}                                                                                       
1 row(s)
Took 0.1801 seconds 
  • 增 put
put 't1', 'r1', 'c1', 'value'   

put 'zxl_hb','001','infos:name','zxl'     # 表名 rowkey 列族名:列名 值
put 'zxl_hb','001','infos:age',18
put 'zxl_hb','001','infos:gender',1
  • 查 get/scan

    • 查看全表数据
    scan 'zxl_hb'
    
    hbase(main):016:0> scan 'zxl_hb'
    ROW                                             COLUMN+CELL                                                                                                                                
     001                                            column=infos:name, timestamp=1555399487219, value=zxl                                                                                      
     002                                            column=infos:name, timestamp=1555400259807, value=z2                                                                                       
     003                                            column=infos:name, timestamp=1555400268776, value=z3                                                                                       
    3 row(s)
    Took 0.0454 seconds                                 
    
    • 查看某个rowkey范围内的数据 (左闭右开)
    scan 'zxl_hb',{STARTROW => '001',STOPROW => '003'}
    
    hbase(main):017:0> scan 'zxl_hb',{STARTROW => '001',STOPROW => '003'}
    ROW                                             COLUMN+CELL                                                                                                                                
     001                                            column=infos:name, timestamp=1555399487219, value=zxl                                                                                      
     002                                            column=infos:name, timestamp=1555400259807, value=z2                                                                                       
    2 row(s)
    Took 0.0294 seconds 
    
    • 查看指定行的数据
    get 'zxl_hb','001'
    
    hbase(main):018:0> get 'zxl_hb','001'
    COLUMN                                          CELL                                                                                                                                       
     infos:name                                     timestamp=1555399487219, value=zxl                                                                                                         
    1 row(s)
    Took 0.0516 seconds  
    
    • 查看指定行指定列或列族的数据
    get 'zxl_hb','001','infos:name'
    
    hbase(main):027:0* get 'zxl_hb','001'
    COLUMN                                          CELL                                                                                                                                       
     infos:name                                     timestamp=1555399487219, value=zxl                                                                                                         
    1 row(s)
    Took 0.0164 seconds 
    
    
    get 'zxl_hb','001','infos'
    
    hbase(main):028:0> get 'zxl_hb','001','infos'
    COLUMN                                          CELL                                                                                                                                       
     infos:name                                     timestamp=1555399487219, value=zxl                                                                                                         
    1 row(s)
    Took 0.0157 seconds 
    
  • 删 delete

    • 删除某一个rowKey全部的数据
    deleteall 'zxl_hb','003'
    
    hbase(main):030:0> deleteall 'zxl_hb','003'
    Took 0.0460 seconds 
    
    • 删除掉某个rowKey中某一列的数据
    delete 'zxl_hb','001','infos:gender'
    
    • 清空表数据
    truncate 'zxl_hb'
    
    • 删除表
    首先需要先让该表为disable状态,使用命令:disable 'student'
    然后才能drop这个表,使用命令:drop 'student'
    
    • put直接修改值
    put 'zxl_hb','001','infos:age',19
    
    
    
  • 根据rowkey去重统计行数

count 'zxl_hb'

hbase(main):037:0> count 'zxl_hb'
2 row(s)
Took 0.0284 seconds                                                                                                                                                                        
=> 2
  • 判断表是否存在
exists 'zxl_hb'

hbase(main):042:0> exists 'zxl_hb'
Table zxl_hb does exist                                                                                                                                                                    
Took 0.0264 seconds                                                                                                                                                                        
=> true
  • 查看表启用或禁用状态
is_enabled 'zxl_hb'
hbase(main):043:0> is_enabled 'zxl_hb'
true                                                                                                                                                                                       
Took 0.0061 seconds                                                                                                                                                                        
=> true


is_disabled 'zxl_hb'
hbase(main):044:0> is_disabled 'zxl_hb'
false                                                                                                                                                                                      
Took 0.0127 seconds                                                                                                                                                                        
=> 1

Shylin

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值