大型网站架构设计-HBase 可靠性、高可扩展性、实时读/写的列存储数据库

2014-11-26 10:02:06     25 人阅读    

HBase14Apache Hadoop项目下的一个子项目,它以Google BigTable15为原型,设计实现

了高可靠性、高可扩展性、实时读/写的列存储数据库。它的本质实际上是一张稀疏的大表,用来存储粗粒度的结构化数据,并且能够通过简单地增加节点来实现系统的线性扩展。

HBase运行在分布式文件系统HDFS16之上,利用它可以在廉价的PC Server上搭建大规模 结构化存储集群。HBase的数据以表的形式进行组织,每个表由行列组成。与传统的关系型数据库不同的是,HBase每个列属于一个特定的列族,通过行和列来确定一个存储单元,而每个 存储单元又可以有多个版本,通过时间戳来标识,如表2-1所示。

2-1 HBase表数据的组织形式

rowkey

column-family1

column-family2

column-family3

column1

column2

column3

column1

column2

column1

key1

 

 

 

 

 

 

key2

 

 

 

 

 

 

14   HBase 项目地址为 https://hbase.apache.org

15   著名的 Google BigTable 论文http://research.google.com/archive/bigtable.htol 16关于HDFS的介绍,请参照第5.2节。

 

 

key 3

 

 

 

 

 

 

 

 

HBase集群中通常包含两种角色,HMasterHRegionServer。当表随着记录条数的增加而 不断变大后,将会分裂成一个个Region,每个Region可以由(startkey,endkey)来表示,它包 含一个startkeyendkey的半闭区间。一个HRegionServer可以管理多个Region,并由HMaster 来负责HRegionServer的调度及集群状态的监管。由于Region可分散并由不同的HRegionServer

来管理,因此,理论上再大的表都可以通过集群来处理。HBase集群布署图如图2-12所示。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

                                                           图2-12HBase集群部署图17

 

1.  HBase 安装

下载HBase的安装包,这里选择的版本是0.96[1] [2]

 

wget http://mirror.bit.edu.cn/apache/hbase/hbase-0.96.1.1/hbase- 0.96.1.1-hadoop1-bin.tar.gz

longlong@ubuntu:~/tenp$ wget http://nirror.bit.edu.cn/apache/hbase/hbase-0.96.1. 1/hbase-0.96.1.1-hadoopl-bin.tar.gz

--2014-04-02 05:41:51-- http://nirror.bit.edu.en/apache/hbase/hbase-0.96.l.l/hb ase-6.96.1.1-hadoopl-bln.tar.gz

Resolving nirror.blt.edu.cn (nirror.blt.edu.cn)... 219.143.204.117, 2601:da8:264 2001250:56ff:feal:22

Connecting to mirror.bit.edu.cn (mirror.bit.edu.cn)|219.143.204.117|:80?.. conne

cted.

HTTP request sent, awaiting response... 200 OK Length: 73285670 (70M) [application/octet-stream]

Saving to: 'hbase-0.96.1.1-hadoopl-bln.tar.gz'

Q% r 1 69.460    8.33K/S eta 2h 25m  1

解压安装文件

tar -xf hbase-0.96.1.1-hadoop1-bin.tar.gz

longlong@ubuntu:~/tenp$ tar -xf hbase-0.96.1.1-hadoopl-bln.tar.gz longlonggubuntu:~/temp$

修改配置文件:

编辑{HBASE_HOME}/conf/hbase-env.sh 文件,设置 JAVA_HOME Java 的安装目录。

export JAVA_HOME=/usr/java/

The java implementation to use. Java 1.6 required, export JAVA_HOME=/usr/java/

编辑{HBASE_HOME}/conf/hbase-site.xml 文件,增加如下配置,其中 hbase.rootdir 目录用 于指定HBase的数据存放位置,这里指定的是HDFS上的路径,而hbase.cluster.distributed则指

定了是否运行在分布式模式下。

configuration

<property>

<name>hbase.cluster.distributed</name>

<value>true</value>

</property>

<property>

<name>hbase.rootdir</name>

<value>hdfs://localhost:9000/hbase</value>

</property>

〈/configuration

启动HBase

完成上述操作后,先启动Hadoop,再启动HBase,就可以进行相应的操作了。

