参考链接 : 官方指导文档
文章目录
- 一、HBase定义
- 二、HBase的逻辑和物理结构
- 三、HBase中各名词及作用
- 四、HBase架构角色
一、HBase定义
HBase是Hadoop的数据库
特点:分布式,可伸缩的, 面向列存储,基于HDFS
支持:十亿行键,百万列的数据存储
基于:Google’s Bigtable论文
在回过头来,看看Hive,是data warehouse(数据仓库),现在知道数据仓库和数据库的区别了吧。
二、HBase的逻辑和物理结构
1、逻辑结构
2、物理结构
是以<key,value>形式存储
三、HBase中各名词及作用
NameSpace:命名空间 是表的逻辑分组
类似于关系型数据库中的数据库
有两个namespace:HBase(内部用)和 default(用户用)
【可以去HDFS上看一下】
进入default,就可以看到我们创建的表了
Region:
类似于关系型数据库中的表,不同的是HBase中定义表的时候要定义列族,不需要声明具体的列Row:行键
HBase中没个数据都由一个RowKey和多个列组成,数据按照RowKey的字典顺,查询时只能根据RowKey
进行检索,所以RowKey的设计十分重要,尽量短一些不要超过16个位(设计不好,会发生热点问题——一方有难,八方围观,官方推荐采用加盐、散列、翻转key等方式)
ColumnFamily:列簇/族
相当于列的集合,但不适宜过多创建
实际上,所有列族成员都一起存储在文件系统上。由于调整和存储规范是在列族级别上完成的,
因此建议所有列族成员具有相同的常规访问模式和大小特征。
建议设计列簇名的时候就是一个字符,官方推荐:
Column:列
HBase中每一个列都由Column Family和Column Qulifier(列限定符 :)进行限定
TimeStamp:时间戳
用于标注数据不同版本(version),每条数据写入时,如果不指定时间戳,系统会自动写入,系统采用反向时间戳的方式,使得我们读取的数据永远是最新的,除非加入versions.
Cell:
一个由[行键,列,版本]组成的元组,没有类型,全部是字节码形式存储
四、HBase架构角色
1、RegionServer
RegionServer是Server的管理者,其实现类为HRegionServer,主要功能如下:
- 对于数据的操作:get、put、delete
- 对于Region的操作:splitRegion、compactRegion
2、Master
Master是所有RegionServer的管理者,其实现类为HMaster,主要功能如下:
- 对于表的操作:create、insert、alter
- 对于RegionServer的操作:分配Region到每个RegionServer上,监控每个RegionServer的状态,负载均衡和故障转移
3、Zookeeper
HBase通过Zookeeper来做master的高可用,RegionServer的监控,元数据的入口以及集群配置的维护等工作
【分析过程】
首先, HBase依赖于Hadoop,和Zookeeper
其次,HBase中最重要的两个组件:HMaster 和 HRegionServer。一般由HMaster 开启 并管理HRegionServer
然后,HLog:相当于HDFS中的editlog,(写入日志),一个HRegionServer对应一个HLog,为什么不是一个HRegion对应一个HLog,是为了减少存储压力
接着,一个HRegionServer中可以有多个HRegion,HRegion相当于MySQL中的表,但是当数据过多时,也会被切分成多个表
继续,一个HRegion中可以包含一个或多个Store(列簇)—>对应HDFS上的一个列簇一个文件夹
最后,Store中存储Mem Store(内存)和StoreFile(磁盘),我们进行写入操作时,为了提高写入效率,HBase会先写到Mem Store中,当Mem Store过大时,会自动进行flush,每flush一次,就会生成一个StoreFile文件(包含HFile:以<k,v>形式存储,HFile是真正存储数据的地方,大小非常小,所以HFile会经常合并,合并成大文件之后又会被切分)
【注意:Mem Store进行 flush之后,会向HDFS客户端发送写请求,然后由DataNode进行文件的写入,所以说StoreFile 在DataNode上】