您的位置:首页 > 运维架构 > Shell

第六章 hbase shell 命令

2014-01-06 13:36 211 查看
hbase shell命令 描述
alter修改列族(Column Family)模式
count统计表中行的数量
create创建表
describe显示表相关的详细信息
delete删除指定对象的值(可以为表,行,列对应的值,另外也可以指定时间戳的值)
deleteall删除指定行的所有元素值
disable使表无效
drop删除表
enable使表有效
exists测试表是否存在
exit退出hbase shell
get获取行或单元(cell)的值
incr增加指定表,行或列的值
list列出hbase中存在的所有表
put向指向的表单元添加值
tools列出hbase所支持的工具
scan通过对表的扫描来获取对用的值
status返回hbase集群的状态信息
shutdown关闭hbase集群(与exit不同)
truncate重新创建指定表
version返回hbase版本信息
需要注意shutdown与exit之间的不同:shutdown表示关闭hbase服务,必须重新启动hbase才可以恢复,exit只是退出hbase shell,退出之后完全可以重新进入。

hbase使用坐标来定位表中的数据,行健是第一个坐标,下一个是列族。

hbase是一个在线系统,和hadoop mapreduce的紧密结合又赋予它离线访问的功能。

hbase接到命令后存下变化信息或者写入失败异常的抛出,默认情况下。执行写入时会写到两个地方:预写式日志(write-ahead log,也称hlog)和memStore,以保证数据持久化。memStore是内存里的写入缓冲区。客户端在写的过程中不会与底层的HFile直接交互,当menStore写满时,会刷新到硬盘,生成一个新的HFile.HFile是hbase使用的底层存储格式。menStore的大小由hbase-site.xml文件里的系统级属性hbase.hregion.memstore.flush.size来定义。

hbase在读操作上使用了LRU缓存机制(BlockCache),BlockCache设计用来保存从HFile里读入内存的频繁访问的数据,避免硬盘读。每个列族都有自己的BlockCache。BlockCache中的Block是hbase从硬盘完成一次读取的数据单位。Block是建立索引的最小数据单位,也是从硬盘读取的最小数据单位。如果主要用于随机查询,小一点的block会好一些,但是会导致索引变大,消耗更多内存,如果主要执行顺序扫描,大一点的block会好一些,block变大索引项变小,因此节省内存。



数据模型概括:

表(table)---------hbase用表来组织数据。表名是字符串(String),由可以在文件系统路径里使用的字符组成。

行(row)---------在表里,数据按行存储。行由行健(rowkey)唯一标识。行健没有数据类型,总是视为字节数组byte[].

列族(column family)-----------行里的数据按照列族分组,列族也影响到hbase数据的物理存放。因此,它们必须事前定义并且不轻易修改。表中每行拥有相同列族,尽管行不需要在每个列族里存储数据。列族名字是字符串,由可以在文件系统路径里使用的字符组成。

列限定符(column qualifier)--------列族里的数据通过列限定符或列来定位。列限定符不必事前定义。列限定符不必在不同行之间保持一致,就像行健一样,列限定符没有数据类型,总是视为字节数组byte[].

单元(cell)-------行健,列族和列限定符一起确定一个单元。存储在单元里的数据称为单元值(value),值也没有数据类型,总是视为字节数组byte[].

时间版本(version)--------单元值有时间版本,时间版本用时间戳标识,是一个long。没有指定时间版本时,当前时间戳作为操作的基本。hbase保留单元值时间版本的数量基于列族进行配置。默认数量是3个。

hbase在表里存储数据使用的是四维坐标系统,依次是:行健,列族,列限定符和时间版本。 hbase按照时间戳降序排列各时间版本,其他映射建按照升序排序。

hbase把数据存放在一个提供单一命名空间的分布式文件系统上。一张表由多个小一点的region组成,托管region的服务器叫做regionserver.单个region大小由配置参数hbase.hregion.max.filesize决定,当一个region大小变得大于该值时,会切分成2个region.

hbase是一种搭建在hadoop上的数据库。依靠hadoop来实现数据访问和数据可靠性。hbase是一种以低延迟为目标的在线系统,而hadoop是一种为吞吐量优化的离线系统。互补可以搭建水平扩展的数据应用。

hbase表设计:

hbase表很灵活,可以用字符数组形式存储任何东西。在同一列族里存储相似访问模式的所有东西。

索引建立在keyvalue对象的key部分上,key由行健,列限定符和时间戳按次序组成。高表可能支持你把运算复杂度降到O(1),但是要在原子性上付出代价。

hbase不支持跨行事务,列限定符可以用来存储数据,列族名字的长度影响了通过网络传回客户端的数据大小(在keyvalue对象里),所以尽量简练。

散列支持定长键和更好的数据分布,但是失去排序的好处。设计hbase模式时进行反规范化处理是一种可行的办法。从性能观点看,规范化为写做优化,而反规范化为读做优化。

1.创建表,其中users是表名,info是users的列族。hbase中的表至少有一个列族.它们之中,列族直接影响hbase数据存储的物理特性。

hbase(main):011:0>create 'users','info'

0 row(s) in 1.2210seconds

2.获得表的描述.通过list可以列出所有已创建的表

hbase(main):012:0>list

TABLE

users

1 row(s) in 0.0160seconds

3.使用describe命令可以看到这个表的所有默认参数

hbase(main):006:0>describe 'users'

DESCRIPTION ENABLED

{NAME => 'users', FAMILIES => [{NAME=> 'address', BLOOMFILTER => 'NONE', REPLICATION_SCOPE => '0', true

VERSIONS => '3', COMPRESSION => 'NONE',TTL => '2147483647', BLOCKSIZE => '65536', IN_MEMORY => 'fa

lse', BLOCKCACHE => 'true'}, {NAME =>'info', BLOOMFILTER => 'NONE', REPLICATION_SCOPE => '0', VERSI

ONS => '3', COMPRESSION => 'NONE', TTL=> '2147483647', BLOCKSIZE => '65536', IN_MEMORY => 'false',

BLOCKCACHE => 'true'}]}

1 row(s) in 0.0230seconds
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: