HBase是一个分布式的、面向列的开源数据库
Apache HBase是一种Key/Value系统,它运行在HDFS之上。和Hive不一样,Hbase的能够在它的数据库上实时运行,而不是运行MapReduce任务。Hbase被分区为表格,表格又被进一步分割为列簇。列簇必须使用schema定义,列簇将某一类型列集合起来(列不要求schema定义),每一个 key/value对在Hbase中被定义为一个cell,每一个key由row-key,列簇、列和时间戳。在Hbase中,行是key/value映射的集合,这个映射通过row-key来唯一标识。Hbase利用Hadoop的基础设施,可以利用通用的设备进行水平的扩展。
Hive是一种类SQL的引擎,并且运行MapReduce任务。Hive适合用来对一段时间内的数据进行分析查询
Hbase是一种在Hadoop之上的NoSQL 的Key/vale数据库。Hbase非常适合用来进行大数据的实时查询
HBase shell是HBase的一套命令行工具,类似传统数据中的sql概念,可以使用shell命令来查询HBase中数据的详细情况。安装完HBase之后,如果配置了HBase的环境变量,只要在shell中执行hbase shell就可以进入命令行界面
namespace
1 | hbase(main):002:0> create_namespace 'ark' |
##DDL
create命令了。它后面的第一个参数是表名,然后是一系列列簇的列表。每个列簇中可以独立指定它使用的版本数,数据有效保存时间(TTL),是否开启块缓存等信息
1 | create 'ark:t1', {NAME =>'f1',VERSIONS =>1,BLOCKCACHE => true},'f2' |
表也可以在创建时指定它预分割(pre-splitting)的region数和split方法。在表初始建立时,HBase只分配给这个表一个region。这就意味着当我们访问这个表数据时,我们只会访问一个region server,这样就不能充分利用集群资源。HBase提供了一个工具来管理表的region数,即org.apache.hadoop.hbase.util.RegionSplitter和HBase shell中create中的split的配置项。例如:
1 | hbase(main):013:0> exists 'ark:t2' |
通过enable和disable来启用/禁用这个表,相应的可以通过is_enabled和is_disabled来检查表是否被禁用。
1 | hbase(main):017:0> is_enabled 'ark:t2' |
使用alter来改变表的属性,比如改变列簇的属性, 这涉及将信息更新到所有的region
1 | hbase(main):024:0> describe 'ark:t1' |
另外一个非常常用的操作是添加和删除列簇
1 | hbase(main):025:0> alter 'ark:t1','f3' |
删除表需要先将表disable。
1 | hbase(main):032:0> disable 'ark:t1' |
put与get
在HBase shell中,我们可以通过put命令来插入数据。例如我们新创建一个表,它拥有id、address和info三个列簇,并插入一些数据。列簇下的列不需要提前创建,在需要时通过
:来指定即可
1 | create 'member','id','address','info' |
查询
1.查询表中有多少行:count
1 | count 'member' |
2.get操作
1)获取一个id的所有数据
1 | get 'member','Sariel' |
2)获得一个id,一个列簇(一个列)中的所有数据
1 | hbase(main):001:0> get 'member' ,'Sariel','info' |
3.scan操作
1)查询整表数据
1 | hbase(main):002:0> scan 'member' |
2)扫描整个列簇
1 | hbase(main):003:0> scan 'member',{COLUMN=>'info'} |
3)指定扫描其中的某个列
1 | hbase(main):006:0* scan 'member', {COLUMNS=> 'info:birthday'} |
4)除了列(COLUMNS)修饰词外,HBase还支持Limit(限制查询结果行数),STARTROW(ROWKEY起始行。会先根据这个key定位到region,再向后扫描)、STOPROW(结束行)、TIMERANGE(限定时间戳范围)、VERSIONS(版本数)、和FILTER(按条件过滤行)等。比如我们从Sariel这个rowkey开始,找下一个行的最新版本
1 | hbase(main):007:0> scan 'member', { STARTROW => 'Sariel', LIMIT=>1, VERSIONS=>1} |
5)Filter是一个非常强大的修饰词,可以设定一系列条件来进行过滤。比如我们要限制某个列的值等于26
1 | #值包含 |
scan ‘db_demobank626:dim_p’ ,FILTER=>”PrefixFilter(‘profile|xwhov’)”
-s 2000 -S 5000 -t 10 -s 2000 -S 5000 -t 10