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 所有未指定命名空间的表都自动进入该命名空间