HBase-1 HBASE基本概念

HBase概念

Hbase是基于HDFS的数据库,主要用来提供海量数据的存储实时随机访问

HBase的特点

很多HBase的特点都是由列式存储和底层基于HDFS引申出来的

  • 海量存储
    • 数据最终存储在HDFS上,可以存储大量数据
  • 列式存储
    • HBase的表基于列式存储
  • 支持数据多版本
  • 数据类型单一
    • 所有在Hbase中存储的数据,都是以字节数组方式存储的
  • 存储空间易扩展
    • 底层依赖HDFS,存储空间不够,动态增加datanode即可
  • 支持高并发随机读写(很复杂,在这不详述)
    • 通过跳跃表LSM(log sturcture tree)布隆过滤器实现快速随机读写
      • 跳跃表:LSM在内存中的实现,多层顺序链表。牺牲空间来实现快速查找。
      • LSM:哈希表的存储实现,在磁盘中使用,通过索引堆管理哈希表的集合。
      • 布隆过滤器:通过hash算法来实现存储和查找,每个block块中都有一个,占据空间小。通过布隆过滤器,可以快速判断出关键字可能存在当前空间一定不存在当前空间。通过筛选掉一定不存在的空间,来实现加速查找。
  • 节省空间
    • 列式存储,可以指定任意多的列,列数据为空的情况下不存储数据,节省空间

HBase表的数据模型

在这里插入图片描述

rowkey行键

  • table的主键,rowkey可以是任意字符串(最终以字符数组存储),rowkey具有唯一性,表中不能有相同的rowkey
  • rowkey的大小:一般大小为10-100bytes。太小容易造成前缀重复,太大浪费空间。最大长度是64KB

Column Family列族

  • 列族数量:一个HBase表至少有一个列族,一般一个HBase表有两个列族。列族数量没有限制,官网建议1-3个
  • 经常一起操作的列放在一个列族:一般讲经常一起操作的列,即从某种角度具有相关性的列放到一个列族,可以加快读取速度
  • 列族数量和region中store数量的对应关系:有多少个列族就有多少个store,即列族数量和store数量是1:1的

列族不宜过多的原因

由于HBase的flushCompact机制,HBase的列族不宜过多。
简单来说有三点:

  • region分裂后查询效率可能下降
  • 更耗内存
  • 频繁IO

在 Hbase 的表中,每个列族对应 Region 中的一个Store,Region的大小达到阈值时会分裂,因此如果表中有多个列族,则可能出现以下现象:

  1. 一个Region中有多个Store,如果每个CF的数据量分布不均匀时,比如CF1为100万,CF2为1万,则 Region分裂时导致CF2在每个Region中的数据量太少,查询CF2时会横跨多个Region导致效率降低。

  2. 如果每个CF的数据分布均匀,比如CF1有50万,CF2有50万,CF3有50万,则Region分裂时导致每个CF 在Region的数据量偏少,查询某个CF时会导致横跨多个Region的概率增大。

  3. 多个CF代表有多个Store,也就是说有多个MemStore,也就导致内存的消耗量增大,使用效率下降。

  4. Region 中的 缓存刷新 和 压缩 是基本操作,即一个CF出现缓存刷新或压缩操作,其它CF也会同时做一样的操作,当列族太多时就会导致IO频繁的问题。

Column列

  • 一列必然属于某个列族

Cell单元格

  • cell中的数据没有类型,最终以字节数组进行存储
  • 通过rowkey+列族+列 可以确定一个cell
  • 通过rowkey+列族+列+timestamp 可以确定一个cell的某一个版本的值

TimeStamp时间戳

  • 同一个cell可以多次赋值,即有多个版本。timestamp可以看成是cell的版本号(version)
  • HBase0.96之前version数量为3,HBase0.96之后默认值是1

HBase和Hive的区别

Hive

  • 本质:hive本质上是个数仓工具。将已经在HDFS中存储的表文件和存储在MySQL上的元数据文件做双射关系,方便HQL查询管理。

  • 用途:用于数据分析、清洗。适用于离线的数据分析和清洗,延迟较高

  • 存储和执行:基于HDFS存储,默认使用MapReduce引擎

    Hive存储的数据依旧在DataNode上,存储可能是textfile orc等格式。编写的HQL语句终将是转换为MapReduce代码执行。

HBase

  • 本质:HBase本质是一个面向列存储的非关系型数据库

  • 用途:用于存储结构化和非结构话的数据。

    • 读写延迟低,适用于接入在线业务使用,单表可以存储大量数据(如上亿甚至十几亿的数据)
    • 适用于单表非关系型数据的存储。
    • 不适合做关联查询,类似JOIN等操作。
  • 存储:基于HDFS存储。数据持久化存储的体现形式是Hfile,存放于DataNode中,被ResionServerregion的形式进行管理。

总结:Hive与HBase

  • Hive和Hbase是两种基于Hadoop的不同技术,Hive是一种类SQL的引擎,并且运行MapReduce任务
  • Hbase是一种在Hadoop之上的NoSQL 的Key/vale数据库
  • 这两种工具是可以同时使用的。Hive可以用来进行统计查询,HBase可以用来进行实时查询,数据也可以从Hive写到HBase,或者从HBase写回Hive。

HBase架构

在这里插入图片描述

HBase是一种主从架构

Client客户端

  • Client是操作HBase集群的入口
    • 对于管理类的操作,如表的增、删、改操纵,Client通过RPC与HMaster通信完成 DDL
    • 对于表数据的读写操作,Client通过RPC与RegionServer交互,读写数据 DML
  • Client类型操作HBase的方式:
    • HBase shell(快速测试的时候用比较高效)
    • Java编程接口(用的多)
    • Thrift、Avro、Rest等等(使用的少)

ZooKeeper集群

  • 作用
    • 实现了HMaster的高可用,多HMaster间进行主备选举

    • 保存了HBase的元数据信息meta表的元数据信息(默认保存在ZK的/Hbase/meta-region-server中),从而间接提供了HBase表中region的寻址入口的线索数据
      在这里插入图片描述

    • 对HMaster和HRegionServer实现了监控

HMaster

  • HBase集群也是主从架构,HMaster是主的角色
  • 主要负责Table表和Region的相关管理工作:
  • 关于Table
    • 管理Client对Table的增删改的操作
    • 关于Region
      • 在Region分裂后,负责新Region分配到指定的HRegionServer上
      • 管理HRegionServer间的负载均衡,迁移region分布
      • 当HRegionServer宕机后,负责其上的region的迁移

HRegionServer

  • HBase集群中从的角色
  • 作用
    • 响应客户端的读写数据请求
    • 负责管理一系列的Region
    • 切分在运行过程中变大的region

Region

  • HBase集群中分布式存储的最小单元
  • 一个Region对应一个Table表的部分数据
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值