Hbase学习

HBASE

简介

HBASE 是一个开源的、分布式的、非关系型的列式数据库,正如bigtable利用了谷歌文件系统提供的分布式数据存储一样,在HBASE在hadoop的hdfs之上提供了类似于Bigtable的功能

HBASE位于hadoop生态系统的结构化存储层,数据存储与分布式文件系统HDFS并且使用Zookeeper作为协调服务,HDFS为Hbase提供了高可靠性的底层存储服务,MapReduce为Hbase提供了高性能的计算能力,ZooKeeper则为Hbase提供了稳定的服务和失效恢复机制

Hbase 的设计目的是处理非常庞大的表,甚至是可以使用普通的计算机处理10亿行的、由数百万列组成的表的数据,由于Hbase依赖hadoop HDFS,因此它与Hadoop 一样,主要依靠横向扩展,并不断增加廉价的商用服务器来提高计算和存储能力

一、特点

表数据可以存储上亿行、百万列
采用面向列的存储和权限管控
为空(NULL)的列并不占用存储空间(节约资源和数据占用空间)

1、优点

容量巨大:单表支持千亿行、百万列的数据规模,数据容量达到TB甚至PB级别。传统关系型 Oracle或mysql超过亿行读写性能急剧下降。
扩展性:可对数据存储节点和读写服务节点进行扩展,数据存储节点可通过增加HDFS的 DataNode进行扩展;读写服务节点扩展可增加ReginServer实现扩展。
稀疏性:允许大量列值为空,并不占用任何存储空间。
高性能:擅长OLTP场景,数据写操作性能强劲;随机单点读以及小范围的扫描读,其性能能够 得到保证。对于大范围的扫描读可以使用MapReduce提供的API,以便实现更高效的并行扫描。
多版本:即一个KV可以同时保留多个版本,可选择最新版本或某个历史版本。
支持过期:用户只需要设置过期时间,超过TTL的数据会自动清理,无需写程序删除。
Hadoop原生支持:用户可以直接绕过HBase操作HDFS文件,高效的完成数据扫码和数据导入; 也可进行分级存储,重要的业务放到SSD、不重要的放到HDD。用户可以设置归档时间,将最 近数据放在SSD,归档数据放在HDD。

2、缺点

不支持很复杂的聚合逻辑(join、groupby),如果需要使用聚合运算,在HBase之上架设 Phoenix或Spark组件,前者主要用于小规模聚合OLTP场景,后者应用于大规模聚合的OLAP场 景。
HBase本身没有实现二级索引,不支持二级索引查找,普遍使用Phoenix提供的二级索引功能。
HBase原生不支持全局跨行失误,只支持单行事务模型。同样可通过Phoenix提供的全局事务模 型来弥补

3、OLAP VS OLAP

OLTP(On-Line Analytical Processing 联机事务处理):OLTP是传统的关系型数据库,主要应用,主要是基本的、日常的事务处理,记录即时的增、删、改、查

OLAP(On-Line Transaction Processing 联机分析处理):支持复杂的分析操作,侧重决策支 持,并且提供直观易懂的查询结果

在这里插入图片描述

二、基本结构

组成结构如下

1.表 ( table)

在Hbase中,数据存储在表中,表名是一个字符串,表由行和列组成,与关系型的数据库(RDBMS)不同,Hbase表是多位映射的

2.行(row)

Hbase中的行由行键rowkey和一个或者多个column组成,行键没有数据类型,总是为视为字节数组byte[]。行键类似于关系型数据库(RDBMS)中的主键索引,在整个Hbase表中是唯一的,但是与RDBMS不同的是,行家按照字母顺序排序。例如,表中已有三条行键为1000001、100002、和1000004的数据,当插入一条行键为1000003的数据时,该条数据不会拍在最后,而是排在行键1000002和1000004的中间,因此行键的设计非常重要,我们可以利用行键的这个特性将相关的数据排列在一起,例如建网站的域名最为行键的前缀,则应该将域名进行反转存储(例如 org.apache.www、org.apache.mail、org.apache.jira),这样所有的Apache域名将在表中排列在一起,而不是分散列

3、列族(column family)

