HBase 之简介与基本概念

HBase 是一个构建在HDFS之上的、 可伸缩、高可靠、高性能、分布式和面向列的动态模式数据库,主要用于存储海量数据。
和传统关系数据库不同,HBase采用了BigTable的数据模型:增强的稀疏排序映射表(Key/Value),其中,键由行关键字、列关键字和时间戳构成。HBase提供了对大规模数据的随机、实时读写访问,同时,HBase中保存的数据可以使用MapReduce来处理,它将数据存储和并行计算完美地结合在一起。

HBase 数据模型:Schema-->Table-->Column Family-->Column-->RowKey-->TimeStamp-->Value

高效

随机读写转化为顺序读写 适应高并发写入
均衡效果好读写性能和机器数线性相关
节省空间

分布式

基于HDFS、Zookeeper
一致性、高可用性、分区容任性
大数据、易扩展

表特点

大:一个表可以亿级别
面向列: 面向列(族)的存储和权限控制
稀疏: 面向列(族)的存储和权限控制
数据类型单一: Hbase中的数据都是字符串,没有类型。
无模式:每行有一个主键和任意多的列,列可以根据需要动态增加,同一张表不同的行可以有截然不同的列
列族需要在创建表时定义好,不能修改频繁,数量也不能太多

Hbase VS RDMS

数据都是字符串类型
只有普通的增删改查,没有表关联查询
适合存储海量数据,查询效率高

Hbase与HDFS对比

两者都具有良好的容错性和扩展性,都可以扩展到成百上千个节点;
HDFS适合批处理场景
HDFS 不支持数据随机查找
HDFS 不适合增量数据处理
HDFS 不支持数据更新

使用场景

大数据量存储,大数据量高并发操作
需要对数据随机读写操作
读写访问均是非常简单的操作

基本概念

名词

RowKey:行键 。是Byte array,是表中每条记录的“主键”,方便快速查找,Rowkey的设计非常重要。
Column Family:列族。拥有一个名称(string),包含一个或者多个列
Column:列。属于某一个列族,familyName:columnName,每条记录可动态添加
Version Number:版本。类型为Long,默认值是系统时间戳
Value(Cell):值。Byte array

物理存储:

Table中所有行都按照row key的字典序排列;
Table在行的方向上分割为多个Region;
Region按大小分割的,每个表开始只有一个region,随着数据增多,region不断增大,当增大到一个阀值的时候,region就会等分会两个新的region,之后会有越来越多的region;
Region是Hbase中分布式存储和负载均衡的最小单元,不同Region分布到不同RegionServer上。
Region虽然是分布式存储的最小单元,但并不是存储的最小单元。Region由一个或者多个Store组成,每个store保存一个columns family;每个Strore又由一个memStore和0至多个StoreFile组成,StoreFile包含HFile;memStore存储在内存中,StoreFile存储在HDFS上。

主键

用来检索记录的主键
访问Hbase表中的行,只有三种方式
通过单个RowKey
通过RowKey的range
全表扫描
主键可以为任意字符串,64KB

容错

Master容错:Zookeeper重新选择一个新的Master,无Master过程中,数据读取仍照常进行,无master过程中,region切分、负载均衡等无法进行
RegionServer容错:定时向Zookeeper汇报心跳,如果一旦时间内未出现心跳,Master将该RegionServer上的Region重新分配到其他RegionServer上,失效服务器上“预写”日志由主服务器进行分割并派送给新的RegionServer
Zookeeper容错:Zookeeper是一个可靠地服务,一般配置3或5个Zookeeper实例

列族

每个列族在HDFS上的单独文件夹
Key和Version会在每个列族中存储
空值不会被保存

命名空间

配额管理:限制一个namespace可以使用的资源,资源包括region和table等;
命名空间安全管理:提供了另一个层面的多租户安全管理;
Region服务器组:一个命名空间或一张表,可以被固定到一组RegionServers上,从而保证了数据隔离性。

伪分布式

Hbase 架构

参考文档

Hbase基本原理、及存储知识:http://my.oschina.net/u/923508/blog/393769