测试中的H.S.G,BASE是前面H 这个S 什么车意思

Hbase的原型是google的BigTable论文收到了该论文思想的启发,目前作为hadoop的子项目来开发维护用于支持结构化的数据存储。

Hbase是一个高可靠性(存储在hdfs上有副本机制),高性能面向列,非关系型的数据库(类似redis)可伸缩的分布式存储系统(因为是存储在hdfs上),利用hbase技术可在廉价PC server上搭建大规模结构化的数据库存储集群

Hbase的目标是存储并处理大型的数据,更具体来说仅需使用普通的硬件就能够处理由成千上万行和列所组成的大型数据。

Hbase是基于hdfs构建的分咘式存储框架但是Hbase在hdfs上实现随机的读写改,解决了hdfs不支持的东西

这里的列式存储其实说的是列族存储Hbase是根据列族来存储数据的,列族丅面可以有非常多的列列族在创建表的时候必须指定

Hbase中的列和mysql的列不是一个东西,Hbase的列就是他的数据

Hbase的扩展性主要体现在两个方面一個是基于上层的梳理能力的扩展(RegionServer,相当于datanode处理读写请求),一个是基于存储的扩展(hdfs)

通过横向添加RegionServer的机器进行水平扩展,提升Hbase上層的处理能力提升Hbase服务更多的Region的能力。

备注:RegionServer的作用是管理Region)(类似mysql中的表的概念)承接客户端的读写请求的访问,这个后面会详细嘚介绍通过横向添加datanode的机器进行存储层的扩容,提升Bhbase的存储能力和提升后端存储的读写能力

稀疏主要是针对于hbase列的灵活性在列族中,伱可以指定任意多的列在列数据为空的情况下,是不会占用存储空间的这里和mysql等数据库不一样,mysql如果每个字段没有值那这个字段的徝为null,不为空且会占用存储空间

Hbase的架构示意图如下

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

通过zk来保证集群中只有一个master在运行如果master异常,会通过竞争机制产生新的master提供服务

通过zk存储元数据的统一入口地址;

维护集群的负载均衡就是分配Region

HRegionServer直接对接用户的读写请求,是真正的干活的节点他的功能概括如下

处理来自客户端的读写请求

负责和底层hdfs的交互,存储数據到hdfs中

负责Region变大后的拆分

Hdfs为hbase提供最终的底层数据存储服务

提供元数据和表数据的底层分布式存储服务

数据的多副本保证高可靠和高可用

┅个HRegionServer中只有一个Hlog,Hlog相当于hdfs中的edits文件保存Hbase的修改记录,当对Hbase写数据的时候数据不是直接写进磁盘,他会在内存中保留一段时间(时间i将數据量的阈值可以设定)但把数据保存在内存中可能有更高的概率引起数据丢失,为了解决这个问题数据会先写在一个叫做Hlog的文件中,Hlog存储在磁盘上也位于hdfs上,然后在写入内存所以在系统出现故障或者内存丢失的时候,数据可以通过这个日志文件进行重建

Region相当于mysql中嘚表一个HRegionServer可以有多个Region,一个HRegionServer会有多个Region;如果表的数据太大会进行拆分,按照数据量平均切分所有HBase中的一张表会对应一个或者多个Region,當表的内容很小一张表就对应一个Region,如果表很大的话则这个Region会切分,切分Region会同时拆分这个Region的所有Store

Store相当于列族,通俗的讲就是列的家族在hbase中,想创建一个列必须要指定列族,也就是一个列必须属于某个列族一个表中可以有多个列族,一个store对应一个列族hbase官方不建議多个列族,一个列族就可以搞上百个列足够用了。但是如果一个HRegion被切分的话是切分列族,所以就算一个HRegion只有一个列表切分后一个Region吔会对应多个Store,多个strore会被分配到其他的HRegionServer节点进行存储

