HBase – Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用 HBase 技术可在廉价 PC Server 上搭建起大规模结构化存储集群。
本章内容:
1) Hbase 简介
2) Hbase 数据模型
3) Hbase 基础原理
4) Hbase 系统架构
5) Hbase 基础操作
1. Hbase 简介
HBase 是 Apache Hadoop 中的一个子项目,Hbase 依托于 Hadoop 的 HDFS 作为最基本存储基础单元,通过使用hadoop的DFS工具就可以看到这些这些数据存储文件夹的结构,还可以通过 Map/Reduce 的框架(算法)对 HBase 进行操作。
上图描述了 Hadoop EcoSystem 中的各层系统,其中 HBase 位于结构化存储层,Hadoop HDFS 为 HBase 提供了高可靠性的底层存储支持,Hadoop MapReduce 为HBase提供了高性能的计算能力,Zookeeper为HBase提供了稳定服务和failover机制。
Hbase 适用场景:
1) 大数据量存储,大数据量高并发操作
2) 需要对数据随机读写操作
3) 读写访问均是非常简单的操作
Hbase 与 HDFS 对比:
两者都具有良好的容错性和扩展性,都可以扩展到成百上千个节点;
HDFS 适合批处理场景,但不支持数据随机查找,不适合增量数据处理,不支持数
据更新
2. Hbase 数据 模型
HBase 以表的形式存储数据。表由行和列族组成。列划分为若干个列族(row family),其逻辑视图如下:
几个关键概念:
1) 行键(RowKey)
行键是字节数组, 任何字符串都可以作为行键;
表中的行根据行键进行排序,数据按照 Row key 的字节序(byte order)排序存储;
所有对表的访问都要通过行键 (单个RowKey访问,或RowKey范围访问,或全表扫描)
2) 列族(ColumnFamily)
CF 必须在表定义时给出
每个 CF可以有一个或多个列成员(ColumnQualifier),列成员不需要在表定义时给出,新的列族成员可以随后按需、动态加入
数据按CF分开存储,HBase所谓的列式存储就是根据CF分开存储(每个CF对应一个 Store),这种设计非常适合于数据分析的情形
3) 时间戳(TimeStamp)
每个 Cell 可能又多个版本,它们之间用时间戳区分
4) 单元格(Cell)
Cell 由行键,列族:限定符,时间戳唯一决定
Cell 中的数据是没有类型的,全部以字节码形式存储
5) 区域(Region)
HBase 自动把表水平(按 Row)划分成多个区域(region),每个 region 会保存一个表里面某段连续的数据;
每个表一开始只有一个 region,随着数据不断插入表,region 不断增大,当增大到一个阀值的时候,region 就会等分会两个新的 region;
当 table 中的行不断增多,就会有越来越多的 region。这样一张完整的表被保存在多个 Region 上。
Region虽然是分布式存储的最小单元,但并不是存储的最小单元。Region由一个或者多个Store组成,每个store保存一个columns family;每个Strore又由一个 memStore 和 0 至多个 StoreFile 组成,StoreFile 包含 HFile;memStore 存储在内存中,StoreFile 存储在 HDFS 上。
3. Hbase 架构 及 基本组件
从上图看到 HBase 的基本组件:
1) Client:
包含访问HBase的接口,并维护cache来加快对HBase的访问,比如region的位置信息。
2) Master
为 Region server 分配 region
负责 Region server 的负载均衡
发现失效的 Region server 并重新分配其上的region
管理用户对 table 的增删改查操作
3) Region Server
Regionserver 维护 region,处理对这些 region 的 IO 请求
Regionserver 负责切分在运行过程中变得过大的 region
4) Zookeeper 作用
通过选举,保证任何时候,集群中只有一个Master,Master与RegionServers启动时会向 ZooKeeper 注册
存储所有 Region 的寻址入口
实时监控 Region server 的上线和下线信息,并实时通知给 Master
存储 HBase 的 schema 和 table 元数据
默认情况下,HBase 管理 ZooKeeper 实例,比如, 启动或者停止ZooKeeper
Zookeeper 的引入使得 Master 不再是单点故障
4. Hbase 容错 与 恢复
每个HRegionServer中都有一个HLog对象,HLog是一个实现Write Ahead Log的类,在每次用户操作写入 MemStore 的同时,也会写一份数据到 HLog 文件中(HLog 文件格式见后续),HLog 文件定期会滚动出新的,并删除旧的文件(已持久化到 StoreFile 中的数据)。当 HRegionServer 意外终止后,HMaster会通过 Zookeeper感知到,HMaster首先会处理遗留的 HLog 文件,将其中不同 Region 的 Log 数据进行拆分,分别放到相应region的目录下,然后再将失效的region重新分配,领取到这些region的HRegionServer在 Load Region 的过程中,会发现有历史 HLog 需要处理,因此会 Replay HLog 中的数据到 MemStore 中,然后 flush 到 StoreFiles,完成数据恢复
Hbase 容错性:
1) Master 容错:Zookeeper 重新选择一个新的 Master
无 Master 过程中,数据读取仍照常进行;
无 master 过程中,region 切分、负载均衡等无法进行;
2) RegionServer 容错:定时向 Zookeeper汇报心跳,如果一旦时间内未出现心跳,Master 将该 RegionServer 上的 Region 重新分配到其他 RegionServer 上,失效服务器上“预写”日志由主服务器进行分割并派送给新的 RegionServer
3) Zookeeper容错:Zookeeper是一个可靠地服务,一般配置3或5个Zookeeper实例
Region 定位流程:
寻找 RegionServer 过程:ZooKeeper--> -ROOT-(单 Region)--> .META.--> 用户表
1) -ROOT-
表包含.META.表所在的 region 列表,该表只会有一个 Region;
Zookeeper 中记录了-ROOT-表的 location。
2) .META.
表包含所有的用户空间 region 列表,以及 RegionServer 的服务器地址。
5. Hbase 基础操作
1) 进入 hbase shell console
$HBASE_HOME/bin/hbase shell
表的管理:
2) 查看有哪些表
list
3) 创建表
# 语法:create