开发者学堂课程【高校精品课-北京理工大学-大数据技术导论:大数据的存储和管理(二)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/857/detail/15614
大数据的存储和管理(二)
内容介绍:
一、分布式数据库
二、h base 简介
三、h base 的数据模型
四、h base 的实现原理
五、h base 操作常用命令
六、小结
一、分布式数据库
数据库的核心目的是实现数据的一个高效的存储和管理。而传统的关系型数据库技术非常成熟,有着很多优势,例如完备的关系理论作为基础,强大的事物管理机制的支持,同时有着非常高效的查询优化的机制。
这使得传统的关系型数据库曾经一度在市场上占据着主流的位置,随着大数据时代的到来,以及 WEB2.0应用的发展,传统的关系型数据库在并发性、可扩展性以及可用性方面都呈现了一些不足。
在 WEB2.0的很多应用中,需要处理大量的非结构化以及半结构化的数据。而传统的关系型数据库需要对数据的模式,做一个严格的定义,在很多应用中是不可实现的。
H base 作为非关系型数据库的一个典型代表,也是 hadoop 生态组件中重要的组成部分之一,在很多方面上都弥补了关系型数据库的不足。
二、h base 简介
h base 的原型是 Google 的分布式存储系统.H base 作为非关系型数据库的一个典型代表,也是 hadoop生态组件中重要的组成部分之一,在很多方面上都弥补了关系型数据库的不足。
Big table 是使用 Google 的分布式文件系统。GFS 作为底层的数据存储,同时,配合 mapreduce 分布式的计算模型来处理海量的数据,同时采用 chubby 来提供协同的服务管理。
big table 在性能上可以扩展到 PB 级别的数据和上千台的机器,具备广泛的使用性、可扩展性、高性能以及高可用性这些特点。
H base 作为 big table 的一个开源实现,是一个高可靠、高性能、面向列、可伸缩的一个分布式的数据库,主要用来存储非结构化和半结构化的数据。h base 的设计目标是处理非常庞大的表,通过水平可扩展的方式,廉价的计算机集群处理超过11行数据和数百万列属性组成的数据表。
h base。是 hadoop 生态系统里面非常重要的组件之一,与其他的组件的对应关系看一下这张图。
h base 是以 HDNS 作为高可靠的底层存储,利用廉价的集群提供海量的数据存储能力,同时,利用 mapreduce来处理 h base,中海量的数据来实现高性能的运算,利用 zookeeper。算利用做 keeper 来提供协同服务,来实现稳定的服务和数据恢复,在 hadoop 生态系统中还有一些其他的组件来提供相应的支持。例如 qoop 为 h base 提供了高效便捷的关系数据导入的功能,上层的 have 和 pig 提供了高层语言的支持。
三、h base 的数据模型
1. 数据模型的相关概念。在 h base 中,采用表的形式来组织数据,跟传统的关系型数据库是一样。表是由行和列组成,不同的是列被分成了若干个列组。看这个示意图
在这个简单的例子中,在表中存储学生的数据,每一行代表一个学生。每一个行由行间来标识,行间是学生的ID。
在 h base 中有列族的概念,Common family,一个 h base 的表被分成很多个列族。在这个事例中,只列了一个列族,也就是 info 列族。它是一个基本的访问控制单元,也是进行存储的基本单元
列限定符。在每个列组里面,通常会有多个列限定符或者简称为列。在这个事例中,在 info 列组里面有name major和EMAIL3个列单元格。在 h base 的表中,通过行列组和列限定符可以唯一确定一个单元格,也就是 cell。在这个cell里面,存储的数据是没有数据类型的,这跟传统的关系型数据库是不一样的。传统关系型数据库需要对每个列做数据类型的限定,而在 h base 中,每一个数据都被视为 byte 数组时间戳。
在 h base 中每一个单元格可以存储多个版本的数据,通过时间戳进行索引。所以说 H base 本质上是一个稀疏的、多维度的排序的映射表。
这张表的索引是行线列足列限定符以及时间戳。通过这个四维的行键列组列限定符和时间戳,可以唯一确定一个数据,用户在表中存储数据。每一行都有一个可排序的行键和任意多个列。
表中的值是未经解释的字符串,是没有数据类型的,表在水平方向由一个或多个列组组成,一个列组可以包含任意多个列,同一个列组里面的数据。会被存储在一起,由于同一张表里面,每一行数据都可以有不同的列,所以里面有很多的单元格是空的,这也就是为什么称 h base 是稀疏的。
在 h base 中,列足支持动态的扩展,可以在任意的时间向 h base 中轻松的添加一个列族或列无需预先定义列的数量以及类型,使得 h base 数据模型非常的灵活。在 h base 中,需要进行更新操作的时候,不会把原始数据删除,而是去生成一个新的版本,用时间戳来作为索引。数据是按照时间戳顺序存储的,客户端可以选择获取离某个时间最近的数据版本,或者获取所有的数据版本。如果用户没有提供时间戳,系统默认返回最新的数据版本。
h base 的数据坐标概念。在关系型数据库里,根据行和列可以唯一确定一个数据,在 h base 中有一个四维坐标,也就是由行键列组列限定符。和时间戳组成。通过这四维坐标我们可以唯一确定一个值,如果把四维坐标行间列足列限定符和时间戳视为一个键的话,单元格视为值的话,那可以把 h base 看做一个键值数据库。
逻辑视图和物理视图的概念。逻辑上 h base 里面的表是一个稀疏的多维度的数据表,在物理上存储的时候,以列组为单位进行存储,在这个事例中,CF1,这个列组里面的数据被存储到了一起,CF2的数据被存储到了一起。在存储的时候会对数据进行排序,排序的顺序是行键列足列限定符以及时间戳。表中的空值是没有被存储的。
四、h base 的实现原理
1.h base 的实现原理。在 h base 中的表是根据 rocky 也就是行键来被水平划分成多个分区的,叫它 r egion。分区会被分发到不同的region server,也就是分区服务器上来存储。每个分区服务器可以存储多个 region,但是同一个 region 只能被分发到一个 region 服务器上。
2. h base 的实现包括三个主要的功能组件,包括连接到客户端的库函数。客户端可以通过访问库函数实现跟 h base的交互,master 主服务器。以及许多个 region 服务器,region 服务器是主要用来存储每个分区的,master是主要负责管理和维护h base 表的分区信息,来维护 region 服务器的列表分配。region 同时负责负载均衡以及处理email的变化,比如要创建新的表,要添加新的列足 region 服务器是负责存储和维护 master 分配给自己的 region,同时处理来自客户端的读写请求。
3. 分区定位
在 h base 中,不同的分区被分布式的存储到了多个分区服务器上,要读数据的时候如何做分区的定位,在h base中有这样原数据表,又叫做 matter 表,它是用来存储 region 和 region server 的映射关系的。在客户端需要访问数据的时候,首先需要去访问matter表。matter 表的信息是存储在 zoo keeper 的。
通过访问z oo keeper 来获取 matter 表的信息,接着去访问 matter 表,从 matter 表中取出所需要分区的具体位置。接着去访问对应的分区来获得用户端,想要读取的数据,同时为了加速选址,客户端会把访问过的位置信息,做一个本地的缓存,以便之后做快速的选址。
五、h base 操作常用命令
h base 操作的常用命令,可以去访问 h base 的官方网站详细的命令说明,如何在 h base 中创建表,如何去启用和禁用表,什么时候需要去启用和禁用表,以及怎样修改表的 skima,如何删除表等等。也可以学习到关于记录的操作,如何在 h base 的一个表中添加记录,怎么去查询,如何删除记录,如何做 count,同时也可以学习到如何在Java的程序里面调用 Java API 与 h base 进行交互。
六、小结
分布式数据库 h base 的有关知识,h base 的由来、数据模型、实现原理以及常用命令等内容。
HBase 数据库是 BiqTable 的开源实现,支持大规模海量数据的存储与管理。
HBase 是一个稀疏、多维、持久化存储的映射表,它采用行键、列族、列限定符和时间戳进行索引。
HBase 用分区存储,一个大的表会被分拆许多个 Region,这些 Region 会被分发到不同的服务器上实现分布式存储