MemStore就是列族中的数据放在内存中写数据来了,会写到内存中只要内存写入成功,则僦返回

StoreFile,数据放在内存不安全而且有大小限制,所以需要把内存中的数据写到磁盘中以Hfile的格式存储在hdfs上。每次memstore刷一次形成一个storefile,所以storefile会很多但是很小,因为内存本身就不大后面storeFile也会合并,但是这个合并也仅仅是一个列族内部的StoreFile进行合并不会跨列族合并的

这是磁盘上保存的原始数据的实际的物理文件,是实际的存储文件storefile是以Hfile的形式存储在hdfs中

4、 解压,修改配置文件

这里重点说下修改配置文件湔面的就不说了,因为我在实际使用过程中使用ambari工具来进行安装

Zk存储数据的父目录主要是为了区分多个hbase集群

但是在ambari安装的hbase的配置文件中沒有找到相应的配置,但是在hbase启动的时候有加载hdfs的环境变量

2、查看当前有哪些表:list

6、扫描查看数据指定起始和截止Rowkey,前闭后开

8、查看指萣行的指定列

重点关注列族和版本即可这里的版本是个数的意思,就一条数据存储几个版本

11、修改列族的版本信息

可以查看到有多个版夲这里的意思查看3个版本的数据,所以有三条下面的命令是查看2个版本的数据,所以有两条

删除某个Rowkey的指定列可以看到其他列的数據还在,删除还可以指定时间戳该时间戳之前的数据都会被删除

删除Rowkey对应的所有数据

统计条数,Rowkey有几个条数就有几条

命令空间,相当於数据库中的database

所有的表都是命名空间的成员如果不指定,则默认在default的命名空间中

命名空间可以设置权限比如定义访问控制列表,例如創建表读取表,删除更新操作,权限用的很少

Hbase就是存储元数据的命名空间是系统自己用的,不能给用户使用

四、Hbase的数据结构

Rowkey是用来檢索记录的主键访问Hbase table中的行,只有三种方式

设计Rowkey非常重要也是Hbase里最重要的一门学问数据会按照Rowkey的字典序排序进行存储,所以设计Rowkey要利鼡这个特性把经常一起读取的行存储在一起,学习HbaseRowkey设计是学习的重点

列族,Hbase表中的每个列都会属于某个列族,列族是表的结构的一蔀分列族在建表的时候必须要指定。列名都是以列族做为前缀

在创建表的时候需要指定列族,列族可以指定多个

时间戳每个cell都保存著同一份数据的多个版本,版本通过时间戳来索引时间戳可以由系统生成,也可以自己指定每个cell中,不同版本的数据按照时间倒序排列即最新的数据在最前面

通过时间戳不同来确定版本的

Hbase的写比读还快

1、读流程,hmaster没有关系hmaster挂掉后,不影响读流程

a、先获取meta表的位置吔就元数据这张表存储的位置

b、meta表所在位置获取meta表的信息,meta表存储的内容大致入下

c、然后在去对应的regionserver获取对应的数据

d、获取数据先去內存中获取,如果内存中没有到blockcache中获取,如果blockcash没有则去磁盘获取,这里为前面H 这个S 什么车先去内存获取数据

e、返回数据的时候,先紦数据写到blockcache中然后在返回给client

Zk上查看meta表的存储位置

2、写流程,和Hmaster没有关系

e、去对应的regionserver开始执行写操作先写Hlog文件,然后写到memstore成功后,立刻返回写入流程完成

因为先写到内存中,那么前面H 这个S 什么车时候会刷到硬盘中呢

b、满足一个小时的条件会刷memstore到硬盘中

这样就会有很哆小文件刷到hdfs中,但是hdfs不适合存储很多的小文件

超过3storefile文件会进行合并

这个是合并一个列族的的storefile,不同列族的storefile文件不会进行合并的

我要回帖

更多关于 G和H和S的关系 的文章

 

随机推荐