数据存储-Hbase基础

2018-10-20  本文已影响0人  neo_ng

Outline

什么是Hbase

HBase(Hadoop Database)是一种构建在HDFS之上的分布式、面向列(列族)的存储系统;源自Google发表于的Bigtable论文。HBase是Google Bigtable的克隆版,与Google Bigtable 利用GFS作为其文件存储系统类

BigTable发明的原因

搜索是一种定位你所关心信息的行为


hbase_search

为什么需要Hbase?

hdfs和hbase各自使用场景

Hbase是Hadoop平台下的数据存储引擎,是一个非关系型数据库--NoSQL数据库


image

HDFS不支持随机读写操作

Hbase和关系型数据库的比较

hbase_vs_RDBMS hbase_table

Hbase的特点

优点
缺点

不支持SQL,不支持跨行跨表事务,不支持二级索引,而且读时延大。它不能用在OLTP(On-Line Transaction Processing联机事务处理过程)业务,比如支付业务的核心流程,但适合存放历史数据,处理历史数据的对账、历史数据的回溯等需求。

Hbase表的基础概念

hbase_concept
概念名称 解释
Table(表) 类似于传统数据库中的表
Column Family(列簇) Table在水平方向有一个或者多个Column
Row Key(行健) Table的主键;Table中的记录按照Row Key排序
Region 一定范围的数据访问和存储;HBase数据管理的基本单位
Timestamp(时间戳) 每一行数据均对应一个时间戳;也可以当做版本号。

Hbase的架构和基本概念

Hbase是由Client、Zookeeper、Master、HRegionServer、HDFS等几个组建组成,架构图如下:


hbase_arch
基本概念
概念 功能
Client 包含了访问Hbase的接口,并维护cache
Zookeeper Hmaster的高可用、RegionServer的监控、元数据的入口以及集群配置的维护等
Hmaster Hmaster的高可用、RegionServer的监控、元数据的入口以及集群配置的维护等
Hlog 每个HRegionServer中都会有一个HLog的实例,存储在HDFS上
HregionServer HregionServer直接对接用户的读写请求,是真正的“干活”的节点,每个RegionServer为一定数量的region服务
Hregion Hbase中分布式存储和负载均衡的最小单元,会split,包含多个Store
Store Store = MemStore+StoreFile(>=1个)
MemStore 内存,对应一个列族,KV
StoreFile StoreFile包含一个或多个HFile,以二进制流的形式存储在HDFS上
HFile block组成
HDFS 为Hbase提供最终的底层数据存储服务,同时为Hbase提供高可用的支持

HFile由很多个数据块(Block)组成,并且有一个固定的结尾块。其中的数据块是由一个Header和多个Key-Value的键值对组成。在结尾的数据块中包含了数据相关的索引信息,系统也是通过结尾的索引信息找到HFile中的数据。

Hbase的存储机制

Hbase的读写操作

Hbase写操作
image

HBase写数据流程
1,Client先访问zookeeper,从meta表获取相应region信息,然后找到meta表的数据
2,根据namespace、表名和rowkey根据meta表的数据找到写入数据对应的Hregion信息
3,找到对应的regionserver
4,把数据分别写到HLog和MemStore上一份
4,MemStore达到一个阈值后则把数据刷成一个StoreFile文件。(若MemStore中的数据有丢失,则可以总HLog上恢复)
5,当多个StoreFile文件达到一定的大小后,会触发Compact合并操作,合并为一个StoreFile,(这里同时进行版本的合并和数据删除。)
6,当Storefile大小超过一定阈值后,会把当前的Region分割为两个(Split),并由Hmaster分配到相应的HRegionServer,实现负载均衡

Hlog

Hlog是Hbase实现WAL(Write ahead log,预写日志)方式产生的日志信息
当RegionServer出现故障的时候,需要对Hlog进行回放来恢复数据。
保证数据的高可用!!

Hbase读操作

1,Client先访问zookeeper,从meta表读取region的位置,然后读取meta表中的数据。meta中又存储了用户表的region信息。
2,根据namespace、表名和rowkey在meta表中找到对应的region信息
3,找到这个region对应的regionserver
4,查找对应的region
5,先从MemStore找数据,如果没有,再到StoreFile上读(为了读取的效率)。

谁在使用Hbase
hbase_who_use

参考资料

Hbase技术详细学习笔记
《HBase实战》
Hadoop相关知识整理系列之一:HBase基本架构及原理

上一篇下一篇

猜你喜欢

热点阅读