HBase

HBase的简介
HBase原型是Google的BigTable论文,从基因上讲,HBase已经是Hadoop生态系统化不可或缺的一部分
维基百科简介:HBase是一个开源的非关系型分布式数据库(NoSQL),它参考了谷歌的BigTable建模,实现的编程语言为 Java。它是Apache软件基金会的Hadoop项目的一部分,运行在HDFS文件系统之上,为 Hadoop 提供类似于BigTable 规模的服务。因此,它可以容错的存储海量稀疏的数据

HBase特点介绍
这里写图片描述

1.海量存储
HBase适合存储PB级别的海量数据,在PB级别的数据以采集廉价PC存储下,能在几十到百毫秒内返回数据。这与Hbase的极易扩展性息息相关。正式因为Hbase良好的扩展性,才为海量数据的存储提供了便利。

2.列式存储
即列族存储,HBase是根据列族存储数据的,列族下面可以有非常多的列,列族在创建表的时候就必须指定

3.极易扩展
HBase的扩展性主要体现在两个方面,一个是基于上层处理能力的扩展,一个是基于存储的的扩展(HDFS).
通过横向添加RegionServer的机器,进行水平扩展,提升HBase上层的处理能力,提升HBase服务更多Region的能力
备注:RegionServer的作用是管理region、承接业务的访问,这个后面会详细的介绍通过横向添加Datanode的机器,进行存储层扩容,提升Hbase的数据存储能力和提升后端存储的读写能力。

4.高并发
由于目前大部分使用Hbase的架构,都是采用的廉价PC,因此单个IO的延迟其实并不小,一般在几十到上百ms之间。这里说的高并发,主要是在并发的情况下,Hbase的单个IO延迟下降并不多。能获得高并发、低延迟的服务

5.稀疏
主要指针对HBase列的灵活性,在列族中,你可以任意多的列,在列数据为空的情况下,是不会占用存储空间

HBase几个概念
1.Column Family的概念
又叫列族,HBase通过列族划分数据的存储,列族下面可以包含任意的列,实现灵活的数据存取.
Hbase表的创建的时候就必须指定列族。就像关系型数据库创建的时候必须指定具体的列是一样的。

Hbase的列族不是越多越好,官方推荐的是列族最好小于或者等于3。我们使用的场景一般是1个列族。

2.Rowkey的概念
RowKey的概念和mysql的主键完全一样,HBase使用Rowkey来区分某一行的数据
由于Hbase只支持3中查询方式:
- 基于Rowkey的单行查询
- 基于Rowkey的范围扫描
- 全表扫描

3.Region的概念
Region的概念和关系型数据库的分区或分片差不多.
HBase会将一个大表的数据基于Rowkey的不同范围分配到不同的Region中,每一个负责一定范围的数据访问和存储.这样即使是一张巨大的表,由于被切割到不通的region,访问起来的时延也很低。

4.TimeStamp的概念
TimeStamp对Hbase来说至关重要,因为它是实现Hbase多版本的关键。在Hbase中使用不同的timestame来标识相同rowkey行对应的不通版本的数据。

HBase的架构
Hbase是由Client、Zookeeper、Master、HRegionServer、HDFS等几个组建组成,
client:
Client包含了访问的HBase的接口,另外Client还维护了对应的cache来加速HBase的访问

Zookeeper
HBase通过Zookeeper来做master的高可用,RegionServer的监控,元数据的入口以及集群配置的维护等工作

通过Zoopkeeper来保证集群中只有1个master在运行,如果master异常,会通过竞争机制产生新的master提供服务;
通过Zoopkeeper来监控RegionServer的状态,当RegionSevrer有异常的时候,通过回调的形式通知Master RegionServer上下限的信息;
通过Zoopkeeper存储元数据的统一入口地址;
主要用于存储Master地址、协调Master和RegionServer等上下线、存储临时数据等等。

Master: Master主要是做一些管理操作;如region的分配,手动管理操作下发等等,一般数据的读写操作并不需要经过Master集群,所以Master一般不需要很高的配置即可

HrgionServer
HrgionServer直接对用户的读写要求,是真正的干活的节点.
管理master为其分配Region
处理来自客户端请求
负责与底层HDFS交互,存储数据到HDFS
负责Region变大以后拆分
负责Storefile的合并工作

HDFS
HDFS为Hbase提供最终的底层数据存储服务,同时为Hbase提供高可用(Hlog存储在HDFS)的支持,具体功能概括如下:
提供元数据和表数据的底层分布式存储服务
数据多副本,保证的高可靠和高可用性

