Hbase分布式非关系型数据库

版权声明:该版权归博主个人所有,在非商用的前提下可自由使用,转载请注明出处. https://blog.csdn.net/qq_24696571/article/details/86500520

HBase操作命令
HBase预分区

HBase架构

  • HBase是基于HDFS的,是实时的 , 分布式的(高可靠性,高性能) , 可伸缩的(横向扩展) , 高维的非关系型数据库 .
  • mysql等关系型数据库是面向于行的 , 关系型数据库有3大优点: 容易理解 , 使用方便 , 易于维护 . 但也有三大缺点: 高并发读写需求(磁盘IO是一个很大的瓶颈 , 很难承受高访问) , 海量数据的读写性能低 , 扩展性和可用性差 .
  • 关系型数据库,导致性能欠佳的最主要原因是多表的关联查询 , 以及复杂的多表关联查询 .
  • HBase 非关系型数据库时面向于列的 , 非关系型数据库还有redis , MongoDB等 .
  • HBase利用MapReduce来处理海量数据, 利用Zookeeper来作分布式协同服务 Hbase和Zookeeper具有强依赖关系(没有不行).
  • 数据库依据不同的应用场合, 可以分为几类: 高性能并发读写的键值对数据库: Redis , Tokyo , Cabinet , Flare , 面向海量数据访问的面向文档数据库: MongoDB , CouchDB . 面向可扩展性的分布式数据库: HBase
  • 严谨的银行系统适合用关系型数据库, 微博,视频等实时,高并发的业务系统适合用非关系型数据库
    在这里插入图片描述
  • HRegionServer , HRegion , Store(1-2) , StoreFile到达阈值后都会进行等分裂变

HBase预分区

在HBase创建的一般表 , 一张表只有一个region , 所有添加的数据都只向一个region中进行操作 , 当这个region过大就会产生split裂变 . split裂变会带来资源损耗 , 预分区用多个region来一起承受数据的添加 , 就可以减少spilit裂变操作的产生 .
标的预分区要结合业务场景来选择合适的分区的key值区间 , 预分区不同的region都有各自的startKey和endKey , 左壁右开 , 作为单一region数据存储的区间范围 .

  • 创建预分区表:
    create 'yfq','cf1',SPLITS => ['10','20','30']
  • yfq:表名 __ cf1:列族___按[]中的值分为了以下4个区
  • 值得注意的是,区间划分不是对比int类型,而是对比String类型,例如rowkey的值:00101,取开头2位,它将被划分在第一个分区 .
    在这里插入图片描述

HBase操作命令

  • 进入hbase数据库:hbase shell,shell6中回删按键:ctrl+backspace
  • 帮助文档:help
  • 查看表list
  • 创建表
  • 创建带列族的表
  • 创建一张名为t1,列族是cf1的表:create 't1' , 'cf1'
  • 往表中添加数据put '[表名]','[rowkey]','[列族]:[字段名]','[值]',
    例子:put ‘t1’,‘00101’,‘cf1:name’,'zhangsan’
  • 创建带列族和版本的表
  • 创建一张名为t2,列族为cf1,带5个版本的表create 't2',{NAME => 'cf1', VERSIONS => 5}
  • 查询表内容

1.scan,对全表进行扫描,慎用,数据量越多处理速度越慢

scan '[表名]',例子:scan 't1’
查询特定版本的内容:scan 't2',{RAW=>true,VERSIONS=>10}

  1. get

get '[表名]','[rowkey]','[列族:字段名]',例子:get ‘t1’,‘00101’,‘cf1:name’

  • 删除表
  • 删除表需要首先屏蔽表,disabled [表名]
  • 删除该表drop [表名]

猜你喜欢

转载自blog.csdn.net/qq_24696571/article/details/86500520