一、HBASE shell指令的一些使用
Hbase部署服务器使用的几点常用指令:
进入hbase指令的方式
:hbase shell
直接backspace是无法直接进行删除的,需要配合ctrl+backspace进行删除操作
增加列簇:
alter '表明','列簇名'
alter 'cmcc_sms','safeSurvey'
删除列簇:
alter 'cmcc_sms', {'delete' => 'safeSurvey'}
删除表:
disable 'cmcc_sms_blacklist'
drop 'cmcc_sms_blacklist'
扫描特定列簇的内容:
scan '表名',{COLUMN=>'列簇名'}
scan 'cmcc_sms',{COLUMN=>'safeSurvey'}
扫描表
scan '表名'
插入数据:
put 'cmcc_sms_blacklist','0035','counts:count','3'
修改表中特定列簇的超时时间
hbase(main):126:0> disable 'test' //修改表前,需要先disable 表
hbase(main):114:0> alter "表名",NAME=>'列簇',TTL=>'200' //修改表的列簇超时时间为200s
hbase(main):114:0> enable "test" //使表可用,以供查询
hbase(main):129:0> scan 'test' //此时查询时,表中原来的5条,记录均存在,接下来我们更新其中一条。再查看
二、Hbase java API的一些使用经验
Htemplates 的实现类,只有一些基本的find,get,put,delete接口可以使用,但是要实现比如新建表,增加列簇这种,就需要通过一些其他方式去实现
public void initTables(){ try { HBaseAdmin admin = new HBaseAdmin(configuration()); boolean hastable = admin.tableExists("cmcc_sms_blacklist"); if(hastable){ return; } HTableDescriptor hd=new HTableDescriptor(TableName.valueOf("cmcc_sms_blacklist".getBytes())); HColumnDescriptor hc1=new HColumnDescriptor("counts".getBytes()); //增加列簇 hc1.setMaxVersions(3); hc1.setTimeToLive(1800); //设置超时时间 hd.addFamily(hc1); admin.createTable(hd); //在已有表cmcc_sms,增加列簇safeSurvey TableName tableName = TableName.valueOf("cmcc_sms"); admin.disableTable(tableName); HTableDescriptor descriptor = admin.getTableDescriptor("cmcc_sms".getBytes()); HColumnDescriptor columnDescriptor2 = new HColumnDescriptor("safeSurvey"); descriptor.addFamily(columnDescriptor2); admin.modifyTable(tableName,descriptor); admin.enableTable(tableName); admin.close(); } catch (IOException e) { e.printStackTrace(); } }
实现对指定列簇的列数据进行校验的代码实现
这里主要是对列簇指定列数据过滤,只需要大于0 小于3之间的,然后将rowkey取出来
StringBuilder sb = new StringBuilder(); try { HTable table = new HTable(configuration,"cmcc_sms_blacklist"); FilterList filterList = new FilterList(FilterList.Operator.MUST_PASS_ALL); SingleColumnValueFilter filter1 = new SingleColumnValueFilter(Bytes.toBytes("counts"), Bytes.toBytes("count"), CompareFilter.CompareOp.GREATER_OR_EQUAL, Bytes.toBytes("0")); SingleColumnValueFilter filter2 = new SingleColumnValueFilter(Bytes.toBytes("counts"), Bytes.toBytes("count"), CompareFilter.CompareOp.GREATER_OR_EQUAL, Bytes.toBytes("3")); filterList.addFilter(filter1); filterList.addFilter(filter2); Scan scan = new Scan(); scan.setFilter(filterList); ResultScanner rs = table.getScanner(scan); for (Result r : rs){ for(Cell cell : r.rawCells()){ logger.info("Rowkey :{} Values:{} Timestamp:{} ",Bytes.toString(r.getRow()), Bytes.toString(CellUtil.cloneValue(cell)),cell.getTimestamp()); sb.append(Bytes.toString(r.getRow())).append("\n"); } } table.close(); } catch (IOException e) { logger.info("getBlacklist Exception {}",e); }
二、Hbase java API的完整接口
具体可以参阅以下文档,自认为还算比较齐全的
相关参考资料的链接:https://blog.csdn.net/blue_jjw/article/details/41947567 [Hbase的官方文档中文版]
https://www.csdn.net/gather_22/MtTaEgysMDM1NC1ibG9n.html
https://cloud.tencent.com/developer/article/1355413
https://www.csdn.net/gather_25/MtTaEg0sMDAxMC1ibG9n.html
https://my.oschina.net/u/3754001/blog/1803426
https://blog.csdn.net/u010967382/article/details/37878701