Hbase列族由多个列组成,相当于列进行分组,列的数量没有限制,一个列族里可以有数百万个列,表中的每一行都有想同样的列族,列族必须在表创建的时候指定,不能轻易修改,且数量不能太多,一般不超过3个,列族名的类型是字符串(String)

4、列限定符(qualifier)

列限定符用于代表HBASE表中列名称,列族里的数据通过列限定符来定位,常见的定位格式为“family:qualifier”,(例如,要定位到列族cfl中的列name,则使用cfl:name)。Hbase中的列族和列限定符都可以理解为列,只是列级别不同,一个列族下面可以有多个列限定符,因此列族可以简单理解为第一级列,列限定符是二级列,两者的关系时父子关系,与行键一样,列限定符没有数据类型,总是视为字节数组byte[]

5、单元格(cell)

单元格通过行键、列族和列限定符一起来定位的,单元格包含值和时间戳,值没有数据类型,总是视为字节数组byte[],时间戳代表该值的版本,类型为long,默认情况下,时间戳表示数据写入服务器的时间,但是当数据放入单元格时,也可以制定不同的时间戳,每个人单元格都根据时间戳保存同一份数据的多个版本,且降序排列,即最新的数据排在最前面,这样有利于快速查找最新数据,对单元格中的数据进行访问的时候,会默认读取最新值

6、 简单概括就是

表(table):一个表包含多行数据
行(row):唯一标识rowkey,多个列以及对应的值
列(column):列簇(colummn family):列名(qualifier)组成(:号相连)。一个列簇下可有多个 列;列可动态增加(可扩展到上百万列)
单元格(cell):五元组(row,column,timestamp,type,value)组成,其中(row,column,timestamp,type)是K,value字段对应KV结构的V
时间戳(timestamp):每个cell写入自带时间戳,同一个rowkey、column下有多个value存 在,value用timestamp作为版本号,版本号越大,数据越新

三、 数据模型

1、模型简介

因为Hbase表是多位映射的,因此行列的排列与传统RDBMS不同,传统的RDBMS数据库对于不存在的值,必须存储NULL值,而在Hbase中,不存在的值可以省略,且不占用存储空间,此外,Hbase在新建表的时候必须指定表名和列族,不需要指定列,,所有的列在后续添加数据的时候动态添加,而传统的RDBMS指定好列以后,不可以修改和动态添加
当然也可以把Hbase看成键值对的数据库(比如redis,mongdb等),通过4个键定位到具体的值,这4个值是行键、列族、列限定符、时间戳,
在这里插入图片描述
也可以通过此图看出来,java中常用的存储键值集合为Map,而Map是允许多层嵌套的,使用Map嵌套来表示Hbase数据模型的效果如下

Map<rowkey,Map<column faimily,Map<qualifier,Map<timestamp,data>>>>
逻辑视图

在这里插入图片描述
三个列簇,其中anchor下有2列,根据行com.cnn.www以及列anchor:cnnsi.com可以定位到数据 CNN,对应的时间戳是t9;同一行另一列contents:html下有3个版本数据,版本号是t5、t6、t7

物理视图

在这里插入图片描述

四、存储介绍

1、行式存储

按行写入:mysql典型 获取行高效 获取列低效:按行读取,按列过滤,无用列占用大量内存 适用于OLTP====

2、列式存储

将一列数据存储在一起:Kudu代表 获取列高效 获取行低效:按列读取,按行合并 具备高压缩特性:列数据类型相同

3、列簇式存储

介于行式存储和列式存储之间: 等同于行式:一张表只设置一个列簇 等同于列方式:一张表设置大量列簇,每个列簇下仅有一列(不建议设置太多列簇)

五、架构体系

1、架构方式

Hbase 架构采用主从(master/slave)方式,有三种类型的节点组成--------HMaster节点、HRegionServer节点和ZooKeeper集群,其中HMaster节点作为主节点,HRegionServer作为从节点,ZooKeeper来进行协调,这种节点方式类似于Hdfs中的NN和DN
在这里插入图片描述

2、读写过程

2.1、Hbase 写流程

如图所示:
在这里插入图片描述
写流程的详细流程
(1)Client先访问zookeeper,获取hbase:meta表位于哪个Region Server。
(2)访问对应的Region Server,获取hbase:meta表,根据读请求的namespace:table/rowkey&

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值