Hbase概述
Hbase是一个基于Hadoop的分布式
,可扩展
,巨大数据仓库
,当用户需要对海量数据进行实时(时效性)随机
(单条记录级别数据)读写,用户可以使用Hbase,设计目标是能够持有一张巨大的表,该表
的规模能达到数十亿行
×数百万列
,并且可以运行在商用的硬件集群之上.Hbase是一个开源的,分布式的,版本化的,非关系型的数据库.该设计仿照了Goole的BigTable设计
分布式:指的是各个异构的节点形成的系统,所谓异构,就是结构不同、功能不同的节点。讲究的是各司其职
,效率谈不上。这里可能会有人将集群和分布式弄混,举个例子:一个电脑上可能会配置多个硬件,各个硬件负责不同的任务,zookeeper->namenode->yarn,这就叫分布式。而集群是相同的硬件处理同一个任务,它们是同构的,可以解决单个服务器的压力问题。
可扩展:解决并发问题的,可以集群。
Hdfs和HBase的区别这里先介绍一下数据库的三层结构
文件系统层:用于存储数据的层,mysql->操作系统,HBase->HDFS文件系统。
服务层:也就是我们安装的mysql数据库,其实它是一种服务,用于管理数据的结构。
驱动层:类似于代理,通过代理访问数据库服务层,数据库服务层管理数据结构,把数据交给文件系统层。
区别:HBase是构建在HDFS上的一个数据库服务,能够使得用户通过HBase数据库服务间接操作HDFS,使得用户对HDFS上的数据实现CRUD操作(细粒度操作
).
Hbase特性-官方
- 线性和模块化扩展。
线性:存储的数据量与服务器规模呈正比。
模块化:例如DataNode就是NameNode存储的某一个板块。 - 严格一致 reads 和 writes.
任何时刻读取HBase,大家读到的数据都是一致的。 - 表的自动和可配置分片(自动分区)
由于一张表中的数据过大,可以将管辖的数据分到不同的区 - RegionServers之间的自动故障转移支持。
分区服务器管理对应的分区 - 方便的基类,用于使用Apache HBase表支持Hadoop MapReduce作业。
- 易于使用的Java API,用于客户端访问。
- Block cache 和 Bloom Filters 以进行实时查询。
Block cache:区域缓存,提升查询效率
Bloom Filters:布隆过滤器,查询一条记录,读数据时会通过布隆过滤器的布隆算法过滤不必要的信息,根据分区去排除的。
列存储
常见的NoSQL数据库常见分类:
Key-Value
- Redis|SSDB
Document
- MongoDB|Elasticsearch|Solr
列存储
- HBase
图像关系
- Neo4j 等.
NoSQL数据库和关系数据库不同,NoSQL不同种类产品之间不可相互替换.
-
行
存储特点-RDBMS(关系型数据库管理系统,操作的最小单位是行)
思考:存在的问题
数据库的操作步骤: -
按照name和password索引快速定位当前记录
-
数据库底层加载id,name,password,age,sex,address
-
进行投影过滤出id,name,password
从上面过程不难看出age/sex/address的读取过程是多余的,这一部分IO的读取对于系统而言浪费.- IO利用率低;
其次关系型数据库由于不支持稀疏存储(null值不存储),导致null值也会占用磁盘空间,给系统带来磁盘空间的浪费-磁盘利用率低. -
解决(列共现性问题,会导致业务逻辑更加复杂)
t_user_base
t_user_detail(依然存在空值问题)
-
列存储(hbase)
ROWKEY
:等价关系型数据库的主键ID
列簇(Column-Family):把特性相似的列归为一个簇放在一起,成为列共现性。
列
:列簇/列名/列值/时间戳构成
时间戳
:用于记录Hbase中数据的版本,一般系统会自动指定为插入数据时间
列信息
:列簇+列名
记录排序:HBase底层在检索的时候以列簇为最小文件加载单位,先按照ROWKEY排,之后按列簇排再按照列名排(字典顺序排),最后按时间戳排(降序),能够快速的索引到数据,默认查询范围时间戳最新版本记录。
优点:1.支持稀疏存储,null不存,磁盘利用率100%
缺点:1.值包含ROWKEY,列信息,时间戳
初学,可以一起学习讨论,错误的地方,麻烦大神指导下!!!
感激不尽!!!
参考网站:hbase.apache.org
https://blog.csdn.net/weixin_38231448/article/details/89357104