一、Hbase简介
1、 bigtale:主要是满足互联网搜索引擎的基本需求、用于网页搜索、用于谷歌非常多的项目中,包括搜索,地图,财经,打印等、还有一些社交网站,博客网站等。分布式存储系统(bigtale):基于谷歌分布式文件系统 GFS 完成存储,利用 Chubby 做协同管理。
2、 Hbase:分布式数据库,可以存储非结构化和半结构化的松散数据。水平扩展的方式,允许几千台服务器去存储海量文件。Hbase产生原因:HDFS和MapReduce,hadoop主要解决大规模离线数据批量处理,没有办法满足大数据实时处理需求。
3、 Hbase和传统关系型数据库的区别?
数据类型:传统的关系型数据库用的是非常经典的关系数据模型。Hbase数据存储为字符串。
数据操作:
存储模型:Hbase基于列存储。传统的关系型数据库基于行存储。
数据索引:Hbase只支持对行键的索引。
数据维护:Hbase不会删除数据旧的版本,关系型数据库在某些数据操作下会覆盖旧的数据。
可伸缩性:Hbase借助分布式集群存储数据,关系型数据库很难实现水平扩展,最多可以实现纵向扩展(单核变双核,双核变四核)。
二、Hbase的数据模型
Hbase:列族,一个列族包含多个列,支持动态扩展。
时间戳:新的版本会通过时间戳来进行区分。
Hbase定位:采用四维坐标定位,必须确定:行键、列族、列限定符(列名)、时间戳。
列式存储:按一个列去存储,可以带来很高的数据压缩率,行式存储不可能达到很高的数据压缩率。
三、Hbase的实现原理
Hbase的功能组件:
1、库函数
2、master服务器:分区信息进行维护和管理、维护了一个region服务器列表、整个集群中有哪些region服务器在工作、负责对region进行分配、负载均衡。
3、region服务器:维护和管理region。
region定位:Hbase设计了三层结构进行region的定位和寻址。
1、首先构建一个元数据表(meta表),假设这个元数据表只有两列,第一列是region的id,第二列是region服务器的id;
2、Hbase最开始构建时有一个映射表,这个表被称为(.meta.)表;
3、.meta. 表用来存储元数据。
4、root 表,存储元数据表的元数据信息。zookeeper 存储 root 表的信息。
第一层:zookeeper文件,记录了 -root- 表的位置信息。
第二层:-root- 表,记录了 .meta. 表的region位置信息。一个 -root- 表只能有一个region,通过 -root- 表就可以访问 .meta. 表中的数据。
第三层:.meta. 表,记录了用户数据表的region位置信息,.meta. 表可以有多个region,保存了hbase中所有用户数据表的region位置信息。
region定位:
为了加速寻址,客户端会缓存位置信息,同时,需要解决缓存失效问题。当缓存失效时,会进行三级寻址查找数据,再加入缓存中。
四、Hbase运行机制
客户端:访问Hbase的接口,为了加快访问速度,会缓存访问数据的位置信息。
zookeeper服务器:实现协同管理服务,提供管家功能,维护和管理整个hbase集群。提供配置维护、域名服务、分布式同步服务。保证只有一个master在运行。
master服务器:对表的增删改查、负责不同region服务器的负载均衡、、负责调整分裂合并后region的分布、负责重新分配故障失效的region服务器,也要借助于master来进行重新分配。
region服务器:向HDFS文件系统中读写数据。若干个 region 公用一个 HLog 日志文件。一个storefile表示一个列族。
用户读写数据过程:
1、写入数据过程:先写入缓存memstore,写hlog日志。
2、读数据过程:先访问memstor,没有找到再去访问磁盘storefile文件,查找数据。
3、缓存刷新:系统会周期性的把缓存中的内容刷新到磁盘的storefile文件中,清空缓存,并在hlog中写入 一个标记;每次刷写都生成一个新的storefile文件,一次一个store中包含多个storefile文件。
4、storefile的合并:多个小的storefile合并成一个大的storefile。当文件合并很大后一个大的storefile再分裂成两个storefile。
5、HLog:每个 region server 有着自己的 hlog 日志文件。zookeeper 监听服务器是否故障,如果故障了就告诉master,master 将故障 region server 上的 region 分配给其他可用的 region server ,对应的日志也根据region分解到相应的region server的hlog上。
五、Hbase的应用方案
1、性能优化方法
时间靠近的数据都存在一起,时间戳,按升序排列,越到后面时间戳会越大,长整型变量64位。
2、提升读写性能
把相关表的数据放入到region server 的缓存中,根据需要来决定是否放入缓存。
3、设置最大版本数
4、构建二级索引
利用Coprocessor特性构建二级索引,主表和索引表。



