第四章 客户端API:高级特性

4.1过滤器

  • 所有过滤器都在服务器端生效,叫 谓词下推(predicate push down)
  • 继承自compareFilter的Filter比较特殊,多了一个 compare() 方法
HBase内置比较器comparator
比较器 描述
BinaryComparator 使用Bytes.compareTo() 比较当前值与阀值
BinaryPrefixComparator 与上面的相似,使用Bytes.compareTo()进行匹配,但是是从左端开始前缀匹配
NullComparator 不做匹配,只判断当前值是不是Null
BitComparator 通过BitwiseOp类提供的按位与(AND)、或(OR)、异或(XOR)操作执行位数级比较
RegexStringComparator 根据正则表达式匹配
SubstringComparator 通过contains()操作匹配字符串
后面的三种比较器 BitComparator, RegexStringComparator, SubstringComparator 只能与 EQUAL, NOT_EQUAL 运算符搭配使用。因为这些比较器匹配完只返回0或者1

行过滤器(row filter)

行过滤器用于过滤行键(rowkey)
思考:可以用行过滤器来做一个简易的查询客户端(类似HUE)

单列值过滤器(SingleColumnValueFilter)

指定某列对其进行值比较(使用频率最高的filter)
setFilterIfMissing(true)可以将不存在该列的行过滤掉,否则如果该列不存在也被放到查询结果中了

单列排除过滤器(SingleColumnValueExcludeFilter)

继承自 SingleColumnValueFilter 唯一的区别是查询结果不包含查询列

前缀过滤器(PrefixFilter)

所有与前缀匹配的行都会返回到客户端,可以看做是某种特殊的行过滤器,但是速度更快

分页过滤器(PageFilter)

可以设定pagesize,但是由于是分布式系统,所以可能返回的比需要的多。
客户端代码记录本次扫描的最后一行,下次获取记录的时候可以把这个行设定为本次扫描的起始行,并同时保留相同的过滤器属性,然后依次迭代。(记住最后一行这个动作要自己实现,具体可见实例代码,在此就不贴上来了)
技巧:因为起始行会被包含在本次扫描中,这样会造成,改行不仅在上次循环中出现,在本次循环中也要出现,所以起始行要加一个0,这样这行就不会出现在本次扫描中

首次行键过滤器(FirstKeyOnlyFilter)

只比较一行中的第一列,看起来没什么用,不过可以做 行数统计用

FilterList

可以组合多个Filter
操作 描述
MUST_PASS_ALL 全部通过才返回
MUST_PASS_ONE 只要有一个通过就返回

而且过滤器执行的顺序就是你传入list的顺序

自定义过滤器

可以实现Filter接口或者继承 FilterBase

计数器

计数器其实也是一个列,只是通过 incr 和 get_incr  可以存入数值型和获取成数值型显示,否则都是二进制,无法实现+1递增

单计数器自增

table.incrementColumnValue()

多计数器自增

Increment i = new Increment();
i.addColumn(....);

协处理器

  • 协处理器就是一个小型的MapReduce框架,增加在服务端的计算功能,让返回的结果集更小
  • 用户需要自己编写java类并打包成jar来实现协处理器
  • 与过滤器不同的是,协处理器可以被动态加载
  • HBase的授权认证和审查就是基于协处理器的
协处理器分为两大类 observer 和 endpoint

observer

跟触发器类似:回调函数(hook)在某些特定的事件被触发的时候执行
协处理器提供了以下接口
  • RegionObserver 处理数据修改事件
  • MasterObserver 管理DDL级的操作
  • WALObserver 提供控制WAL的钩子函数

endpoint

类似存储过程。endpoint 跟 observer 可以结合使用
所有协处理器都可以被链接起来使用

Coprocessor接口

所有协处理器的共同接口。
有两个枚举类 Priority 和 State
Coprocessor.Priority
说明
SYSTEM 高优先级
USER 定义其他的协处理器,按顺序执行

协处理器有一个序号,用来定义同一优先级的时候的执行顺序,不过总体来说意义不大

CoprocessorEnviroment用来在协处理器的生命周期中保持其状态,提供了一些有用的方法
  • getHBaseVersion
  • getVersion 获取Coprocessor接口的版本
  • getInstance() 返回加载的协处理器实例
  • getPriority()
  • getLoadSequence() 获取序号
  • getTable( tableName) 返回HTable实例
协处理器应该用getTable方法获取HTable类,这样更安全,因为这个方法会加一些默认的安全措施,比如,协处理器不可以对一行数据加锁
Coprecessor.State
说明
UNINSTALLED 最初的状态,没有环境,也没有初始化
INSTALLED 实例装载了它的环境参数
STARTING 即将要开始工作,start()方法即将被调用
ACTIVE 一旦start()方法被调用,当前状态就是active
STOPPING stop()方法被调用之前的状态
STOPPED 一旦stop()方法将控制权交给框架,状态为stopped
CoprocessorHost 类,维护所有协处理器和他们专用的环境
当region被打开的时候,协处理器会被加载
注意:用户不能指定那张表或者哪个region会被加载
如果用表描述符中加载就可以指定表格

HTablePool

相当于传统数据库的连接池,可以不断的复用这个实例
使用HTablePool来获取HTable 实例
Configuration conf = HBaseConfiguration.create();
HTablePool pool = new HTablePool(conf,5);HTableInterface[] tables = new HTableInterface[10];
for(int n = 0; n<10; n++){tables[n] = pool.getTable("testtable");
}

如果用户要显示的使用某个连接

