龙空技术网

海量数据高速存储数据库:HBase

飞禹德蒙 1378

前言:

当前姐妹们对“phphbase”大概比较讲究,我们都想要剖析一些“phphbase”的相关文章。那么小编同时在网摘上收集了一些对于“phphbase””的相关内容,希望咱们能喜欢,朋友们一起来了解一下吧!

HBase简介

HBase– Hadoop Database,是一个高可靠性、高性能、面向列、可伸缩的分布式存储系统,利用HBase技术可在廉价PC Server上搭建起大规模结构化存储集群,海量数据的快速随机访问。

上图描述了Hadoop EcoSystem中的各层系统,其中HBase位于结构化存储层,Hadoop HDFS为HBase提供了高可靠性的底层存储支持,Hadoop MapReduce为HBase提供了高性能的计算能力,Zookeeper为HBase提供了稳定服务和failover机制。

此外,Pig和Hive还为HBase提供了高层语言支持,使得在HBase上进行数据统计处理变的非常简单。 Sqoop则为HBase提供了方便的RDBMS数据导入功能,使得传统数据库数据向HBase中迁移变的非常方便。

Hbase是一个面向列存储的分布式存储系统,它的优点在于可以实现高性能的并发读写操作,同时Hbase还会对数据进行透明的切分,这样就使得存储本身具有了水平伸缩性。

有需要大数据的学习资料的同学可以在后台私信回复“大数据”领取大数据学习资料一份哦~

HBase的构成

物理上来说,HBase是由三种类型的服务器以主从模式构成的。这三种服务器分别是:Region server,HBase HMaster,ZooKeeper。

其中Region server负责数据的读写服务。用户通过沟通Region server来实现对数据的访问。

HBase HMaster负责Region的分配及数据库的创建和删除等操作。

ZooKeeper作为HDFS的一部分,负责维护集群的状态(某台服务器是否在线,服务器之间数据的同步操作及master的选举等)。

另外,Hadoop DataNode负责存储所有Region Server所管理的数据。HBase中的所有数据都是以HDFS文件的形式存储的。出于使Region server所管理的数据更加本地化的考虑,Region server是根据DataNode分布的。HBase的数据在写入的时候都存储在本地。但当某一个region被移除或被重新分配的时候,就可能产生数据不在本地的情况。这种情况只有在所谓的compaction之后才能解决。

NameNode负责维护构成文件的所有物理数据块的元信息(metadata)。

HBase结构如下图所示:

Regions

HBase中的表是根据row key的值水平分割成所谓的region的。一个region包含表中所有row key位于region的起始键值和结束键值之间的行。集群中负责管理Region的结点叫做Region server。Region server负责数据的读写。每一个Region server大约可以管理1000个region。

HBase的HMaster

HMaster负责region的分配,数据库的创建和删除操作。

具体来说,HMaster的职责包括:

调控Region server的工作 在集群启动的时候分配region,根据恢复服务或者负载均衡的需要重新分配region。监控集群中的Region server的工作状态。(通过监听zookeeper对于ephemeral node状态的通知)。管理数据库 提供创建,删除或者更新表格的接口。

ZooKeeper

HBase利用ZooKeeper维护集群中服务器的状态并协调分布式系统的工作。ZooKeeper维护服务器是否存活,是否可访问的状态并提供服务器故障/宕机的通知。ZooKeeper同时还使用一致性算法来保证服务器之间的同步。同时也负责Master选举的工作。需要注意的是要保证良好的一致性及顺利的Master选举,集群中的服务器数目必须是奇数。例如三台或五台。

HBase各组成部分之间的合作

ZooKeeper用来协调分布式系统的成员之间共享的状态信息。Region Server及HMaster也与ZooKeeper连接。ZooKeeper通过心跳信息为活跃的连接维持相应的ephemeral node。如下图所示:

一个Region server都在ZooKeeper中创建相应的ephemeral node。HMaster通过监控这些ephemeral node的状态来发现正常工作的或发生故障下线的Region server。HMaster之间通过互相竞争创建ephemeral node进行Master选举。ZooKeeper会选出区中第一个创建成功的作为唯一一个活跃的HMaster。活跃的HMaster向ZooKeeper发送心跳信息来表明自己在线的状态。不活跃的HMaster则监听活跃HMaster的状态,并在活跃HMaster发生故障下线之后重新选举,从而实现了HBase的高可用性。

如果Region server或者HMaster不能成功向ZooKeeper发送心跳信息,则其与ZooKeeper的连接超时之后与之相应的ephemeral node就会被删除。监听ZooKeeper状态的其他节点就会得到相应node不存在的信息,从而进行相应的处理。活跃的HMaster监听Region Server的信息,并在其下线后重新分配Region server来恢复相应的服务。不活跃的HMaster监听活跃HMaster的信息,并在起下线后重新选出活跃的HMaster进行服务。

Hbase访问方式

Hbase的访问方式

