1.HBase简介
HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群。HBase利用Hadoop HDFS作为其文件存储系统,利用Hadoop MapReduce来处理HBase中的海量数据,利用Zookeeper作为协调工具。
2.基础知识
2.1数据模型
- HBASE中的每一张表,就是所谓的BigTable。稀疏表。
- RowKey 和 ColumnKey 是二进制值byte[],按字典顺序排序;
- Timestamp 是一个 64 位整数,时间戳,每次数据操作对应的时间戳,可以看作是数据的version number;
- value 是一个未解释的字节数组byte[]。
- Column Family:列簇,Table在水平方向有一个或者多个Column Family组成,一个Column Family中可以有任意多个Column组成,即Column Family支持动态扩展,无需预先定义Column的数量以及类型,所有Column均以二进制格式存储,用户需要自行进行类型转换。
逻辑数据模型
物理数据模型
2.1.1行
- 字符串、整数、二进制串甚至串行化的结构都可以作为行键。
图中Row Key 是行键。 - 表按照行键的“逐字节排序”顺序对行进行有序化处理。
行的顺序也就是说按照行键的字典序进行排序的,可能是有这样的情况,
row-1
row-10
row-2
row-20 - 表内数据非常‘稀疏’,不同的行的列的数完全目可以大不相同
- 可以只对一行上“锁”
- 对行的写操作是始终是“原子”的
2.1.2列
- 列必须用‘族’(family)来定义。
- 任意一列有如下形式,
“族:标签”
其中,族和标签都可为任意形式的串。
图中,cnnsi.com和my.look.ca就是标签 - 物理上将同“族”数据存储在一起
- 数据可通过时间戳区分版本
2.2物理存储
2.2.1Region
每个column family存储在HDFS上的一个单独文件中,空值不会被保存。Key 和 Version number在每个 column family中均有一份;
HBase 为每个值维护了多级索引,即:
<key, column family, column name, timestamp>
- Table中所有行都按照row key的字典序排列;
- Table在行的方向上分割为多个Region;
- Region按大小分割的,每个表开始只有一个region,随着数据增多,region不断增大,当增大到一个阀值的时候,region就会等分会两个新的region,之后会有越来越多的region;
- Region是Hbase中分布式存储和负载均衡的最小单元,不同Region分布到不同RegionServer上。
2.2.2Store
Region虽然是分布式存储的最小单元,但并不是存储的最小单元。Region由一个或者多个Store组成,每个store保存一个columns family;每个Strore又由一个memStore和0至多个StoreFile组成,StoreFile包含HFile;memStore存储在内存中,StoreFile存储在HDFS上。
2.3HBase架构及基本组件
Hbase基本组件说明:
- Client
包含访问HBase的接口,并维护cache来加快对HBase的访问,比如region的位置信息 - Master
- 为Region server分配region
- 负责Region server的负载均衡
- 发现失效的Region server并重新分配其上的region
- 管理用户对table的增删改查操作
Region Server
- Regionserver维护region,处理对这些region的IO请求
- Regionserver负责切分在运行过程中变得过大的region
Zookeeper
- 通过选举,保证任何时候,集群中只有一个master,Master与RegionServers 启动时会向ZooKeeper注册
- 存贮所有Region的寻址入口
- 实时监控Region server的上线和下线信息。并实时通知给Master
- 存储HBase的schema和table元数据
- 默认情况下,HBase 管理ZooKeeper 实例,比如, 启动或者停止ZooKeeper
- Zookeeper的引入使得Master不再是单点故障
HBase中有两张特殊的Table,-ROOT-和.META.
- .META.,记录了用户表的Region信息,.META.可以有多个regoin;
- -ROOT-,记录了.META.表的Region信息,-ROOT-只有一个region
Zookeeper中记录了-ROOT-表的location;
Client访问用户数据之前需要首先访问zookeeper,然后访问-ROOT-表,接着访问.META.表,最后才能找到用户数据的位置去访问