HBASE介绍

来源:互联网 发布:淘宝合作协议书 编辑:程序博客网 时间:2024/05/17 07:05

HBASE的简单介绍

1.   HBASE的起源(历史)

1.1 HBASE的起源:

HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBaseHadoop之上提供了类似于Bigtable的能力。HBaseApacheHadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。

1.2 HBASE的发展历程:

2007.4 第一个版本(HVASE-287 MikeCafarella)

2010.10 0.89(Facebook的生产版本 basedon)

2011.4 0.90.2(阿里HBASE的第一个版本 basedon)

2012.1 0.92(Adds 安全,协处理器,HFileV2,分布式log-Splitting)

2012.5 0.94(Performance Release),目前是主流版本。

2013.4 0.95(0.96的预发版,Addsprotobuf,Table Snapshot,PrefixTreeCompression)

2.HBASE的工作原理

HBase是一个构建在HDFS上的分布式列存储系统;
HBase
是基于GoogleBigTable模型开发的,典型的key/value系统;
HBase
ApacheHadoop生态系统中的重要一员,主要用于海量结构化数据存储;
从逻辑上讲,HBase将数据按照表、行和列进行存储。
hadoop一样,Hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。

HBASE中的基本概念:

RowKey:是Byte array,是表中每条记录的“主键”,方便快速查找,Rowkey的设计非常重要。

Column Family:列族,拥有一个名称(string),包含一个或者多个相关列

Column:属于某一个columnfamilyfamilyName:columnName,每条记录可动态添加

Version Number:类型为Long,默认值是系统时间戳,可由用户自定义

Value(Cell)Byte array

Hbase物理模型

 每个columnfamily存储在HDFS上的一个单独文件中,空值不会被保存。

 Key Versionnumber在每个 column family中均有一份;

 HBase 为每个值维护了多级索引,即:<key,column family, column name, timestamp>

物理存储:

 1Table中所有行都按照rowkey的字典序排列;

 2Table在行的方向上分割为多个Region

 3Region按大小分割的,每个表开始只有一个region,随着数据增多,region不断增大,当增大到一个阀值的时候,region就会等分会两个新的region,之后会有越来越多的region

 4RegionHbase中分布式存储和负载均衡的最小单元,不同Region分布到不同RegionServer上。

Region虽然是分布式存储的最小单元,但并不是存储的最小单元。Region由一个或者多个Store组成,每个store保存一个columns family;每个Strore又由一个memStore0至多个StoreFile组成,StoreFile包含HFilememStore存储在内存中,StoreFile存储在HDFS上。

 

2.   HBASE的优缺点

Hbase的优点:

 1.列的可以动态增加,并且列为空就不存储数据,节省存储空间.

 2 Hbase自动切分数据,使得数据存储自动具有水平scalability.

 3 Hbase可以提供高并发读写操作的支持

Hbase的缺点:

 1.不能支持条件查询,只支持按照Row key来查询.

 2.暂时不能支持Master server的故障切换,Master宕机后,整个存储系统就会挂掉.

4.HBASE的操作应用

1.启动HBASE操作环境。

 命令:hbaseshell这样就可以进行HBASE的相关操作了

2.查看已经分组的外壳环境的命令列表。

 命令:help

3.获取某个特定命令的帮助信息和用法示例。

 命令:helpcommand命令名称

 例:helpcommand create就可以获得create命令的帮助信息和用法示例

4.表的创建。

 创建一个名为test的表,使其只包含一个名为data的列

 命令格式:create '表名' ,'列族'

 create 'test','data'

5.查看用户空间中的所有表。

 命令:list

6.往表中插入数据

 命令格式:put '表名' '行值' '列值' '数值'

 例:插入在列族data上不同行和列的三项数据。

 put'test','row1','data:1','value1'

 put'test','row2','data:2','value2'

 put'test','row3','data:3','value3'

7.查看表的内容

 命令格式:scan '表名'

 例:scan 'test'

8.删除表

 1.先把表调为禁用

 命令格式:disable'表名'

 例:disable'test'

 2.删除表

 命令格式:drop '表名'

 例:drop 'test'

9.退出HBASE

 命令:exit  

5.HBASE的应用场景

1. 大数据量(100s TB级数据)且有快速随机访问的需求。

例如淘宝的交易历史记录。数据量巨大无容置疑,面向普通用户的请求必然要即时响应。

2. 容量的优雅扩展

大数据的驱使,动态扩展系统容量的必须的。例如:webPage DB

3. 业务场景简单,不需要关系数据库中很多特性(例如交叉列、交叉表,事务,连接等等)

4 优化方面:合理设计rowkey。因为hbase的查询用rowkey是最高效的,也几乎的唯一生产环境可行的方式。所以把你的查询请求转换为查询rowkey的请求吧。

声明:本文内容来自网络整理。

0 0