内容简介:来自于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中的数据更新本质上是不断追加新的版本,通过compact操作来做版本间的文件合并region的split
集群管理:zookeeper + hmaster + hregionserver
web管理界面: http://host :60010/
hbase数据
HBase逻辑存储结构
row key是一张表中某一列数据的唯一标识。
时间戳,记录数据的更新、版本。
column family是列簇(可以有多个),cf包含一个或多个相关的列column01,column02,.....。
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
以上所述就是小编给大家介绍的《hbase梳理》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
产品经理手册(原书第4版)(白金版)
[美] 琳达·哥乔斯(Linda Gorchels) / 祝亚雄、冯华丽、金骆彬 / 机械工业出版社 / 2017-8 / 65.00
产品经理的职责起点是新产品开发,贯穿产品生命周期的全过程。本书按上下游产品管理进行组织。 在上游的新产品开发流程中,作者阐述了如何从市场、产品、行业、公司的角度规划企划方案,并获得老板、销售部、运营部的资源支持,推进新产品的项目流程,实现所有目标,制定和实施新产品发布。 下游产品的管理核心在于生命周期的管理,营销更是生命周期管理的重中之重。产品经理如何让产品满足客户需求,让客户获得对产......一起来看看 《产品经理手册(原书第4版)(白金版)》 这本书的介绍吧!