前言
每天进行hbase 的shell操作,极为不便,虽有hive可以进行查询,但是效率之低,时间之慢也非常无奈,于是便想着自己写一些接口可以实现hbase的普通查询、统计、分组等功能,经过近1天的努力,终于完成了一些功能,还在不断完善,希望可以给一些hbase的同行们提供一些方便。
思路
将开发好的hsql.jar上传到hbase的安装目录下:
[root@hadoop3 hbase-0.90.4-cdh3u3]# ls
bin docs hbase-webapps logs src
CHANGES.txt hbase-0.90.4-cdh3u3.jar hsql.jar NOTICE.txt
cloudera hbase-0.90.4-cdh3u3-tests.jar lib pom.xml
conf hbase-env.sh LICENSE.txt README.txt
然后拷贝文件hsql到hbase的安装目录bin/下:
[root@hadoop3 hbase-0.90.4-cdh3u3]# cd bin
[root@hadoop3 bin]# ls
add_table.rb hbase-daemon.sh local-regionservers.sh rolling-restart.sh
check_meta.rb hbase-daemons.sh master-backup.sh set_meta_block_caching.rb
copy_table.rb hirb.rb region_mover.rb set_meta_memstore_size.rb
graceful_stop.sh hsql regionservers.sh start-hbase.sh
hbase loadtable.rb rename_table.rb stop-hbase.sh
hbase-config.sh local-master-backup.sh replication zookeepers.sh
给hsql赋可执行权限:
[root@hadoop3 bin]# chmod 755 hsql
[root@hadoop3 bin]# ll hsql
-rwxr-xr-x 1 root root 0 Jan 8 17:14 hsql
hsql文件内容:
#/bin/sh
sql=$*
echo $sql
hadoop jar ../HbaseSql.jar "$sql"
不好意思,关于hsql.jar暂时不开源,待完善后再考虑。
支持的sql语句类似如下:
1.#号替代*号
select # from item_use_38 where rowkey[20120901,20120901];
2.limit关键字
select # from item_use_38 where rowkey[20120901,20120901] limit 10;
3.多字段
select user,level,amount from item_use_38 where rowkey[20120901,20120901];
4.统计计数
select count(amount) from item_use_38 where rowkey[20120901,20120901];
4.统计求和
select sum(amount) from item_use_38 where rowkey[20120901,20120901];
5.分组计数
select user,level,count(amount) from item_use_38 where rowkey[20120901,20120901] group by user,level;
6.分组求和
select user,level,sum(amount) from item_use_38 where rowkey[20120901,20120901] group by user,level;
1.查询
目前支持功能:
- 所有表中字段的*(以#替代)功能;
- 支持字段间以逗号隔开的操作的;
- 同时,参考了hive中的limit限制;
- 也可以不带limit限制;
- 查询条件目前只能支持rowkey级别。
[root@hadoop9 ~]# hsql 'select # from item_use_38 where rowkey[20120901,20120901] limit 10'
13/01/08 09:33:13 INFO zookeeper.ZooKeeper: Client environment:zookeeper.version=3.3.4-cdh3u3--1, built on 01/26/2012 18:07 GMT
13/01/08 09:33:13 INFO zookeeper.ZooKeeper: Client environment:host.name=hadoop3
13/01/08 09:33:13 INFO zookeeper.ZooKeeper: Client environment:java.version=1.6.0_24
13/01/08 09:33:13 INFO zookeeper.ZooKeeper: Client environment:java.vendor=Sun Microsystems Inc.
13/01/08 09:33:13 INFO zookeeper.ZooKeeper: Client environment:java.home=/home/hadoop/jdk1.6.0_24/jre
===============================