Hbase学习笔记

非关系型数据库和关系型数据库

传统关系型数据库的缺陷

随着互联网Web 2.0的兴起,传统的关系数据库在应付Web 2.0网站,特别是超大规模和高并发的SNS类型动态网站时已经力不从心,暴露了很多难以克服的问题。

1)高并发读写的瓶颈

Web 2.0网站要根据用户个性化信息来实时生成动态页面和提供动态信息,所以基本上无法使用静态化技术,因此数据库并发负载非常高,可能峰值会达到每秒上万次读写请求。关系型数据库应付上万次SQL查询还勉强顶得住,但是应付上万次SQL写数据请求,硬盘I/O却无法承受。其实对于普通的BBS网站,往往也存在相对高并发写请求的需求,例如,人人网的实时统计在线用户状态,记录热门帖子的点击次数,投票计数等,这是一个相当普

遍的业务需求。

2)可扩展性的限制

在基于Web的架构中,数据库是最难以进行横向扩展的,当应用系统的用户量和访问量与日俱增时,数据库系统却无法像Web Server和App Server那样简单地通过添加更多的硬件和服务节点来扩展性能和负载能力。对于很多需要提供24小时不间断服务的网站来说,对数据库系统进行升级和扩展是非常痛苦的事情,往往需要停机维护和数据迁移,而不能通过横向添加节点的方式实现无缝扩展。

3)事务一致性的负面影响

事务执行的结果必须是使数据库从一个一致性状态变到另一个一致性状态。保证数据库一致性是指当事务完成 时,必须使所有数据都具有一致的状态。在关系型数据库中,所有的规则必须应用到事务的修改上,以便维护所有数据的完整性,这随之而来的是性能的大幅度下降。很多Web系统并不需要严格的数据库事务,对读一致性的要求很低,有些场合对写一致性要求也不高。因此数据库事务管理成了高负载下的一个沉重负担。

4)复杂SQL查询的弱化

任何大数据量的Web系统都非常忌讳几个大表间的关联查询,以及复杂的数据分析类型的SQL查询,特别是SNS类型的网站,从需求以及产品设计角度就避免了这种情况的产生。更多的情况往往只是单表的主键查询,以及单表的简单条件分页查询,SQL的功能被极大地弱化了,所以这部分功能不能得到充分发挥。

NoSQL数据库的优势

1)扩展性强

NoSQL数据库种类繁多,但是一个共同的特点就是去掉关系型数据库的关系特性,若数据之间是弱关系,则非常容易扩展。一般来说,NoSql数据库的数据结构都是Key-Value字典式存储结构。例如,HBase、Cassandra等系统的水平扩展性能非常优越,非常容易实现支撑数据从TB到PB级别的过渡。

2)并发性能好

NoSQL数据库具有非常良好的读写性能,尤其在大数据量下,同样表现优秀。当然这需要有优秀的数据结构和算法做支撑。

3)数据模型灵活

NoSQL无须事先为要存储的数据建立字段,随时可以存储自定义的数据格式。而在关系型数据库中,增删字段是一件非常麻烦的事情。对于数据量非常大的表,增加字段简直就是一场噩梦。NoSQL允许使用者随时随地添加字段,并且字段类型可以是任意格式。

总结

HBase作为NoSQL数据库的一种,当然也具备上面提到的种种优势。
Hadoop最适合的应用场景是离线批量处理数据,其离线分析的效率非常高,Hadoop针对数据的吞吐量做了大量优化,能在分钟级别处理TB级的数据,但是Hadoop不能做到低延迟的数据访问,所以一般的应用系统并不适合批量模式访问,更多的还是用户的随机访问,就类似访问关系型数据库中的某条记录一样。
比如Google这个搜索引擎,存储了海量的网页数据,当我们通过搜索引擎检索一个网页时,之所以Google能够快速的响应结果,核心的技术就是利用了BigTable,可以实现低延迟的数据访问。

HBase的列式存储的特性支撑它实时随机读取、基于KEY的特殊访问需求。当然,HBase还有不少新特性,其中不乏有趣的特性,在接下来的内容中将会详细介绍。

BigTable介绍

BigTable是Google设计的分布式数据存储系统,用来处理海量的数据的一种非关系型的数据库。

BigTable是非关系的数据库,是一个稀疏的、分布式的、持久化存储的多维度排序Map。Bigtable的设计目的是可靠的处理PB级别的数据,并且能够部署到上千台机器上。Bigtable已经实现了下面的几个目标:适用性广泛、可扩展、高性能和高可用性。Bigtable已经在超过60个Google的产品和项目上得到了应用,包括Google
Analytics、GoogleFinance、Orkut、Personalized Search、Writely和GoogleEarth。这些产品对Bigtable提出了迥异的

需求,有的需要高吞吐量的批处理,有的则需要及时响应,快速返回数据给最终用户。它们使用的Bigtable集群的配置也有很大的差异,有的集群只有几台服务器,而有的则需要上千台服务器、存储几百TB的数据。

