4.1概述
4.1.1从BigTable说起
HBase是BigTable的开源实现。
BigTable是一个分布式存储系统,它最初是用于解决谷歌公司内部的大规模网页所搜问题。
网页搜索可以分为两个阶段:
1.第一阶段:建立整个网页的索引。
通过爬虫不断的抓取各个网站的页面,将网页的每页一行存储到BigTable中。
在BigTable上运行MapReduce,MapReduce计算作业运行在整张表上,会生成索引,保证能够快速搜索相关网页。
2.第二阶段:搜索互联网网页。
搜索引擎接收用户发起的查询请求。
网络搜索应用通过查询建立好的索引,从BigTable得到网页。
最后将网页搜索结果返回给用户。
BigTable诞生之初主要就是满足互联网搜索引擎的基本需求。但现如今,BigTable作为分布式存储系统,不止用于网页搜索,还用于谷歌非常多的项目中,包括搜索、地图、财经、打印,以及一些社交网站、视频共享网站、博客系统等。
BigTable并非直接将底层磁盘作为存储,它是架构在GFS(谷歌分布式文件系统)基础之上的,并使用GFS作为底层数据存储。并且采用Chubby提供的协调管理服务。
BigTable受到广泛关注的原因包括:
1.它具有非常好的性能,可以支持PB级别的数据。
2.它具有非常好的可扩展性,可以用集群去存储几千台服务器,完成分布式存储。
4.1.2HBase简介
HBase是一个高可靠、高性能、面向列、可伸缩的分布式数据库。
相比于只能存储完全非结构化数据的底层分布式文件系统,HBase可以用来存储非结构化和半结构化的松散数据。并且HBase的目标是通过水平扩展的方式,允许几千台服务器去存储海量文件,实现庞大的存储规模。
HBase和BigTable的底层技术对应关系如下:
关系型数据库已经流行许多年了,况且Hadoop已经有了HDFS和MapReduce,为什么需要HBase?
- Hadoop可以解决大规模数据的离线批量处理问题,但是Hadoop受限于Hadoop MapReduce编程框架的高延迟数据处理机制,随着数据的大规模爆炸式增长,Hadoop没有办法满足大规模数据实时处理的需求。
- 传统的关系型数据库的扩展能力非常有限,对大规模数据的存储能力不够。即使分库分表,也不能很好解决数据规模剧增导致的系统扩展性和性能问题。
- 传统的关系数据库可以应对一定的数据结构变化,但是需要进行停机维护。
- HDFS面向的是批量访问模式,而非随机访问模式。
HBase与传统的关系数据库的主要区别有哪些?
- 数据类型方面
传统的关系数据库使用的是经典的关系数据模型,具有丰富的数据类型和存储方式。
而HBase采用了更简单的数据模型,把数据存储为未经解释的字符串,需要依靠程序开发人员解释数据类型。 - 数据操作方面
关系数据库中定义了非常多的数据操作,比如更新、删除、查询、多表连接等。
而HBase只有简单的插入、查询、删除、清空等操作,避免了复杂的表与表之间的关系。 - 存储模式
关系数据库基于行模式存储。
而HBase基于列存储,每个列族都由几个文件保存,不同列族的文件是分离的。 - 数据索引
关系数据库可以直接针对各个不同的列,构建非常复杂的索引,以快速定位到相关记录。
而HBase只支持对行键进行索引,所有访问方法,要么通过行键访问,要么通过行键扫描。 - 数据维护
在关系数据库中进行数据更新操作的时候,原来的旧值会被新值替换掉。
而HBase不存在替换操作,不会擅长旧的版本,而是生成一个新的版本,并且每生成一个新版本就会生成一个时间戳标识新版本。直到过了设置的期限之后,系统才会在后台把它清理掉。 - 可伸缩性
关系数据库很难实现水平扩展,最多实现纵向扩展,比如增加CPU、单核变双核、双核变四核、增加内存条、增加磁盘。但纵向扩展的空间也是有限的。
而HBase借助于分布式集群存储海量数据,能够轻易的通过在集群中增加或者减少硬件数量来实现性能的伸缩。
4.1.3HBase访问接口
类型 | 使用场合 |
---|---|
原生Java API | Hadoop MapReduce作业并行批处理HBase表数据 |
Shell命令 | HBase管理使用 |
Thrift Gateway方式 | 其他异构系统在线访问HBase表数据 |
REST Gateway | 支持REST风格的Http API访问HBase |
Pig | 数据统计 |
数据仓库产品Hive | 以类似SQL语言的方式访问HBase |
4.2HBase数据模型
4.2.1HBase数据模型概述
HBase是一个稀疏的多维度的排序的映射表。这张表的索引是四个元素:行键、列族、列限定符、时间戳。