hbase梳理

栏目: 数据库 · 发布时间: 5年前

内容简介:来自于BigTable。HBase是参考google的bigtable的一个开源产品,建立在hdfs之上的一个提供高可靠性、高性能、列存储、可伸缩、实时读写的数据库系统。

what's

中文文档

来自于BigTable。

HBase是参考google的bigtable的一个开源产品,建立在hdfs之上的一个提供高可靠性、高性能、列存储、可伸缩、实时读写的数据库系统。

是一种介于nosql和RDBMs之间的一种数据库系统,仅支持通过rowkey和range进行数据的检索,主要存储非结构化数据和半结构化数据。

HBase和Hadoop一样,目标是通过横向扩展,添加普通机器来增加存储性能和计算性能。

HBase特点:大(一个表可以有上亿行以及百万级的行)、面向行存储、稀疏(由于null不占用存储空间,所有表结果可以设计的非常稀疏)。

架构

HBase使用Zookeeper进行集群节点管理,当然HBase自身集成了一个ZK系统,不过一般情况在实际生产环境中不使用。

HBase由master和regionserver两类节点(如果使用HBase自带的zk服务,那么还有HQuorumPeer进程)。

Hbase支持提供backup master进行master备份。其中master节点负责和zk进行通信以及存储regionserver的相关位置信息,regionserver节点实现具体对数据的操作,最终数据存储在hdfs上。

物理存储:hbase的持久化数据是存放在hdfs上

存储管理:一个表是划分为很多region的,这些region分布式地存放在很多regionserver上(1台机器对应一个regionServer)。region内部还可以划分为store,store内部有memstore和storefile

hbase梳理

版本管理:hbase中的数据更新本质上是不断追加新的版本,通过compact操作来做版本间的文件合并region的split

集群管理:zookeeper + hmaster + hregionserver

web管理界面: http://host :60010/

hbase数据

HBase逻辑存储结构

row key是一张表中某一列数据的唯一标识。

时间戳,记录数据的更新、版本。

column family是列簇(可以有多个),cf包含一个或多个相关的列column01,column02,.....。

hbase梳理

HBase物理存储结构

hbase梳理

Hbase Shell操作

$ bin/hbase shell 进入hbase的 shell 客户端,对数据的操作主要分为DDL和DML两大类。不用";"。shift+delete才能前删。

命名空间

类似关系型数据库中的database,作用是将hbase的表按照业务作用分割开,有益于维护。

Hbase默认有两个命名空间,分别是hbase和default。其中hbase命名空间存储hbase自身的表信息,default存储用户创建的表。

