4、HBase 分布式数据库

一、HBase 定义

 

HBase 是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统。适合于存储大表数据(表的规模可以达到数十亿行以及数百万列),并且对大表数据的读、写访问可以达到实时级别;利用 Hadoop HDFS(Hadoop Distributed File System)作为其文件存储系统,提供实时读写的分布式数据库系统;利用 ZooKeeper 作为协同服务。

Hbase 作为一个分布式的大数据数据库系统,首先提供的就是高可靠性,由于在大数据系统中,我们需要保证整体数据的安全性和可靠性,所以 Hbase 也提供了自己所需要的相关的安全性保障,首先,Hbase 借力于外部组件,比如 HDFS, Hbase 将自己的文件写入到 HDFS 中,这就借助 HDFS 的数据安全性保障,保证了其数据的可靠性存储,并且主备集群之间的容灾能力可以增强 HBase 数据的高可用性, 主集群提供数据服务,备用集群提供数据备份,当主集群出现故障时,备集群可以提供数据服务。这里 Hbase 通过主备的形式来进行数据的安全性保障,实际上是借鉴了存储中主备容灾的相关思想,我们可以通过存储设备来实现应用级别的容灾保护,也可以通过 HBase 自己的进程来实现相关的容灾性能。HBase 集群容灾作为提高 HBase 集群系统高可用性的一个关键特性,为 HBase 提供了实时的异地数据容灾功能。它对外提供了基础的运维工具,包含灾备关系维护,重建,数据校验,数据同步进展查看等功能。为了实现数据的实时容灾,可以把本 HBase 集群中的数据备份到另一个集群。如上所说的是我们针对于应用和数据的保护, 那么进程的保护和 HDFS 很类似,组价内的进程底层次组件依赖于高层次组件来进行容灾保护,比如 Region 失效之后,需要 HMaster 来进行相关的迁移等操作, 那么高层次的组件依赖于 Zookeeper 来进行保护。这样就在进程上做了保护。高性能主要是面向于用户的实际读取操作,和其他相关的组件一样,Hbase 作为大数据的存储系统,一样是读多写少的这种应用场景,所以如何实现高效率的读取操作就是 Hbase 所需要做的很重要的一个工作。那么 Hbase 首先通过了分布式的集群保证了整体性能能够满足需求,其次还根据了 key-value 的形式保障了整体读取的高效性,另外 Hbase 还支持二级索引。

HBase    是一个 Key-Value    类型的分布式存储数据库。每张表的数据,是按照RowKey 的字典顺序排序的,因此,如果按照某个指定的 RowKey 去查询数据,或者指定某一个 RowKey 范围去扫描数据时,HBase 可以快速定位到需要读取的数据位置,从而可以高效地获取到所需要的数据。在实际应用中,很多场景是查询某一个列值为 XXX 的数据。HBase 提供了 Filter 特性去支持这样的查询,它的原理是:按照 RowKey 的顺序,去遍历所有可能的数据,再依次去匹配那一列的值,直到获取到所需要的数据。可以看出,可能仅仅为了获取一行数据,它却扫描了很多不必要的数据。因此,如果对于这样的查询请求非常频繁并且对查询性能要求较高,使用 Filter 无法满足这个需求。我们传统的时候,进行数据索引都是通过 key 值来进行的,那么我们可以根据自己所关注的相关列,对其创建一个二级索引表,这次我们在进行索引的时候,就可以直接根据二级索引表来查找匹配的数据,而不是根据 Rowkey 的值遍历数据进行查找。和传统的数据库不同的是,传统数据库是面向于行的存储,我们也可以称之为是面向于业务的,这个时候我们建立表格,都是预先定义好列的,然后向里面一行一行的添加数据信息。这样的话,拓展性会很差。不能完全适应大数据的相关处理。那么在 Hbase 中,我们采用了面向于列的存储,那么这样存储的话,底层是按照列的形式来维护数据,进行实际的存储操作,我们也可以进行属性的拓展。那么在实际的业务中,面向于行的存储多用于实际的业务操作,因为业务中,我们添加信息都是按照行存储的思维来进行的,一次性添加一行信息。面向于列的存储主要用于数据分析和数据挖掘,我们在进行分析的时候主要是关注某一个属性对于分析结果的影响,比如,年龄对于购买电子产品的一个相关关联性,这个时候我们的关注点就是年龄属性和是否会购买的结果,而对于其他的属性就不会更多的关注。面向于行的存储,一次可以完整的读取出所有的信息,但是在进行数据分析或者用户在进行条目读取时有特殊需求的情况下,数据就会多读取一部分。如果是面向于列的存储,对于关注点很明确的数据请求会很适合,但是如果需要完整的读取出某一个数据,就必须需要下发多次数据读取请求。

