目录
4.1HBase简介
HBase是BigTable的开源实现,最初为了解决谷歌公司内部大规模网页搜索问题。
网页搜索:第一步建立整个网页的索引,设计一个网页爬虫,将网页储存在BigTable当中,运行MapReduce;第二步搜索互联网网页,接受用户发起请求,在BigTable中查找对应网页,然后提交给用户。
分布式存储系统BigTable是基于谷歌分布式文件系统GFS(底层的分布式文件系统存储完全非结构化的数据)进行相关的数据储存,利用Chubby进行协同管理服务。具有很好的性能(可以支持PB级别的数据);具有非常好的可拓展性(用集群去存储几千台服务器完成分布式存储)。
HBase是高可靠、高性能、面向列、可伸缩的分布式数据库,可以用来存储非结构化和半结构化的松散数据。(基于HDFS文件存储系统,Zookeeper进行协同管理服务,Hadoop MapReduce进行海量数据处理)
HBase设计原因
基于HDFS和MapReduce,Hadoop可以解决大规模数据离线批量处理,但是没有办法满足大数据实时处理的需求;随着数据的大规模爆炸式增长,传统的关系型数据库的拓展能力非常有限。
HBase与传统关系型数据库的联系与区别
数据类型方面:传统关系型数据库使用的是经典的关系数据模型,具有多种数据类型和对应的存储方式(整型,字符型等);HBase将所有存储的值都设为未经解符的字符串(bytes),数据类型依靠应用开发人员读取后自行解释。
数据操作方面:关系型数据库中定义了非常多的数据操作(函数,表连接等);HBase只有简单的插入、查询、删除、清空等操作,表和表之间是分离的,没有表的连接。
存储模型:关系型数据库基于行模式存储;HBase基于列存储。
数据索引方面:关系型数据库可以直接针对不同的列构建非常复杂的索引;HBase只支持对行键的简单索引,不支持列索引。
数据维护方面:关系型数据库在更新操作时,旧的数据会直接被新数据覆盖掉;HBase的更新操作是插入了新数据(时间戳标记),旧数据被保留,当过了设置的保留期限后才会被删除。
可伸缩性方面(可拓展性):关系型数据库很难实现水平拓展,最多实现纵向拓展(增加CPU个数,单核变双核,双核变四核,小型机变成大型机等);HBase借助分布式集群存储海量数据,很容易水平拓展。
HBase访问接口
提供一个原生Java API,Shell命令;为了支持异构系统在线访问可以通过Thrift Gateway;REST Gateway。
想做整个数据表分析时,提供SQL类型接口,Pig;数据仓库产品Hive(Hive SQL)。
4.2HBase数据模型
HBase是一个稀疏的多维度的排序的映射表; 通过行键,列族,列限定符(列)和时间戳四个元素来定位数据;每一个数据值都是未经解释的字符串(Bytes数组);支持列族动态拓展;一个行可以有一个行键Rowkey和任意多个列。
HBase更新数据时保留旧的版本的原因:HBase基于分布式文件系统HDFS存储数据,而HDFS只允许写入追加,不允许进行数据相关的直接修改。
数据坐标
传统关系型数据库的定位:通过一个行一个列两个维度可以确定唯一的数据;
HBase对数据的定位:四维坐标,通过行,列族,列限定符(列)可以确定唯一的单元格(具体存储数据的地方),同一单元格中的数据通过时间戳加以区分数据版本。