HBase原理
访问HBase通过HBase客户端(或API)进行,整个HBase提供给外部的地址,其实ZK的入口,ZK中保存了 -TOOT- 所在的RS的地址,从-ROOT-表可以获取.META.表信息,根据.META.表可以获取region在RS上分布,整个region寻址过程大致如下:
这里写图片描述
1.首先,client通过访问ZK来请求目标数据的地址.
2.ZK保存了-ROOT-表的地址,所以通过-ROOT-表来请求数据地址。
3.-ROOT-表中保存的是.META.的信息,通过访问.META.表来获取具体的RS。
4..META.表查询到具体RS信息后返回具体RS地址给Client。
5.Client获取到目标地址后,然后直接向该地址发送数据请求

为什么不直接把.META.表信息直接保存到ZK中?
主要是为了保存的数据量考虑,ZK中不宜保存大量数据,而.META.表 主要是保存Region和RS的映射信息,region的数量没有具体约束,只要在内存允许的范围内,region数量可以有很多,如果保存在ZK 中,ZK的压力会很大。

每次访问都需要走ZK –> -ROOT- —> .META.的流程么?
当然不需要,Client端有缓存,第一次查询到相应region所在RS后,这个信息将被缓存到Client端,以后每次访问都 直接从缓存中获取RS地址即可。当然这里有个意外:访问的region若果在RS上发生了改变,比如被balancer迁移到其他RS上了,这个时候,通 过缓存的地址访问会出现异常,在出现异常的情况下,Client需要重新走一遍上面的流程来获取新的RS地址。总体来说,region的变动只会在极少数 情况下发生,一般变动不会很大,所以在整个集群访问过程中,影响可以忽略。

Region数据写入
HBase通过ZK –> -ROOT- –>.META.的访问获取RS地址后,直接向该RS上进行数据写入操作
这里写图片描述
Client通过三层索引获取RS的地址后,即可向指定RS的对应region进行数据吸入,HBase的数据写入采用WAL(write ahead log)的形式,先写log,后数据,Hbase是一个appebd类型的数据库,没有关系型数据库那么复杂的操作,所以记录HLog的操作都是简单的 put操作(delete/update操作都被转化为put进行)

写操作流程
步骤1:Client通过Zookeeper的调度,向HRegionServer发出写数据请求,在HRegion中写数据。

步骤2:数据被写入HRegion的MemStore,直到MemStore达到预设阈值。

步骤3:MemStore中的数据被Flush成一个StoreFile。

步骤4:随着StoreFile文件的不断增多,当其数量增长到一定阈值后,触发Compact合并操作,将多个StoreFile合并成一个StoreFile,同时进行版本合并和数据删除。

步骤5:StoreFiles通过不断的Compact合并操作,逐步形成越来越大的StoreFile。

步骤6:单个StoreFile大小超过一定阈值后,触发Split操作,把当前HRegion Split成2个新的HRegion。父HRegion会下线,新Split出的2个子HRegion会被HMaster分配到相应的HRegionServer 上,使得原先1个HRegion的压力得以分流到2个HRegion上。

读操作流程
步骤1:client访问Zookeeper,查找-ROOT-表,获取.META.表信息。

步骤2:从.META.表查找,获取存放目标数据的HRegion信息,从而找到对应的HRegionServer。

步骤3:通过HRegionServer获取需要查找的数据。

步骤4:HRegionserver的内存分为MemStore和BlockCache两部分,MemStore主要用于写数据,BlockCache主要用于读数据。读请求先到MemStore中查数据,查不到就到BlockCache中查,再查不到就会到StoreFile上读,并把读的结果放入BlockCache。

HBase的过滤器 : filter
列值过滤器: SingleColumnValueFilter
查询工资的等于3000的员工
select enamel from emp where sal = 3000

列名前缀过滤器:ColumnPrefixFilter
查询所有员工的姓名
select ename from emp;
多个列名前缀过滤器:MultipleColumnPrefixFilter
查询所有员工的姓名和薪水
select ename, sal from emp

行键过滤器: 根据rowkey进行查询

组合多个过滤器: 查询工资等于3000的员工
第一个过滤器: 列值过滤器
第二个过滤器: 列名过前缀滤器

HBase的MapReduce:

//创建数据表
create 'word', 'content'
put 'word','1','content:info','I love Beijing'
put 'word','2','content:info','I love China'
put 'word','3','content:info','Beijing is the capital China'

//创建结果表
create 'stat','content'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值