HBase_01_概述

1 HBase概述

1.1 什么是Hbase

image-20201209194740254

Hbase的原型是Google的BigTable论文。三篇论文分别对应的技术:

HDFS – GFS、MapReduce – MR、HBase – BigTable

image-20201209195322787

从功能上看HBase是一个高可靠性(可以配置高可用)、高性能(存储性能强)、面向列(列族)、可伸缩的分布式存储系统。

1.2 为什么用HBase

  1. 查询的列太多会影响性能

    MySql一张表的最大的列数为4096列。

  2. 查询的行太多也会影响性能

    MySql的单表最大容量是4G

    数据行数一般在500万到2000万之间,会导致数据库阻塞

  3. 表随着业务的变化,增加新的列(动态列)

HBase MySql
列式、NoSql数据库 行式、关系型数据库
只支持byte[]类型(便于压缩) 支持多种数据类型
支持海量数据存储 500万-2000万行
存储速度快,但是查询速度慢 查询速度快
只支持rowkey的索引 支持主键索引
事务只支持到row级别 完整的事务
支持多个版本存在,有时间戳版本 直接修改元数据

1.3 HBase结构

①HBase逻辑架构

image-20201209201615788

②HBase物理架构

image-20201209201827528

③HBase基础架构

每一个列族一个store。

image-20201209201948340

1.4 HBase结构概念

①NameSpace

命名空间,类似于数据库中的database概念,每个命名空间内有多个表。

HBase有两个自带的命名空间:default和hbase

  • hbase存放HBase内置的表
  • default是默认创建表,所放的命名空间

②Table

类似于数据库中的表的概念。

HBase定义表的时候,只需要声明表名和列族即可,不需要声明具体的列。

create ‘命名空间:表名’, ‘列族’

③RowKey

分区的RowKey是有序的!

HBase表中的每行数据,都是由一个RowKey和多个Column(列)组成,按照RowKey的字典序排列的!

④Column

HBase中每个列由Column Family(列族)和Column Qualifier(列限定符)进行限定。比如:info:name

⑤TimeStamp

用来表示不同的版本(Version),系统自动加上该字段,其值是写入HBase的时间

⑥ Cell

由{rowkey, column Family:column Qualifier, time Stamp} 唯一确定的单元。cell中的数据是没有类型的,全部是字节码形式存贮。

1.5 HBase架构概念

①RegionServer

Region Server为 Region的管理者,其实现类为HRegionServer,主要作用如下:

  • 对于数据的操作:get, put, delete;

  • 对于Region的操作:splitRegion、compactRegion。

②Master

Master是所有Region Server的管理者,其实现类为HMaster,主要作用如下:

  • 对于表的操作:create, delete, alter

  • 对于RegionServer的操作:分配regions到每个RegionServer,监控每个RegionServer的状态,负载均衡和故障转移。

③Zookeeper

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

防止Master出现异常情况,无法对RegionServer做操作。HBase默认情况下,含有内置的ZK,但是我们一般使用外置ZK,包含了Master的管理信息。

④HDFS

HDFS为Hbase提供最终的底层数据存储服务,同时为HBase提供高可用的支持。

1.6 HBase操作原理

①增加

使用put指令,put ‘命名空间:表名’, ‘行键rowkey’, ‘列族:列名’, ‘列值’

时间戳是由HBase自动生成的,而且存储的是数据的单元格信息,而不是一行数据。

②修改

修改数据时,逻辑上需要先查询数据,再进行修改,对于HBase来讲,性能非常低,所以不能采用这种方式来实现修改操作。HBase采用了新增数据的方式来覆盖旧的数据,来达到修改的目的。

③插入

HBase本身就是用于存储海量数据的数据库,所以对于插入操作进行了优化,性能非常的快,而且HBase本身就是基于HDFS文件系统,所以数据量增大不是很大的问题。如果业务中存在历史数据操作的话,这种方式更加合理。

数据插入后,读取数据时,其实依赖于时间戳(版本),HBase会把最新的数据查询出来。

④删除

HBase中的删除,其实也是增加新的数据,只不过进行了特殊处理,不让HBase可以查询出来。

如果数据删除的话,那么在查询的时候其实时看不到的,但是HBase中会增加新数据,这样做的原因主要是考虑到性能的原因,但是并不是说,这个数据会永久的保留,也会真正的删除,由内部的处理机制在特定的时间进行数据的真实删除。这个操作我们称之为compaction,文件合并的时候,会删除。

⑤查询

查询可以全表扫描查询(scan)

增加查询范围(scan,StartRow(包含),StopRow(不包含))

查询一条(RowKey)数据(get),可以限定列名或列族的名称

猜你喜欢

转载自blog.csdn.net/qq_43523503/article/details/113531387
今日推荐