Bigtable的用三维表来存储数据,分别是行键(row key)、列键(column key)和时间戳(timestamp),
本质上说,Bigtable是一个键值(key-value)映射。按作者的说法,Bigtable是一个稀疏的,分布式的,持久化的,多维的排序映射。可以用(row:string, column:string, time:int64)→string 来表示一条键值对记录。

HBase概述

1.HBase概述

基于Hadoop数据库工具
来源于Google三篇论文之一 BIGTABLE,APACHE做了开源的实现就是 HBASE 技术
是一种NoSQL的 非关系型数据库 不符合关系型数据库的范式适合存储半结构化非结构化的数据
适合存储稀疏的数据 空的数据不占用空间面向列(族)进行存储
提供实时的增删改查的能力 是一种真正的数据库产品
可以存储海量数据 性能非常优良可以实现上亿条记录的毫秒级别的查询但是不支持严格的事务控制 只能在行级别保证事务

是一个高可靠 高性能 面向列 可伸缩的分布式存储系统 利用hbase技术可以在廉价的PC上搭建起大规模结构化存储集群。

HBase利用HadoopHDFS作为其文件存储系统,利用Hadoop的MapReduce来处理HBase中的海量数据,利用Zookeeper作为协调工具。

2.HBase的逻辑结构

HBase使用表来存储数据 但是表的结构和特点和传统的关系型数据库有非常大的区别在这里插入图片描述

行键 - RowKey
就相当于是HBase表中的主键,HBase中的所有的表都要有行键
HBase中的所有的数据都要按照行键的字典顺序排序后存储对HBase表中的数据的查询 只有三种方式:
根据指定行键查询

根据指定的行键范围查询全表扫描查询

列族(簇) - ColumnFamily
是HBase表中垂直方向保存数据的结构,列族是HBase表的元数据的一部分,需 要在定义HBase表时就指定好表具有哪些个列族,列族中可以包含一个或多个列

列- Column
HBase表中列族里可以包含一个或多个列,列并不是HBase表的元数据的一部 分,不需要在创建表时预先定义,而是可以在后续使用表时随时为表的列族动 态的增加列。

单元格和时间戳 - Cell TimeStamp
在HBase表中,水平方向的行 和 垂直方向的列 交汇 就得到了HBase中的一个存储单元,而在这个存储单元中,可以存储数据,并且可以保存数据的多个版 本,这些个版本之间通过时间戳来进行区分。
所以在HBase中 可以通过 行键 列族 列 时间戳 来确定一个最小的存储数据的单元,这个单元就称之为单元格 Cell。
单元格中的数据都以二进制形式存储,没有数据类型的区别。

HBase的安装配置

1.安装前提

JDK Hadoop Zookeeper

2.下载安装包

访问HBase官网下载安装包
http://hbase.apache.org/
要注意下载的版本必须和 JDK Hadoop的版本相匹配
在这里插入图片描述

3.HBase安装 - 单机模式

a.前提条件,安装jdk 和 hadoop,并配置了环境变量
b.解压安装包
1 tar -zxvf xxxxx.tar.gz
c.修改HBase的配置文件conf/hbase-site.xml
hbase.rootdir 这个选项指定了Hbase底层存储数据的磁盘位置,如果不配置默认在/tmp/hbase-[username],而/tmp是linux的临时目录,其中的数据随时有可能被清 空,所以必须修改
d.在单机模式下,此路径配置为磁盘路径,HBase将会基于普通的磁盘文件来进行工作,也即 不使用HDFS作为底层存储,优点是方便,缺点是底层数据不是分布式存储,性能和可靠性 没有保证,主要用作开发测试,不应用在生产环境下。

4.HBase安装 - 伪分布式

a.前提条件,安装jdk 和 hadoop,并配置了环境变量

b.解压安装包
tar -zxvf xxxxx.tar.gz
c.修改conf/hbase-env.sh修改JAVA_HOME
export JAVA_HOME=xxxx
d.修改hbase-site.xml

hbase.rootdir
file:/// /hbase

hbase.rootdir:指定底层存储位置
在伪分布式模式下,底层使用HDFS存储数据,所以此处配置的是一个HDFS地址
dfs.replication:指定底层HDFS的副本存储数量
配置了副本数据,明确告知了HBase底层HDFS保存数据时的版本数量
e.此种模式下,HBase采用hdfs作为存储具有完整的功能,但是只有一个节点工作,没有性能 的提升,可以用作开发测试,不可用作生产环境下。

5.HBase安装 - 完全分布式

a.前提条件,安装jdk 和 hadoop,并配置了环境变量

b.解压安装包
tar -zxvf xxxxx.tar.gz
c.修改conf/hbase-env.sh修改JAVA_HOME
export JAVA_HOME=xxxx
d.修改hbase-site.xml

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值