longlong@ubuntu:/usr/hbase/bin$ ,/start-hbase.sh longlong@localhost's password:

localhost: starting zookeeper, logging to /usr/hbase/bln/../logs/hbase-longlong- zookeeper-ubuntu.out

starting master, logging to /usr/hbase/bin/.,/logs/hbase-longlong-master-ubuntu. out

longlong@localhost's password:

localhost: starting reglonserver, logging to /usr/hbase/bin/../logs/hbase-longlo ng-regionserver-ubuntu.out  

使用 HBase shell:

./hbase shell

longlong@ubuntu:/usr/hbase/bln$ ./hbase shell

HBase Shell; enter 'help<RETURN>' for list of supported commands.

Type "exlt<RETURN>" to leave the HBase Shell

Version 0.96.1.1-hadoopl, rllnknown, Tue Dec 17 11:52:14 PST 2013 hbase(main):601:0> help

HBase Shell, version 0.96.1.1-hadoopl, Unknown, Tue Dec 17 11:52:14 PST 2013 Type 'help "COMMAND"', (e.g. 'help "get"' -- the quotes are necessary) for help on a specific connand.

Commands are grouped. Type 'help "COMMAND_GROUP"', (e.g. 'help "general"') for h elp on a connand group.

COMMAND GROUPS

Group name: general

Commands: status, tablehelp, version, whoanl Group name: ddl

Commands: alter, alterasync, alter_status, create, describe, disable, disable _all, drop, drop_all, enable, enable_all, exists, get_table, Isdisabled, is_ena bled, list, show_fllters

Group name: namespace

Commands: alternamespace, createnamespace, describenamespace, dropnanespac e, listnamespace, list_nanespace_tables

查看HBase集群状态:

status

hbase(maln):002:G> status 1 servers, 0 dead, 2.0000 average load

HBase的基本使用:

创建一个表,并指定列族的名称,create’表名称列族名称1’列族名称2 例如create ’user’/phone’/info

hbase(naln):006:0> create 'user','phone','info 0 row(s) In 6.5266 seconds

=> Hbase::Table - user

创建user表,包含两个列族,一个是phone,一个是info

列出已有的表,并查看表的描述:

hbase(nain):007:0> list

TABLE

user

1 row(s) In 6.1620 seconds => ["user"]

describe ‘表名’

例如,describe user’。

hbase(maln):〇〇8:0> describe 'user'

DESCRIPTION    ENABLED

