HBASE shell 常用命令

HBase即Hadoop数据库,是一个分布式的、面向列的开源数据库,是google的bigtable的开源实现。HBase是Apache的Hadoop项目的顶级项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的列式数据库

基本命令:

hbase shell --进入hbase shell 模式

help查看基本命令集合

help command 查看命令帮助

list看库中所有表

status 查看当前运行服务器状态

version 版本查询

exits '表名字' 判断表存在

describe 'tablename' 查看表属性

shell 模式命令行删除:ctrl+Backspace


一,建表

基本命令:

--简单建表:

hbase> create 'table_name',{NAME=>'columnFamily'}<, {NAME=>'columnFamily2'}...>
=====>(更简化版本):create 'table_name','columnFamily'
--指定版本数
hbase> create 'table_name',  {NAME=>'columnFamily,'VERSIONS => }

--指定参数

DATA_BLOCK_ENCODING => 'NONE', //数据块编码方式设置 参见:http://hbase.apache.org/book.html#data.block.encoding.enable

BLOOMFILT => 'ROW', //参见:http://hbase.apache.org/book.html#bloom.filters.when

REPLICATION_SCOPE => '0', //配置HBase集群replication时需要将该参数设置为1. //参见:http://blog.cloudera.com/blog/2012/08/hbase-replication-operational-overview/?utm_sourc

VERSIONS => '1', //设置保存的版本数 COMPRESSION => 'NONE', //设置压缩算法 MIN_VERSIONS => '0', //最小存储版本数

TTL => 'FOREVER', //设置保存数据时间 单位:s 参见:http://hbase.apache.org/book.html#ttl

KEEP_DELETED_CELLS => 'false', //参见:http://hbase.apache.org/book.html#cf.keep.deleted

BLOCKSIZE => '65536', //设置HFile数据块大小(默认64kb)

IN_MEMORY => 'false',//设置激进缓存,优先考虑将该列族放入块缓存中,//针对随机读操作相对较多的列族可以设置该属性为true

BLOCKCACHE => 'true' //数据块缓存属性

示例:

create 'table_name',

 {NAME=>'cf1',BLOOMFILTER=>'ROWCOL',VERSIONS=>'1',TTL=>'15768000',MIN_VERSIONS=>'0',COMPRESSION=>'SNAPPY',BLOCKCACHE=>‘false'},{NAME => 'cf2',BLOOMFILTER => 'ROWCOL', VERSIONS => '1', TTL => '15768000', MIN_VERSIONS => '0',COMPRESSION => 'SNAPPY', BLOCKCACHE => 'false'}

二,清空&删除

清空:truncate 'table_name'

删除:先disable 在drop:   (1)     disable 'table_name',    (2)    drop  'table_name'

三,修改表

需要先disable   'table_name',修改完成后enable    'table_name'

示例:

alter 'table_name',{NAME=>'cf',TTL=>'xxxxxxx'},{NAME=>'col', TTL=>'xxxxxxx'}

四,查询

**用get的方法,指定rowKey,columnFamily,column等信息查询

*指定row范围,指定 column
scan 'tableName',{COLUMN=>'family:columnName',STARTROW=>'startRow',ENDROW=>'endRow',LIMIT=>XX}
*谁的值=test
scan 'test1', FILTER=>"ValueFilter(=,'binary:test')"
*对于所有的数据,进行扫面,进行匹配的row输出
scan 'test1', FILTER=>"ValueFilter(=,'substring:88')"
*对于指定的列C2,扫描符合条件的row
scan 'test1', FILTER=>"ColumnPrefixFilter('c2') AND ValueFilter(=,'substring:88')" 【OR ValueFilter(=,'substring:88') 多条件支持】
*匹配ROW的开始条件
scan 'test1', FILTER => "PrefixFilter ('user1')"
*从指定的ROW开始,找到开头匹配的row
scan 'test1', {STARTROW=>'user1|ts2', FILTER => "PrefixFilter ('user1')"}
*指定开始结束的row范围
scan 'test1', {STARTROW=>'user1|ts2', STOPROW=>'user2'}
*查询rowkey里面包含ts3的
import org.apache.hadoop.hbase.filter.CompareFilter
import org.apache.hadoop.hbase.filter.SubstringComparator
import org.apache.hadoop.hbase.filter.RowFilter
scan 'test1', {FILTER => RowFilter.new(CompareFilter::CompareOp.valueOf('EQUAL'), SubstringComparator.new('ts3'))}
*查询rowkey里面包含ts的
import org.apache.hadoop.hbase.filter.CompareFilter
import org.apache.hadoop.hbase.filter.SubstringComparator
import org.apache.hadoop.hbase.filter.RowFilter
scan 'test1', {FILTER => RowFilter.new(CompareFilter::CompareOp.valueOf('EQUAL'), SubstringComparator.new('ts'))}


五,增

shell 端增加数据只能单条插:

hbase> put 'tableName','rowKey','columnFamily:column','value'


对于多用户环境,需要考虑表空间权限等,则需要:

1,创建表空间 :create_namespace 'namespace'

2,创建表:create  'namespace:tableName','columnFamily'

3,删除空间:drop_namespace 'namespace'

 hbase有两个系统内置的预定义命名空间
     --hbase   系统命名空间,用于包含hbase的内部表 
     --default 所有未指定命名空间的表都自动进入该命名空间

你可能感兴趣的:(hbase)