create_namespace 创建命名空间, alter_namespace 命名空间修改 describe_namespace 显示命名空间描述信息, drop_namespace`删除命名空间,注意删除的命名空间内不能有table存在,也就是说只能删除空的namespace。

list_namespace 显示所有命名空间, list_namespace_tables 显示对于命名空间中的table名称,参数可以是正则形式。后面参数放引号里。

list

作用:显示hbase表名称,类似 mysql 中的show tables;

可以通过指定命名空间来查看对应命名空间中的表,默认是显示所有用户表,也支持模糊匹配。类似命令list_namespace_tables查看对应命名空间内有那些表。

create

> help "create" 可查看用法。

创建一个表,指定命名空间、表名

hbase> create 'ns1:t1' 会提示表必须至少有一个列簇!

hbase> create 'ns1:table1', {NAME => 'f1', VERSIONS => 5} 这里指定了一个列簇f1,并增加版本信息。

还可以加更多信息 hbase> create 't1', {NAME => 'f1', VERSIONS => 1, TTL => 2592000, BLOCKCACHE => true}

hbase> create 't1', {NAME => 'f1', CONFIGURATION => {'hbase.hstore.blockingStoreFiles' => '10'}}

还可以为表加配置信息 hbase> create 't1', {NAME => 'f1', VERSIONS => 5}, METADATA => { 'mykey' => 'myvalue' }hbase> create 'ns1:t1', 'f1', SPLITS => ['10', '20', '30', '40']hbase> create 't1', 'f1', SPLITS_FILE => 'splits.txt', OWNER => 'johndoe'

hbase> create 'ns1:table2', {NAME => 'f1'}, {NAME => 'f2'}, {NAME => 'f3'} 指定了多个列簇。

简写: hbase> create 't1', 'f1', 'f2', 'f3'

>describe 'table1' 查看表的描述信息

创建预分区表

默认情况的情况下,创建一个HBase表,自动为表分配一个Region。

create 'table_logs', 'info', SPLITS => ['20151001000000000', '20151011000000000', '20151021000000000']

3+1个region

drop

删除用户表之前需要将表设置为disable的,然后才可以删除。

其实在hbase中如果需要对已有表进行ddl操作,均需要将其disable,在ddl操作完成后,再进行enable操作即可。

> disable '[namespace_name:]table_name'

> drop '[namespace_name:]table_name'

put

put命令是进行数据添加的命令。

> put '[namespace_name:]table_name', 'rowkey', 'family:[column]', 'value' [, timestamp] [, {ATTRIBUTES=>{'mykey'=>'myvalue'}, VISIBILITY=>'PRIVATE|SECRET'}]
示例: > put 'users','row1','f1:id','1'
>put 'user', '10001', 'info:name', 'zhangsan'

分别指定表名(可以不带命名空间),列簇名,列名(指定所在的列簇),值,默认时间戳

gives you a reference to the table named 't1', on which you can then call methods.

> t=get_table 'cyan:table2' 得到了一个引用后 t.put 'r3', 'f1:id', '9'
> t.get 'r3'
也可以用这种方式创建表 hbase> t1 = create 't1', 'f1'

delete

删除某列column数据,

> delete '[namespace:]table_name', 'rowkey', 'family:column'
> delete 'user', '10001', 'info:age'

如果需要删除当然rowkey的所有列数据,那么可以使用deleteall命令。

> deleteall 'user', '10001' 10001的全没了

truncate

是清空数据库,当我们数据库中的数据比较多的时候,我们可以选择该命令将数据库清空。

> truncate '[namespace_name:]table_name'

查询数据

HBase数据查询有三种方式:

get

依据rowkey查询,最快的。

获取对应表中对应rowkey的数据。默认获取最新版本的全部列数据,可以通过时间戳指定版本信息,也可以指定获取的列。

> get '[namespace_name:]table_name', 'rowkey'
示例: > get 'users','row1'

>get 'user', '10001', 'info:name' 得到该row的name值

>get 'user', '10001', 'info:name', 'info:age' 得到该row的name值和age值

scan range

通过指定column和filter等相关信息进行数据的过滤。范围查询都写在"{}"中。用的最多。

> scan 'users', {COLUMN=>['f1:id']} 会返回有列簇f1且列名为id的row的条数,还有该列的值。

> scan 'users', {COLUMN=>['f1:id','f2:name']} 会返回有列簇f1且列名为id的 或 会返回有列簇f2且列名为name的 row的条数,还有该列的值。

> scan 'users', {STARTROW=>'row1',ENDROW=>'row2'} 开始扫描的rowkey,结束扫描的rowkey,获取行数等信息。包头不包尾!

> scan 'users', {LIMIT=>1} 返回前1条row。

常用filter命令有:ColumnPrefixFilter,MultipleColumnPrefixFilter,RowFilter,SingleColumnValueFilter,SingleColumnValueExcludeFilter等。

需要注意的是:在指定的value之前需要加'binary:'!最后会转为是二进制的字符串数组。

> scan 'users',{FILTER=>"SingleColumnValueFilter('f','id',=,'binary:1)"} 指定了f列簇下列名为id且值为1

> scan 'users', {FILTER=>"RowFilter(>=,'binary:row8')"}
> scan 'users', {FILTER=>"SingleColumnValueFilter('f','id',=,'binary:2')"}

`> scan 'users', {FILTER=>"SingleColumnValueFilter('f','id',<,'binary:3') OR RowFilter(>,'binary:row7')"}

> scan 'users', {FILTER=>"ColumnPrefixFilter('id')"}
> scan 'users', {FILTER=>"MultipleColumnPrefixFilter('id', 'name')"}

各种条件都可以写在"{}"中,用逗号隔开取交集。

scan

全表扫描。

> scan '[namespace_name:]table_name'

示例: > scan 'users'

count

是统计hbase表行数的一个命令,由于相当于一个内置的mapreduce程序,所以当数据量比较大的时候可以选择使用协处理器方式计算行数。

> count '[namespace:]table_name' [INTERVAL => 1000,] [CACHE => 10]

默认情况下INTERVAL是1000(间隔数),CACHE是10。

status

作用:查看hbase集群状态信息。

参数:simple,summary,detailed;默认是summary。

Hbase java api

http://hbase.apache.org/apidocs/

HBase MapReduce

http://www.kuqin.com/database...


以上所述就是小编给大家介绍的《hbase梳理》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

产品经理手册(原书第4版)(白金版)

产品经理手册(原书第4版)(白金版)

[美] 琳达·哥乔斯(Linda Gorchels) / 祝亚雄、冯华丽、金骆彬 / 机械工业出版社 / 2017-8 / 65.00

产品经理的职责起点是新产品开发,贯穿产品生命周期的全过程。本书按上下游产品管理进行组织。 在上游的新产品开发流程中,作者阐述了如何从市场、产品、行业、公司的角度规划企划方案,并获得老板、销售部、运营部的资源支持,推进新产品的项目流程,实现所有目标,制定和实施新产品发布。 下游产品的管理核心在于生命周期的管理,营销更是生命周期管理的重中之重。产品经理如何让产品满足客户需求,让客户获得对产......一起来看看 《产品经理手册(原书第4版)(白金版)》 这本书的介绍吧!

JS 压缩/解压工具
JS 压缩/解压工具

在线压缩/解压 JS 代码

随机密码生成器
随机密码生成器

多种字符组合密码

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具