Hbase 基础 (待完善)
1.什么是HBase?
HBase是Apache Hadoop的数据库,能够对大型数据提供随机、实时的读写访问。
HBase的目标是存储并处理大型的数据。
HBase是一个开源的,分布式的,多版本的,面向列的存储模型。它存储的是松散型数据。
2.HBase 特性
1高可靠性
2 高效性
3 面向列
4 可伸缩
5 可在廉价PC Server搭建大规模结构化存储集群
HBase是Google BigTable的开源实现,其相互对应如下:
Google HBase
文件存储系统 GFS HDFS
海量数据处理 MapReduce Hadoop MapReduce
协同服务管理 Chubby Zookeeper
HBase关系图:
HBase位于结构化存储层,围绕HBase,各部件对HBase的支持情况:
Hadoop部件 作用
HDFS 高可靠的底层存储支持
MapReduce 高性能的计算能力
Zookeeper 稳定服务和failover机制
Pig&Hive 高层语言支持,便于数据统计
Sqoop 提供RDBMS数据导入,便于传统数据库向HBase迁移
访问HBase的接口
方式 特点 场合
Native Java API 最常规和高效 Hadoop MapReduce Job并行处理HBase表数据
HBase Shell 最简单接口 HBase管理使用
Thrift Gateway 利用Thrift序列化支持多种语言 异构系统在线访问HBase表数据
Rest Gateway 解除语言限制 Rest风格Http API访问
PigPig Latin六十编程语言处理数据 数据统计
Hive 简单,SqlLike
hbase 数据模型
关系型数据库表 (以一个网上订单为例)
HBase表
两种表的关系
组成部件说明:
Row Key: Table主键 行键Table中记录按照Row
Key排序
Timestamp: 每次对数据操作对应的时间戳,也即数据的version number
Column Family: 列簇,一个table在水平方向有一个或者多个列簇,列簇可由任意多个Column组成,
列簇支持动态扩展,无须预定义数量及类型,二进制存储,用户需自行进行类型转换
hbase 数据存储
Table&Region
1. Table随着记录增多不断变大,会自动分裂成多份Splits,成为Regions
2. 一个region由[startkey,endkey)表示
3. 不同region会被Master分配给相应的RegionServer进行管理
文件按rowkey 分布在 不同的region 上 (分块)
在region 上,不同列簇的的分布在不同的hfile上(分簇)
hfile 每一条数据(列成员)存储结构 kv:
key: rowkey + 列簇+列成员+时间戳
value :字段值
如何查找一条数据
---两张特殊表:-ROOT- & .META.
.META. 记录用户表的Region信息,同时,.META.也可以有多个region
-ROOT-
记录.META.表的Region信息,但是,-ROOT-只有一个region
Zookeeper中记录了-ROOT-表的location
客户端访问数据的流程:
Client -> Zookeeper -> -ROOT- -> .META. ->用户数据表
多次网络操作,不过client端有cache缓存
HBase 系统架构图
HLog
HLog(WAL log):WAL意为write ahead log,用来做灾难恢复使用,HLog记录数据的所有变更,一旦region server 宕机,就可以从log中进行恢复。
HLog文件就是一个普通的Hadoop Sequence File, Sequence File的value是key时HLogKey对象,其中记录了写入数据的归属信息,除了table和region名字外,还同时包括sequence number和timestamp,timestamp是写入时间,sequence number的起始值为0,或者是最近一次存入文件系统中的sequence number。 Sequence File的value是HBase的KeyValue对象,即对应HFile中的KeyValue。