Hbase1.2.4 standlone模式安装以及基本概念html
参考官方文档:http://hbase.apache.org/book.html#quickstartapache
新建hbase 目录,数组
➜ hbase pwd /Users/xinxingegeya/IDE/hbase
而后把解压好的hbase 拷贝到当前的hbase目录下。bash
按照官方文档说明的,只须要以下配置,性能
<property> <name>hbase.rootdir</name> <value>file:///Users/xinxingegeya/IDE/hbase/hbase</value> </property> <property> <name>hbase.zookeeper.property.dataDir</name> <value>/Users/xinxingegeya/IDE/hbase/zookeeper</value> </property>
注意这两个路径没必要新建,会自动帮你创建。而后启动hbase。ui
➜ bin pwd /Users/xinxingegeya/IDE/hbase/hbase-1.2.4/bin ➜ bin ./start-hbase.sh starting master, logging to /Users/xinxingegeya/IDE/hbase/hbase-1.2.4/logs/hbase-xinxingegeya-master-Yale-Li.out Java HotSpot(TM) 64-Bit Server VM warning: ignoring option PermSize=128m; support was removed in 8.0 Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=128m; support was removed in 8.0
基本概念spa
Row key 行主键, HBase不支持条件查询和Order by等查询,读取记录只能按Row key(及其range)或全表扫描,所以Row key须要根据业务来设计以利用其存储排序特性(Table按Row key字典序排序如1,10,100,11,2)提升性能。 ===== Column Family(列族) 在表建立时声明,每一个Column Family为一个存储单元。 ===== Column(列) HBase的每一个列都属于一个列族,以列族名为前缀,如列article:title和article:content属于article列族,author:name和author:nickname属于author列族。 Column不用建立表时定义便可以动态新增,同一Column Family的Columns会群聚在一个存储单元上,并依Column key排序,所以设计时应将具备相同I/O特性的Column设计在一个Column Family上以提升性能。 ===== Timestamp HBase经过row和column肯定一份数据,这份数据的值可能有多个版本,不一样版本的值按照时间倒序排序,即最新的数据排在最前面,查询时默认返回最新版本。Timestamp默认为系统当前时间(精确到毫秒),也能够在写入数据时指定该值。 ===== Value 每一个值经过4个键惟一索引,TableName+RowKey+ColumnKey+Timestamp=>value ===== 存储类型 TableName 是字符串 RowKey 和 ColumnName 是二进制值(Java 类型 byte[]) Timestamp 是一个 64 位整数(Java 类型 long) value 是一个字节数组(Java类型 byte[])。
下面就用实例来讲明一下上面的概念。设计
建表语句code
hbase(main):003:0* create 'test', 'cf' 0 row(s) in 1.5090 seconds => Hbase::Table - test
test为表名,cf的列簇的名字。建表的时候必须指定表名和列簇的名字,能够有多个列簇。xml
插入数据语句,
hbase(main):005:0> put 'test','row1','cf:a','value1' 0 row(s) in 0.2070 seconds hbase(main):009:0* put 'test','row2','cf:b','value2' 0 row(s) in 0.0040 seconds hbase(main):010:0> put 'test','row3','cf:c','value3' 0 row(s) in 0.0090 seconds
上面的几个数据依次是:表名,row key ,列簇:列名,值。
其中,cf:a , cf:b , cf:c 表示a , b , c三列都属于同一个列簇cf,可是是不一样的三列,列的名字分别为 a , b , c。
scan 和 get 查询命令
hbase(main):012:0> scan 'test' ROW COLUMN+CELL row1 column=cf:a, timestamp=1481531060401, value=value1 row2 column=cf:b, timestamp=1481531083332, value=value2 row3 column=cf:c, timestamp=1481531091578, value=value3 3 row(s) in 0.0280 seconds hbase(main):013:0> get 'test','row1' COLUMN CELL cf:a timestamp=1481531060401, value=value1 1 row(s) in 0.0640 seconds
get命令 的参数为 表名和row key。
列簇和列的关系以下图所示,
每一个列簇能够有不一样的列。能够动态的增长列簇。
hbase(main):018:0> describe 'test' Table test is ENABLED test COLUMN FAMILIES DESCRIPTION {NAME => 'cf', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'} 1 row(s) in 0.1710 seconds hbase(main):019:0> alter 'test' , NAME => 'cf2' Updating all regions with the new schema... 1/1 regions updated. Done. 0 row(s) in 2.0880 seconds hbase(main):020:0> describe 'test' Table test is ENABLED test COLUMN FAMILIES DESCRIPTION {NAME => 'cf', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'} {NAME => 'cf2', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCODING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REPLICATION_SCOPE => '0'} 2 row(s) in 0.0990 seconds
如今就有了两个列簇,cf 和 cf2 。
=======END=======