Hbase简介

HBase是一个开源的非关系型分布式数据库(NoSQL),它参考了谷歌的BigTable建模,实现的编程语言为 Java。它是Apache软件基金会的Hadoop项目的一部分,运行于HDFS文件系统之上,为 Hadoop 提供类似于BigTable 规模的服务。因此,它可以容错地存储海量稀疏的数据。

HBase在列上实现了BigTable论文提到的压缩算法、内存操作和布隆过滤器。HBase的表能够作为MapReduce任务的输入和输出,可以通过Java API来访问数据,也可以通过REST、Avro或者Thrift的API来访问。

虽然最近性能有了显著的提升,HBase 还不能直接取代SQL数据库。如今,它已经应用于多个数据驱动型网站,包括 Facebook的消息平台。

Hbase列族

图片1.png

Hbase Regions

  • 自动水平分区

  • row的子集

  • 第一行(include),最后一行(exclude)

  • 每张表至少一个region

  • 增长到阀值时,切割成两个相同的region

  • row update是原子性的

Hbase架构

图片1.png

Hbase构成

  • Hbase master(1)

    • 负责初始安装

    • 指定region到regionserver

    • 恢复故障的rs

    • 轻负载

  • Hbase ReginServer(n)

    • 携带0~n个region

    • 负责客户端rw请求。

    • 管理region split

    • 通知master新的子region

    • 管理offline的父代region以及对其的替换。

  • Hbase依赖于zk

  • 默认HBase管理ZK

    • start/stop
  • HMaster和HRS在zk中进行注册

  • 依赖ZooKeeper

  • rs服务器列在conf/regionservers文件中

  • 集群配制conf/hbase-site.xml和hbase-env.sh

  • Hbase可以在local,也可以在hdfs上存储数据

图片2.png

Hbase操作

  • hbase:meta

    • 内部表

    • 存放集群中all user-space region的当前列表、状态和位置

    • 条目构成:表名,起始行,创建时间.md5哈希值

    TestTable,xyz,1279729913622.1b6e176fb8d8aa88fd4ab6bc80247ece.

    md5哈希值是对前三项的计算。

    region变化是同步更新该表。

    • 连接到zk集群的connection首先感知hbase:meta表,定位用户的区域和位置,之后再和rs交互。

    • 为节省保存每行时hbase所做的3次轮询,缓存row启动和停止位置,client使用缓存的数据直到出错,此时client会再访问meta表。如果meta中的数据被删除,就会重新访问zk。

    • 写操作先追加到提交log,然后进入内存,内存充满再写入filesystem。

    • 提交日志位于hdfs上,当master发现故障的rs不可达时,就会按区域分离故障rs的提交日志,故障rs的区域挑选出分离的故障日志并重做到故障前的状态。

    • 读操作时,先访问内存库,如果版本足够,操作即完成,否则依次访问清理文件,从最新到最老,知道版本满足条件。

Hbase数据模型

  • 基于Google的bigtable模型(key-value对)

图片3.png

Hbase逻辑视图

图片4.png

Hbase key和列族

QQ截图20170429225518.png

图片5.png

  • key

    • 字节数组

    • 表主键用于快速查找

  • 列族

    • 有名称

    • 包含若干列

    • 属于某个列族

    • 包含在row内

  • 版本号

    • key内唯一

    • 默认系统时间戳

    • long型

  • value(cell)

    • byte[]

Hbase数据模型注意事项

  • Hbase schema由表构成

  • 表由列族构成

  • 列不是schema的部分

  • cell可有动态列

  • 列名编码在cell内部

  • 版本号可以由用户提供

    • 甚至可以不以增序插入

    • 在key内唯一

  • 表可以很松散

    • 有很多空cell
  • key作为主键进行索引

Hbase物理模型

  • 每个列族存储在单独的文件中(HTable)

  • Key和版本号会随着每个列族进行复制

  • 空cell不存储

图片6.png

图片7.png

图片8.png

Hbase-列族

  • 不同的列可有不用的属性和访问模式

  • 列族是可配置的

    • 压缩(None,gzip,LZO)

    • 版本保留策略

    • 缓存优先级

  • 在磁盘上CF(列族)被单独存储,访问其中的一个,其他不需要浪费IO

Hbase-Region

  • 每张HTable(列族)被水平进行了分区,形成Region

    • Region区域和hdfs的block相对应

图片9.png

Hbase与HDFS比较

  • 都是分布式系统,都可以扩展到成百上千的节点

  • HDFS擅长扫描大文件

  • HDFS不擅长记录查询

  • HDFS不擅长小批量递增

  • HDFS不擅长更新

  • HBase为高效寻址而设计

  • HBase查找记录更快

  • HBase支持记录级别的插入

  • HBase支持更新

  • HBase的更新是通过创建数据的新版本完成的

图片12.png

Hbase与RDBMS比较

图片13.png

Hbase使用场景

  • 随机写、随机读、兼而有之

  • 在TB级数据上每秒做上千次操作

  • 访问模式是大家熟知的并是简单的