'user', {NAME => 'info', DATA_BLOCK_ENCODING => 'NO true NE BLOOMFILTER => 'ROW', REPLICATION_SCOPE => '0'

,VERSIONS => '1', COMPRESSION => 'NONE', MINVERSI ONS => '0', TTL => '2147483647', KEEP_DELETED_CELLS => 'false', BLOCKSIZE => '65536', INMEMORY => 'fa Ise', BLOCKCACHE => 'true'}, {NAME =>~'phone', DATA _BL0CK_ENC0DING => 'NONE', BLOOMFILTER => 'ROW', RE PLICATION_SCOPE => '0', VERSIONS => '1', COMPRESSIO N => 'NOnI', MIN_VERSIONS => '0', TTL => *214748364 7', KEEP_DELETEDCELLS => 'false', BLOCKSIZE => '65 536', IN_MEM0RY => 'false', BLOCKCACHE => 'true'}

1 row(s) In 6.0600 seconds list

 

 

新增/删除一个列族。

给表新增一个列族:

alter ^表名'NAME=> '列族名称

例如,alter user’,NAME=>class’。

hbase(nain):010:0> alter 'user',NAME=>'class' Updating all regions with the new schema... 0/1 regions updated.

1/1 regions updated.

Done.

6 row(s) In 2.3880 seconds

 

 

删除表的一个列族:

 

alter i表名i ,NAME=>'列族名称'METHD=>'delete' 例如,alter user’,NAME=>class’,METHOD=>delete’。

hbase(naln):012:0> alter 'user',NAME=>'class',METH0D=>'delete Updating all regions with the new schema...

0/1 regions updated.

1/1 regions updated.

Done.

6 row(s) In 2.3160 seconds

删除一个表:

在使用drop删除一个表之前,必须先将该表disable:

 

disable 'user' drop 'user'

hbase(naln):015:0> disable 'user 0 row(s) In 1.5500 seconds

hbase(naln):016:0> drop 'user'

6 row(s) In 6.2210 seconds

 

如果没有disable表而直接使用drop删除,则会出现如下提示:

hbase(naln):014:0> drop 'user'

ERROR: Table user is enabled. Disable It first.'

Here is some help for this command:

Drop the named table. Table must first be disabled: e.g. "hbase> drop 'tl

给表添加记录:

put '表名''rowkey','列族名称:列名称''

例如,put ’userV1Vinfo:nameVzhangsan’

 

hbase(maln):618:0> put 'user','1','infoinane','zhangsan 0 row(s) in 0.1500 seconds

查看数据。

根据rowkey查看数据:

get '表名称' ,'rowkey

例如,get’user’,’1’

hbase(main):619:0> get 'user'^'l'

COLUMN   CELL

infoinane timestanp=1396534347948, value=zhangsan

1 row(s) In 6.6330 seconds

根据rowkey查看对应列的数据:

get '表名称','rowkey','列族名称:列名称

例如,get’userVl’,’info:name’

hbase(naln):028:6> get 'user','1','infoinane'

COLUMN   CELL

infoinane   tlmestanp=1396534347948, value=zhangsan

1 row(s) In 0.6180 seconds
查看表中的记录总数: count 1表名称1

例如,count’user

hbase(maln):620:6> count 'user 1 row(s) in 0.0670 seconds

查看表中所有记录: scan '表名称'

例如,scan’user

hbase(naln):021:0> scan 'user'

ROW   COLUMN+CELL

1 colunn=infoinane, tlmestanp=1396534347948, value=zhangsan

1 row(s) In 6.6510 seconds

查看表中指定列族的所有记录:

scan I表名I ,{COLUMNS => i列族i}
例如
scan ’user’,{COLUMNS => ’info’}

value=zhangsan

value=zhangsanl

value=zhangsan2

value=zhangsan3

value=zhangsan4

value=zhangsan5

value=zhangsan6

value=zhangsan7

查看表中指定区间的所有记录:

scan i 表名称{COLUMNS => i 列族'LIMIT => 记录数STARTROW => i 开始 rowkey', STOPRW=>'结束 rowkey'}

例如,scan user,{COLUMNS => info,LIMIT =>5, STARTROW => 2,STOPROW=>7}

hbdse(maln):056:6> scan 'user{COLUMNS => 'info',LIMIT =>5, STARTROW => '2',ST0PR W=>'7'}

ROM  COLUMN+CELL

1    colunn=lnfo:name,   timestanp=1396536417856,    value=zhangsanl

2    colunn=lnfo:name,   timestanp=1396535679654,    value=zhangsan2

3    colunn=lnfoinane,   tlnestanp=1396536437093,    value=zhangsan3

4    colunn=lnf:name,  timestanp=1396536443583,    value=zhangsan4

5    colunn=lnf:name,  timestanp=1396536451280,    value=zhangsan5

5 row(s) in 0.0240 seconds

删除数据。

根据rowkey删除列数据:

delete '表名称''rowkey'列簇名称

例如,delete ’userV1Vinf:name’

hbase(naln):036:0> delete 'user','1','Info:name 0 row(s) in 0.0140 seconds根据rowkey删除一行数据: deleteall 1表名称,, 'rowkey

例如,deleteall ’user’,’2

hbase(naln):037:0> deleteall 'user','2 0 row(s) In 6.6366 seconds

本文出自   《大型分布式网站架构设计与实践试读样章》 试读,如果感觉到对你有帮助可以去购买该书



[2]       HBase 的版本需要与 Hadoop 的版本相兼容,详情请见 http://hbase.apache.org/book/configuration.html# hadoop,


原文地址:http://www.itmmd.com/201411/219.html
该文章由 萌萌的IT人 整理发布,转载须标明出处。

产品经理学习笔记(1)-互联网产品经理的进化史   上一篇
下一篇  java Rest学习-第一个Java REST 服务(1)-开发环境搭建

精彩回复
发表评论
姓名:       

《程序员app》专门为程序员量身定做!