HBase 适合具有如下需求的应用:(1)海量数据(TB、PB)

海量数据的适应性主要取决于两个角度,首先第一个就是 Hbase 借力于 HDFS 组件,可以借助到 HDFS 的存储无限拓展能力。虽然 HDFS 可以无限拓展,但是 Hbase 本身能否承载这么多数据的表格加载也是一个需要考量的问题,所以 Hbase 本身也提供了对于海量数据的支持能力,尤其体现在性能方面,为了能够正常的使用和查询读取数据,那么在海量数据的情况下,Hbase 提供了非常优秀的基于 key-value 形式的索引,并且华为自身还做了对应特性的增强,添加了二级索引机制。

(2)高吞吐量

高吞吐量主要体现在数据的流式导入和导出等机制,HDFS 虽然给 Hbase 提供了海量数据的基础,但是 Hbase 本身也需要能够接收和处理这些数据,就好比于水管,总的水管容量再大,分枝水管过细,水流量也不会很高。所以 Hbase 在自身的基础上,就加强了对于海量数据的高吞吐量支持。

(4) 需要在海量数据中实现高效的随机读取实现方式为 key-value 和二级索引机制

(4)需要很好的性能伸缩能力这里主要体现的就是基于列存储的良好的拓展性。

(5)能够同时处理结构化和非结构化的数据(6)不需要完全拥有传统关系型数据库所具备的 ACID 特性

ACID 原则是数据库事务正常执行的四个特性,分别指原子性、一致性、独立性及持久性。

(1) 原子性(Atomicity):指一个事务要么全部执行,要么不执行.也就是说一个事务不可能只执行了一半就停止了.比如你从取款机取钱,这个事务可以分成两个步骤:1 划卡,2 出钱.不可能划了卡,而钱却没出来.这两步必须同时完成.要么就不完成。

(2) 一致性(Consistency):指事务的运行并不改变数据库中数据的一致性.例如,完整性约束了 a+b=10,一个事务改变了 a,那么 b 也应该随之改变。

(3) 独立性(Isolation):事务的独立性也有称作隔离性,是指两个以上的事务不会出现交错执行的状态.因为这样可能会导致数据不一致。

(4) 持久性(Durability):事务的持久性是指事务执行成功以后,该事务所对数据库所作的更改便是持久的保存在数据库之中,不会无缘无故的回滚。

二、数据结构

(1)结构化数据:具有固定的结构,属性划分,以及类型等信息。我们通常所理解的关系型数据库中所存储的数据信息,大多是结构化数据,如职工信息表,拥有 ID、Name、Phone、Address 等属性信息。通常直接存放在数据库表中。数据记录的每一个属性对应数据表的一个字段。

(2)非结构化数据:无法用统一的结构来表示。如文本文件、图像、视频、声音、网页等信息。数据记录较小时(如 KB 级别),可考虑直接存放到数据库表中(整条记录映射到某一个列中),这样也有利于整条记录的快速检索。数据较大时,通常考虑直接存放在文件系统中。数据库可用来存放相关数据的索引信息。(3)半结构化数据:具有一定的结构,但又有一定的灵活可变性。典型如 XML、 HTML 等数据。其实也是非结构化数据的一种。可以考虑直接转换成结构化数据进行存储。根据数据记录的大小和特点,选择合适的存储方式。这一点与非结构化数据的存储类似。

行存储和列存储概念(1)按行存储类型:数据按行存储在底层文件系统中。通常,每一行会被分配固定的空间。优点:有利于增加/修改整行记录等操作;有利于整行数据的读取操作。缺点:单列查询时,会读取一些不必要的数据。

(2)按列存储类型:数据以列为单位,存储在底层文件系统中。

优点:有利于面向单列数据的读取/统计等操作。缺点:整行读取时,可能需要多次 I/O 操作。

 

 

HBase 包含模块:(1)HMaster

在 HA 模式下,包含主用 Master 和备用 Master。

①主用 Master:负责 HBase 中 RegionServer 的管理,包括表的增删改查; RegionServer 的负载均衡,Region 分布调整;Region 分裂以及分裂后的 Region 分配;RegionServer 失效后的 Region 迁移等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值