1、Native Java API:最常规和高效的访问方式;

2、HBase Shell:HBase的命令行工具,最简单的接口,适合HBase管理使用;

3、Thrift Gateway:利用Thrift序列化技术,支持C++,PHP,Python等多种语言,适合其他异构系统在线访问HBase表数据;

4、REST Gateway:支持REST 风格的Http API访问HBase, 解除了语言限制;

5、MapReduce:直接使用MapReduce作业处理Hbase数据;

6、使用Pig/hive处理Hbase数据。

HBase 基本操作

1.1 连接HBase

使用hbase shell命令来连接正在运行的Hbase实例,该命令位于HBase安装包下的bin/目录。HBase Shell提示符以>符号结束。

$ ./bin/hbase shellhbase(main):001:0>

1.2 显示HBase Shell 帮助文档

输入help并按Enter键,可以显示HBase Shell的基本使用信息,和我们接下来会列举的一些命令类似。需要注意的是,表名,行,列都必须包含在引号内。

1.3 退出HBase Shell

使用quit命令,退出HBase Shell 并且断开和集群的连接,但此时HBase仍然在后台运行。

1.4 查看HBase状态

hbase(main):024:0>status3 servers, 0 dead,1.0000 average load

1.5 关闭HBase

和bin/start-hbase.sh开启所有的HBase进程相同,bin/stop-hbase.sh用于关闭所有的HBase进程。

$ ./bin/stop-hbase.shstopping hbase....................$

二、数据定义(DDL)操作

2.1 创建新表

使用create命令来创建一个新的表。在创建的时候,必须指定表名和列族名。

hbase(main):001:0> create 'test', 'cf'0 row(s) in 0.4170 seconds=> Hbase::Table - test

2.2 列举表信息

使用list命令:

hbase(main):002:0> list 'test'TABLEtest1 row(s) in 0.0180 seconds=> ["test"]

2.3 获取表描述

使用describe命令:

hbase(main):003:0> describe 't'DESCRIPTION ENABLED 't', {NAME => 'f', DATA_BLOCK_ENCODING => 'NONE', BLOOMFILTER => 'ROW', REPLICATION_ true SCOPE => '0', VERSIONS => '1', COMPRESSION => 'NONE', MIN_VERSIONS => '0', TTL => '2 147483647', KEEP_DELETED_CELLS => 'false', BLOCKSIZE => '65536', IN_MEMORY => 'false ', BLOCKCACHE => 'true'}1 row(s) in 1.4430 seconds

2.4 删除表

使用drop命令实现删除表的功能:

hbase(main):011:0> drop 'test'0 row(s) in 0.1370 seconds

2.5 检查表是否存在

hbase(main):021:0>exists 'member'Table member doesexist 0 row(s) in 0.1610seconds

三、数据管理(DML)操作

3.1 向表中插入数据

使用put命令,将数据插入表中:

hbase(main):003:0> put 'test', 'row1', 'cf:a', 'value1'0 row(s) in 0.0850 secondshbase(main):004:0> put 'test', 'row2', 'cf:b', 'value2'0 row(s) in 0.0110 secondshbase(main):005:0> put 'test', 'row3', 'cf:c', 'value3'0 row(s) in 0.0100 seconds

可以看到,在本例中,一共插入了三条数据,一次一条。第一次插入到row1行,cf/:列,插入值为value1。所有列在HBase中有一个列族前缀。本例中的cf,后面跟着一个冒号还有一个列限定后缀,本例中是a。

3.2 一次性扫描全表数据

一种获取HBase数据的方法是扫描,使用scan命令来扫描表的数据。可以限制限制扫描的范围,在本例中,获取的是所有的数据。

hbase(main):006:0> scan 'test'ROW COLUMN+CELL row1 column=cf:a, timestamp=1421762485768, value=value1 row2 column=cf:b, timestamp=1421762491785, value=value2 row3 column=cf:c, timestamp=1421762496210, value=value33 row(s) in 0.0230 seconds

3.3 获取一个行数据

使用get命令来获得某一行的数据:

hbase(main):007:0> get 'test', 'row1'COLUMN CELL cf:a timestamp=1421762485768, value=value11 row(s) in 0.0350 seconds

3.4 更新一条数据

使用put命令,本例中,将shiyanlou地址改为E

hbase(main):004:0>put 'company','shiyanlou','info:address' ,'E'0 row(s) in 0.0210secondshbase(main):005:0>get 'company','shiyanlou','info:address' COLUMN CELL  info:address timestamp=1321586571843, value=E 1 row(s) in 0.0180seconds

3.5 禁用一个表

如果你想要删除一个表或是修改它的设置,或者是其它的情况,都需要首先禁用该表。使用disable命令禁用表,enable命令重新启用表。

hbase(main):008:0> disable 'test'0 row(s) in 1.1820 secondshbase(main):009:0> enable 'test'0 row(s) in 0.1770 seconds

标签: #phphbase