Configuration newConfig = new Configuration(originalConf);
HConnection connection = HConnectionManager.getConnection(newConfig);
//.......to something
HConnectionManager.deleteConnection(newConfig, true);

《HBase权威指南》读书笔记4相关推荐

  1. mysql数据库权威指南_MySQL_MySQL权威指南读书笔记(三),第二章:MYSQL数据库里面的数 - phpStudy...

    MySQL权威指南读书笔记(三) 第二章:MYSQL数据库里面的数据 用想用好MYSQL,就必须透彻理解MYSQL是如何看待和处理数据的.本章主要讨论了两个问题:一是SQL所能处理的数据值的类型:二是 ...

  2. MongoDB权威指南读书笔记——CRUD

    插入并保存文档 插入是向MongoDB中添加数据的基本方法.可以使用Insert方法向目标集合插入一个文档:db.foo.insert({"bar" : "baz&quo ...

  3. HTTP权威指南读书笔记

    <<HTTP权威指南>>读书笔记 第一部分:Web的基础 第1章:HTTP概述 主要内容 1.什么是HTTP 2.HTTP的基本组件 HTTP HTTP:HTTP(Hypert ...

  4. HTML5权威指南----读书笔记

    <!DOCTYPE html> <html> <head><meta name = 'keywords' content="HTML5权威指南--- ...

  5. 计算机网络和http权威指南 读书笔记

    计算机网络笔记 网络层 网络层向上提供无连接的,尽最大努力交付的数据报服务 网络层不提供数据质量承诺 物理层使用的中间设备叫转发器repeater 数据链路层叫网桥bridge 网络层叫路由器rout ...

  6. MapReduce总结 + 相关Hadoop权威指南读书笔记(未完......欢迎补充,互相学习)

    文章目录 MapReduce概述 MapReduce优缺点 MapReduce核心思想 MapReduce进程 MapReduce编程规范 WordCount 案例实操 本地测试 集群测试 Hadoo ...

  7. android开发读书笔记,android开发权威指南读书笔记

    第17章 Fragment 1.在res目录下增加 layout-sw600dp 目录,用于存放7英寸及以上尺寸屏幕的布局文件.10英寸以上平板用 sw720dp.如果是更小的屏幕,如 480*800 ...

  8. java性能权威指南中文_Java性能权威指南读书笔记--之一

    JIT(即时编译) 解释型代码:程序可移植,相同的代码在任何有适当解释器的机器上,都能运行,但是速度慢. 编译型代码:速度快,电视不同CPU平台的代码无法兼容. java则是使用java的编译器先将其 ...

  9. javascript权威指南读书笔记之二——词法结构

    本章讲述的内容,用通俗的语言来说,就是应该注意的地方,这些也许和我们所学的其他语言类似,也许完全不同,比如一开始就介绍说javascript程序中的每个字符都是用两个字节表示的,但有些程序设计者习惯于 ...

  10. HTTP权威指南读书笔记(一)HTTP概述、URL和资源及报文详解

    一.HTTP概述 1.WEB客户端和服务器. 2.资源:资源可以是各种格式的静态文件,也可以是应用程序. 3.媒体类型 4.URI:统一资源标识符 URL:统一资源定位符. URL的第一部分称为方案: ...

最新文章

  1. 【转】测试思考——测试人员需要具备哪些素质?
  2. 理论上每天有8.5到11.5小时的学习时间,可是为什么只有最多4小时是有效的?如何改善?...
  3. 理解单例模式、单例类
  4. SAP Cloud for Customer销售订单External Note的建模细节
  5. jdk1.8新特性之lambda表达式及在Android Studio中的使用举例
  6. DBA:介里有你没有用过的“CHUAN”新社区版本Redis6.0
  7. 【Deep Learning 二】课程一(Neural Networks and Deep Learning),第二周(Basics of Neural Network programming)答案
  8. linux python虚拟环境 error_阿里云Linux系统配置python3-虚拟环境-mysql --踩坑实践(Ubuntu系统转centOS7)...
  9. python字典长度可变吗_[python] 根据字典中的信息生成列表,每次都会额外变长。...
  10. Android学习之Activity生命周期
  11. 【系统分析师之路】系分历年论文命题走向
  12. R语言风玫瑰图绘制(附代码)
  13. 解决刷了Gargoyle固件后某些LED灯不亮的问题
  14. 华为云×奇点云 | 828 B2B企业节,一起成就好生意
  15. 自定义 Oh My Zsh 主题 cchi.zsh-theme
  16. 2021 ICPC网络赛I-A Busiest Computing Nodes(线段树)
  17. Python电影爬虫,用Excel存储并进行数据可视化分析
  18. 估值最高的自媒体达38亿,不是咪蒙、一条,也不是逻辑思维,而是他..
  19. 【Transformer专题】一、Attention is All You Need(Transformer入门)
  20. 多目标蚁群算法路径规划(四)------多目标约束过程常规流程框架

热门文章

  1. Motion 5 for Mac(专业视频编辑软件)v5.3.2永久破解版
  2. RS232 RS422 RS485通讯原理
  3. 支付网关清算及退款流程
  4. 课程作业记录10:63位PN码序列扩频通信Matlab仿真
  5. 使用COOC软件绘制复杂网络
  6. 仿花生日记淘宝客双端原生APP网站源码
  7. 七款修复工具介绍:不仅能修复U盘,SD卡、TF卡也能修复!
  8. 数据分析岗位需求分析报告
  9. 认知无线电-频谱检测-匹配滤波
  10. PADS2007教程(二)——PCB封装