HBase中我认为比较常用的两个类:Scan和Filter
学习HBase一段时间后,我认为HBase中比较常用,同时也是必须掌握的两个API是Scan和Filter。如下是我的理解:
1.Scan ---- 扫描类
作用:用来对一个指定Table进行按行扫描,从而得到属于[起始行健,终止行健)的扫描结果
使用场合:单纯的扫描用途;用于MapReduce计算的输入
2.Filter --- 过滤类
作用:用来提前在Server端,对要返回的数据,按照定义好的要求进行过滤;从而降低从Server到Client的数据量,进而降低对网络IO的影响
使用场合:与Scan配合使用
种类:有HBase定义好的几种Filter,也有提供基于FilterBase进行自定义过滤器的方法。特别要注意的是:Filter的作用是过滤掉东西,而不是保留东西。因此其返回true,则意味着成功过滤掉了;返回false,表示没有被过滤掉。
3.举例:
HTable t = new HTable(conf, "twits");
Scan s = new Scan(startRowkey, endRowkey); //构造Scan对象,此对象会返回[startRowkey,endRowkey)范围的记录。特别的,HBase里面的行健是按照字典顺序排列的(可以和lucene里面的索引的顺序进行类比吧?);而且startRowkey和endRowkey也无须真实存在,HBase会自动找到最靠近其的实际rowkey作为边界
//当然,这里还可以加入过滤器,比如:s.setFilter(具体的Filter对象实例);
ResultScanner rs = t.getScanner(s); //获得扫描后的结果集
for(Result r:rs) { //每一行的扫描结果,记录在Result中;
for(KeyValue kv:r.raw()) {//这里就体现了HBase中的存储实际上是 嵌套的MAP 的含义了。
System.out.println("Rowkey is " + Bytes.toString(kv.getRow()));
System.out.println("family is " + Bytes.toString(kv.getFamily()));
System.out.println("qualify is " + Bytes.toString(kv.getQualifier()));
System.out.println("timestamp is " + kv.getTimestamp());
System.out.println("value is " + Bytes.toString(kv.getValue()));
}
}
最新文章
- 转:WebService通用接口
- Apache—DBUtils框架
- Python全栈--6.1-match-search-findall-group(s)的区别以及计算器实例
- 对于程序开发者看书(指实在的书而不是PDF)的好处。(个人看法而已)
- MD5加密(16/32)
- layer.js定制弹窗
- 黄聪:wordpress如何获取当前页面的URL
- JAVA 方法或者类的注释快捷键
- 转】使用Maven编译项目遇到——“maven编码gbk的不可映射字符”解决办法
- MySQL 127.0.0.1和localhost本质区别
- Android版本判断
- Template Method 模板方法
- uva 10222 - Decode the Mad man
- 使用xtrabakcup 备份inodb数据库
- 宣布正式发布 Biz Talk Services、Azure Active Directory 和 Traffic Manager, 同时发布 Azure Active Directory 高级版预览
- 【转】Oracle + PHP Cookbook(php oracle clob 长度超过4000如何写入)
- 》》豆瓣API
- shell脚本补缺
- PyQt5--MessageBox
- caffe, caffe2, paddlepaddle, tensorflow对于cuda,cudnn,protobuf依赖的纠葛