共计 2621 个字符,预计需要花费 7 分钟才能阅读完成。
本篇文章为大家展示了如何理解大数据时代的结构化存储数据库 HBase,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。
Hbase 非常适合于非结构化数据存储的数据库,2006 年底由 PowerSet 的 Chad Walters 和 Jim Kellerman 发起,2008 年成为 Apache Hadoop 的一个子项目。现已作为产品在多家企业被使用。
分布式数据库 HBase
授权协议:Apache
开发语言:Java
操作系统:跨平台
项目地址:https://github.com/apache/hbase
HBase 项目简介
HBase ndash; Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用 HBase 技术可在廉价 PC Server 上搭建起大规模结构化存储集群。
HBase 是 Google Bigtable 的开源实现,类似 Google Bigtable 利用 GFS 作为其文件存储系统,HBase 利用 Hadoop HDFS 作为其文件存储系统;Google 运行 MapReduce 来处理 Bigtable 中的海量数据,HBase 同样利用 Hadoop MapReduce 来处理 HBase 中的海量数据;Google Bigtable 利用 Chubby 作为协同服务,HBase 利用 Zookeeper 作为对应。
Hbase 特性
大表:数十亿行 * 数百万列 * 数千个版本 = TB 级或 PB 级的存储
面向列:面向列 (族) 的存储和权限控制,列 (族) 独立检索。
稀疏:对于为空 (null) 的列,并不占用存储空间,因此,表可以设计的非常稀疏。
数据多版本:每个单元中的数据可以有多个版本,默认情况下版本号自动分配,是单元格插入时的时间戳;
数据类型单一:Hbase 中的数据都是字符串,没有类型
HBase 系统架构
HBase 中的组件包括 Client、Zookeeper、HMaster、HRegionServer、HRegion、Store、MemStore、StoreFile、HFile、HLog 等,HBase 中的每张表都通过行键按照一定的范围被分割成多个子表(HRegion),默认一个 HRegion 超过 256M 就要被分割成两个,这个过程由 HRegionServer 管理,而 HRegion 的分配由 HMaster 管理。
相关名词介绍
RowKey:是 Byte array,是表中每条记录的“主键”,方便快速查找,Rowkey 的设计非常重要。表中的行根据行的键值进行排序,数据按照 RowKey 的字典序排序存储
Column Family:列族,拥有一个名称 (string),包含一个或者多个相关列。列族须作为表模式(schema) 定义的一部分预先定义。如 create alarmInfo , i
Column:属于某一个 columnfamily,familyName:columnName,每条记录可动态添加
Version Number:类型为 Long,默认值是系统时间戳,可由用户自定义
Value(Cell):由{row key, column(= family + label), version} *** 确定的单元。cell 中的数据是没有类型的,全部是字节码形式存贮。
HBase 逻辑模型
HBase 以表的形式存储数据。表有行和列组成。列划分为若干个列族(row family)
Hbase 物理模型
Table 中所有行都按照 row key 的字典序排列;Table 在行的方向上分割为多个 Region;Region 按大小分割的,每个表开始只有一个 region,随着数据增多,region 不断增大,当增大到一个阀值的时候,region 就会等分会两个新的 region,之后会有越来越多的 region;Region 是 Hbase 中分布式存储和负载均衡的最小单元,不同 Region 分布到不同 RegionServer 上。
Region 虽然是分布式存储的最小单元,但并不是存储的最小单元。Region 由一个或者多个 Store 组成,每个 store 保存一个 columns family;每个 Strore 又由一个 memStore 和 0 至多个 StoreFile 组成,StoreFile 包含 HFile;memStore 存储在内存中,StoreFile 存储在 HDFS 上。
Hbase 请求过程
HBase 是一个分布式数据库,因此一张表的数据可能会分布在不同的节点中。需要注意的是 region 是 Hbase 分布式存储的最小单位,但 region 不是 HBase 存储的最小单位。在 HBase 中,一张表会被根据行键值的范围划分为几个 region,然后不同的 region 将会放在不同的 region 服务器上,被服务器上的 HRegionServer 所管理和维持。
因此我们可以推断出,当我们发送一个查找(插入、删除)请求时,首先客户端能根据请求中的行键值去确定该行键值应该存储在哪一个 region 上,并且该 region 在哪一个 region 服务器上(该查询过程主要使用 -ROOT- 表、和.meta 表,当定位到操作的 region 服务器的位置以后,客户端(Client)会将该操作发送到 region 服务器上,然后请求操作可能会被直接执行,也可能会进入任务队列等待
Hbase 与 RDBMS 对比
为什么采用 HBase?
HBase 不同于一般的关系数据库, 它是一个适合于非结构化数据存储的数据库. 所谓非结构化数据存储就是说 HBase 是基于列的而不是基于行的模式,这样方面读写你的大数据内容。
HBase 是介于 Map Entry(key value)和 DB Row 之间的一种数据存储方式。就点有点类似于现在流行的 Memcache,但不仅仅是简单的一个 key 对应一个 value,你很可能需要存储多个属性的数据结构,但没有传统数据库表中那么多的关联关系,这就是所谓的松散数据。
简单来说,你在 HBase 中的表创建的可以看做是一张很大的表,而这个表的属性可以根据需求去动态增加,在 HBase 中没有表与表之间关联查询。你只需要 告诉你的数据存储到 Hbase 的那个 column families 就可以了,不需要指定它的具体类型:char,varchar,int,tinyint,text 等等。但是你需要注意 HBase 中不包含事务此类的功能。
上述内容就是如何理解大数据时代的结构化存储数据库 HBase,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注丸趣 TV 行业资讯频道。